Anda di halaman 1dari 34

3.

Analog To Digital Converter ADC0804


ADC0804 adalah ADC 8 bit SAR CMOS yang menggunakan potensiometrik
ladder 256R. ADC ini didisain untuk menyesuaikan dengan operasi data output
TRI-STATE

yang dihubungkan langsung ke data bus. ADC ini dapat

dihubungkan langsung seperti memori dan port IO dari mikroprosesor tanpa


perlu rangkaian interfacing. Input tegangan analog differensial yang dididisain
dapat menaikkan nilai CMMR dan untuk meng-offset input ZERO. Selain itu
tegangan referensi input dapat diatur untuk menyesuaikan dengan tegangan
input yang lebih kecil sehingga resolusi 8 bit nya dapat digunakan semua.
Spesifikasi :

Mudah di-interface-kan dengan semua mikroprosesor

Input berupa tegangan analog differensial

Input dan output mempunyai level TTL

Tegangan referensi 2.5 volt

Generator clock on chip

Tegangan input 0 5 volt dengan catu daya tunggal

Tidak memerlukan zero adjust

Resolusi 8 bit

Error total +/-1 LSB

Waktu konversi 100 us

Aplikasi umum :

Teknik Akuisisi Data

27

Gambar 3.1 adalah aplikasi ADC0804 dengan mikroprosesor, dimana


data dari ADC bisa terhubung langsung ke data bus mikroprosesor,
sedangkan sinyal kontrolnya terhubung ke decoding address nya.

gambar 3.1. Aplikasi umum ADC0804

3.1. Fungsi pin pada ADC 0804

gambar 3.2 Pin ADC0804

Fungsi kaki pada ADC0804 :


Vin (-)

: masukan analog negatif

Vin(+)

: masukan analog positif

A-GND

: analog ground

Teknik Akuisisi Data

28

Vref/2

: Setengah tegangan referensi untuk skala penuh

CLK-R dan CLK-IN


: untuk mengatur besarnya clock external
WR

: sinyal kontrol untuk memulai awal konversi

RD

: sinyal kontrol untuk mengambil data

CS

: sinyal untuk mengaktifkan komponen

INTR

: status untuk mengetahui bahwa konversi sudah selesai

LSB-MSB : data 8 bit


VCC

: Tegangan catu daya

3.2 Cara Kerja ADC:


Konverter AD 0804 adalah sebuah konverter analog ke digital 8-bit
yang mudah diperantarakan (interfaced) dengan mikroprosesor 8080 atau
8085 atau jenis lain. Komponen ini menggunakan aprosikmasi berturut-turut
untuk mengkonversi masukan analog dalam jangka tertentu menjadi data
digital 8-bit yang ekivalen. ADC 0804 mempunyai pembangkit pulsa internal
dengan sedikit tambahan komponen eksternal, membutuhkan catu tegangan
sebesar +5V, dan mempunyai waktu konversi optimum sekitar 100 mikro
detik.
Tegangan input maksimum yang dapat dikonversikan bergantung
pada seberapa besar tegangan pada pin Vref/2 dengan tegangan absolut
maksimum sebesar 18V (dari data sheet). Pada skema rangkaian pin Vref/2
diberi tegangan sebesar 2,55 V yang berarti data digital FF pada output
bersesuaian dengan data analog input sebesar 5.10V. Resolusi dari ADC ini
adalah 20 mV

Teknik Akuisisi Data

29

Untuk satu kali proses konversi, CS (Chip Select) terlebih dahulu


harus diaktifkan, pada skema, CS selalu aktif dengan menghubungkannya pada
ground. Start of Convertion dilakukan dengan memberi logika HIGH - LOW HIGH

pada pin WR dan RD harus tetap HIGH. INTR secara langsung

menuju ke logika HIGH jika sebelumnya berlevel LOW. Begitu data telah siap
pada output latch, INTR menuju ke level rendah sebagai pertanda bahwa data
telah siap.
Pengambilan data dilakukan pertama kali dengan mengaktifkan CS
yang kemudian diikuti dengan memberi level HIGH - LOW pada pin RD
(read). Kita tunggu sinyal INTR sampai HIGH. Jika INTR sudah HIGH, maka
data telah siap pada pin-pin output digital dan kita ambil data tersebut. Setelah
data diambil, sinyal RD diberi level HIGH, data kembali ke high impedance.

Teknik Akuisisi Data

30

gambar 3.3. Diagram blok ADC0804

3.3. Timing Diagram


Timing diagram berikut adalah cara kerja ADC0804 seperti di atas

Teknik Akuisisi Data

31

gambar 3.4. Timing diagram ADC0804

Adapun dalam pemrograman ADC0804 harus diperhatikan timing diagram


nya . Urut-urutannya adalah sebagai berikut :

WR = 1, RD = 1

WR = 0

WR = 1

Pada saat perintah

di atas diberikan, maka ADC akan mulai

melakukan konversi. Konversi akan selesai jika ADC mengeluarkan

Teknik Akuisisi Data

32

sinyal INTR = 0. Jadi INTR memberikan tanda ke rangkaian


interfacing bahwa konversi telah selesai.

Untuk mengambil data hasil konversi, RD = 0. INTR tetap 0 jika


RD masih 0. Setelah data di ambil RD = 1 dan langkah pertama
dimulai lagi

Mode stand alone

gambar 3.5. Mode stand alone

Mode ini bisa anda gunakan jika anda tidak ingin susah-susah melakukan
pemrograman. Cukup dengan memberi sinyal WR = 0 saja maka data akan
keluar dengan sendirinya. CS dan RD di grounded.

3.4. ADC0804 yang diinterfacedkan dengan PPI Card


Teknik Akuisisi Data

33

3.4.1. Gambar Skema ADC dengan Kontrol dari PPI

gambar 3.6. Skema ADC0804 dengan PPI

3.4.2. Rangkaian pendukung ADC


Berikut perhitungan komponen pendukung dari ADC0804:
Resistor R2 dan kapasitor C4 merupakan komponen pendukung dari
internal clock ADC0804. Rangkaian RC ini memberikan frekuensi clock
sebesar:
fclk = 1/(RC) = 1/(10k . 150pF) = 667 khz
Resistor R4, potensio P1 dan zener Z2 4V7 membentuk rangkaian pembagi
tegangan untuk memberikan tegangan Vref yang dibutuhkan oleh
ADC0804. R4 dipilih 220 dan P1 dipilih 10K . Dengan Vcc 5V harga P1
bisa diatur untuk menghasilkan Vref sebesar 2,55 V.
3.4.3. Pengujian rangkaian menggunakan PPI 8255

Teknik Akuisisi Data

34

Untuk menguji laik tidaknya modul ADC digunakan maka dilakukan pengujian
pada modul PPI 8255. ADC diberi input dari luar berupa variabel tegangan 0
s.d 5 volt, output data hasil konversi dihubungkan dengan Port B PPI 8255
(PB[0...7]) sedangkan untuk selektor kanal digunakan port A [A0-A2]. Sinyal
kontrol ADC dihubungkan dengan Port C. ADC diaktifkan terus menerus (siap
untuk konversi, CS = LOW).
Sinyal RD dihubungkan dengan PC0 dan WR dengan PC1. INTR
dihubungkan dengan PC7. Sebelum mengaktifkan ADC, PPI harus
diberi control word sbb:
Port A
Port B
Port C lower
Port C upper

: output
: input
: output
: input

diperoleh control word : 8AH, sehingga software-nya


port [$303 ] := $8A;
kemudian pilih kanal yang aktif dengan mengirim PA0 - PA2,
sedangkan PA3 - PA7 = 0.
channel
: = 0; { 0 s.d 7 }
port[$300]
: = channel;
dan semua sinyal kontrol di-HIGHkan (lihat timing diagram di bab
3).
Start Conversion dimulai dengan WR = 1 - 0 - 1 dan RD = 1
port[$302] : = 3;
port[$302] : = 1;
port[$302] : = 3;
Selanjutnya sinyal RD = 1 - 0 dan WR = 1
port[$302] : = 3;
port[$302] : = 2;
Teknik Akuisisi Data

35

Tunggu sinyal INTR sampai LOW, kemudian data diambil dan RD


=1
repeat
cek := port[$302];
cek := cek and $10;
until cek = 0;
{ konversi sudah selesai }
data
: port[$301];
port[$302] : = 3;
Kalibrasi dengan 1 LSB = 20 mV:
volt : = data * (20 / 1000);

3.4.4 Program untuk ADC 0804


Program aplikasi dengan TURBO PASCAL:
{ program ADC0804 dengan TURBO PASCAL }
{
oleh : Rachmad Setiawan, ST,MT
{ staff pengajar di Elektronika-Elektro -ITS Surabaya }

{PB7
{

PB1
WR

PB6

PB5

PB4
C

PB3
B

PB2
A

PB0 }
RD }

uses crt,graph;
var
volt
: array[1..620] of real;
gd,gm,i : integer;
data
: byte;

procedure adc(chan : byte);


begin
chan := chan shl 2;
port[$301]:=3 or chan; { WR = 1, RD = 1 }
delay(1);
port[$301]:=1 or chan; { WR = 0, RD = 1 }
delay(1);
port[$301]:=3 or chan; { WR = 1, RD = 1 }
{ KONVERSI DIMULAI }
delay(5);
Teknik Akuisisi Data

36

port[$301]:=2 or chan; { WR = 1, RD = 0 }
data:= port[$302];
{ AMBIL DATA }
volt[i]:= (data * 20)/1000;
port[$301]:=3 or chan; { WR = 1, RD = 1 }
end;

procedure grafik;
begin
gd:=detect;
initgraph(gd,gm,' ');
end;
procedure bingkai;
begin
setcolor(14);
outtextxy(200,40,'ANALOG TO DIGITAL CONVERTER');
outtextxy(200,50,' ADC0804 8 CHANNEL INPUT ');
outtextxy(10,130,'5'); outtextxy(10,180,'4');
outtextxy(10,230,'3');outtextxy(10,280,'2');
outtextxy(10,330,'1');outtextxy(10,380,'0');
setcolor(LIGHTGRAY);setlinestyle(0,0,3);
rectangle(20,120,620,400);
end;
begin
clrscr;
grafik;
port[$303]:=$89;
bingkai;
i:=0;
repeat
adc(0);
i:=i+1;
putpixel(i+20,380-round(volt[i]*50),14);
if i= 600 then
begin
delay(10);
i:=0; clearviewport;
bingkai;
end;
until keypressed;
closegraph;
end.

3.5. ADC0804 yang diinterfacedkan dengan LPT1


Teknik Akuisisi Data

37

gambar 3.7. buffer LPT 1 dengan ADC0804


Keterangan :
Dari LPT mode SPP :

Port 378H: D7 D6 D5 D4 D3 D2 D1 D0 semuanya berfungsi


sebagai output

Port 379H : -D7 D6 D5 D4 D3 berfungsi sebagai input 5 bit


dengan D7 bersifat inverter (membalik)

Port 37AH : -D3 D2 -D1 -D0 berfungsi sebagai output dengan


D3, D1, D0 bersifat inverter.

Kemudian dari informasi ADC dan DAC diperoleh informasi sebagai berikut:

DAC membutuhkan 8 bit output dari rangkaian interfacing

Teknik Akuisisi Data

38

ADC membutuhkan 8 bit input, 2 output sinyal kontrol RD dan WR


dan 3 sinyal untuk selector multiplekser.

Sehingga LPT kekurangan sinyal untuk melakukan proses interfacing. Untuk


memenuhi kebutuhan tersebut, maka dilakukan beberapa cara yaitu buffer
sinyal dengan menggunakan IC 74LS573. IC 74LS573 bekerja mengikuti
aturan sebagai berikut:

-OE merupakan pin untuk membuka data output. Jika OE = 0,


maka data dikeluarkan dan di latch dan jika OE =1 maka data
ditutup dan output IC bersifat high impedance.

C merupakan pin untuk membuka data agar masuk ke dalam IC. Jika
C = 0 maka data tidak dapat masuk dan jika C =1 maka data dapat
masuk. 1D 8D adalah pin data masuk dan 1Q 8Q adalah pin data
keluar.

Selain IC74LS573 yang berfungsi untuk data output, IC74LS157 adalah IC


multiplekser yang digunakan untuk data masuk. Kerja dari IC74LS157 adalah
sebagai berikut :
Tabel 3.1. Tabel kebenaran multiplekser
G
1
0
0

-A/B
X
0
1

4Y
x
4A
4B

3Y
x
3A
3B

2Y
x
2A
2B

1Y
x
1A
1B

IC bekerja jika G = 0 atau di grounded. Jika A/B = 0, maka Y akan


sama dengan A dengan indeks yang bersesuaian dan jika A/B = 1, maka Y
akan sama dengan B dengan indeks yang bersesuaian
Teknik Akuisisi Data

39

Dari informasi 2 IC tambahan tadi, maka dibuatlah rangkaian seperti


gambar 11.2. Port 378H yang terdiri dari 8 bit output dijadikan 16 bit output
dengan bantuan data dari port 37AH yaitu 37A.0 dan 37A.2. Sedangkan 37A.1
digunakan untuk selektor dari IC multiplekser 74LS157. Adapun cara kerjanya
adalah sebagai berikut :

Kondisi pertama kali dari port 37AH adalah sebagai berikut :


-37A.3
8
1

37A.2
4
0

-37A.1
2
1

-37A.0
1
1

Data
Biner
11

portout($37A,11);

Jika akan mengeluarkan data ke DAC, maka siapkan data di


port 378H kemudian ikuti langkah berikut :
portout($378,dataDAC);

-37A.3
8
1

37A.2
4
0

-37A.1
2
1

-37A.0
1
0

Data
Biner
10

portout($37A,10);

Kunci pintu masuk dari IC74LS573 dengan memberi output 0


pada pin C (ingat 37A.H bersifat inverter)
portout($37A,11);

Jika ingin menjalankan ADC0804, maka perhatikan timing diagram dari ADC
seperti dibahas pada bab 3. Urutan programnya adalah

WR = 1, RD = 1, delay sebentar

WR = 0, RD = 1, delay sebentar

WR = 1, RD = 1, delay sebentar

Tunggu INT = 0

Teknik Akuisisi Data

40

Jika INT sudah = 0, ambil data dengan memberi perintah


RD = 0. kemudian ambil datanya.

Setelah data diambil, kembalikan seperti semula


WR = 1, RD = 1

Tetapi ada 1 syarat tambahan yaitu pemilihan kanal harus didahulukan dan
tidak boleh berubah selama proses di atas. Keterangan lebih lengkap ada pada
bagian penjelasan software

gambar 3.8. ADC0804 dengan multiplekser dan clipper

Pada gambar 3.8 di atas, frekuensi clock yang digunakan adalah sebuah R2 10
K kapasitor 150 pF, mempunyai frekuensi

f osc

1
2RC

f osc 667 KHz


Teknik Akuisisi Data

41

Tegangan referensi menggunakan dioda zener 6V2 serta multiturn yang diatur
untuk mendapatkan tegangan 5.1 V.

gambar 3.9. DAC0808


Pada gambar 10.6 di atas, tegangan referensi dibuat dari zener 6V2 dan
multiturn 10 K yang diatur untuk mendapatkan tegangan 5.1 V. Tegangan
diukur pada pin 1 dari U6:A LF353, bukan pada pin 14 dari DAC, karena
referensi yang diambil DAC adalah arus 2 mA. R4 dan R5 besarnya harus sama
yaitu :
R4 = 5.1 / 20 mA = 2K5

3.5.2. Penjelasan program utama


Program yang dibuat oleh penulis mempunyai tampilan seperti di
bawah ini. Anda bisa menjalankan program AD0809.exe pada CD yang
terlampir.

Teknik Akuisisi Data

42

gambar 3.10. Tampilan depan dari akuisisi data menggunakan ADC0809

Jika anda memakai program Delphi 7 under Windows XP, maka pertama kali
yang perlu anda ketahui adalah file io.dll. File ini mengijinkan anda melakukan
perintah input dan output. Adapun cara melakukan inisialisasinya adalah
sebagai berikut :
implementation
procedure PortOut(Port : Word; Data : Byte); stdcall; external 'io.dll';
function PortIn(Port:Word):Byte; stdcall; external 'io.dll';

Penulisan procedure dan function tepat di bawah implementation


procedure PortOut(Port : Word; Data : Byte);

Teknik Akuisisi Data

43

prosedur ini mempunyai maksud , jika kita akan mengirim data 13 pada alamat
37AH, maka penulisannya adalah
portout($37A,13);

dan apabila ingin mengambil data dari suatu alamat 379H, maka penulisannya
adalah sebagai berikut :
dataH := portin($379);

3.5.3. Penjelasan Program DAC


Prosedur DAC
Perhatikan program untuk DAC di bawah ini
procedure TForm1.cmdDACClick(Sender: TObject);
begin
Vo := StrToFloat(Edit1.Text);
dataDAC := round(Vo*50);
portout($37A,13);
portout($37A,10);
portout($378,dataDAC);
portout($37A,13);
end;

Vo := StrToFloat(Edit1.Text);

Teks angka di dalam Edit1 diubah menjadi data integer dan disimpan ke
variable Vo
dataDAC := round(Vo*50);

Pada skala penuh, 255 setara dengan 5.1 volt (50:1), sehingga jika kita
menginginkan tegangan keluaran DAC, maka tegangan harus diubah menjadi
data biner sehingga Vo x 50 = data biner. Penggunaan round harus dilakukan
karena data yang dikeluarkan harus dalam word. Variabel yang digunakan
adalah dataDAC.
Sinyal kontrol untuk mengaktifkan buffer DAC
-37A.3
x

37A.2
Kontrol

Teknik Akuisisi Data

-37A.1
Multiplekser

-37A.0
Buffer DAC

Biner

KETERANGAN

44

11

10

11

Data
tidak
bisa
masuk buffer DAC
Data disiapkan dan
masuk buffer DAC
Data dikunci di dalam
buffer DAC

37A.2 harus dalam kondisi 0, agar data yang akan dikeluarkan ke DAC tidak
ikut ke ADC.
portout($37A,11);

Sebelum data DAC dikeluarkan, terlebih dulu pintu masuk data dari DAC
dimatikan dulu, kemudian data DAC disiapkan
portout($378,dataDAC);
portout($37A,10);
Setelah data DAC dikeluarkan, barulah pintu masuk U2 diaktifkan, sesaat kemudian
dimatikan lagi
portout($37A,11);

Prosedur ADC
procedure TForm1.BacaADC(chan: byte);
begin
portout($37A,15);
portout($378,$00 or chan); { ALE = START = ENABLE = 0
portout($378,$08 or chan); { ALE = 1, START = ENABLE = 0
portout($378,$28 or chan); { ALE = START = 1, ENABLE = 0
portout($378,$00 or chan); { ALE = START = ENABLE = 0
portout($37A,11);

}
}
}
}

repeat
intr := portin($379);
intr := intr and 8;
until intr = 8;
portout($37A,15);
portout($378,$10 or chan);
delay(1);
portout($37A,11);
{ 4 bit bawah }
dataL := portin($379);

Teknik Akuisisi Data

{ ALE = START = 0,ENABLE = 1 }

45

portout($37A,9);
{ 4 bit atas }
dataH := portin($379);
dataL := dataL and $0f0;
dataL := dataL shr 4;
d0 := dataL and 1;
d1 := dataL and 2;
d2 := dataL and 4;
d3 := dataL and 8;
d3 := not d3;
d3 := d3 and 8;
dataL := d3 + d2 + d1 + d0;
dataH := dataH and $0f0;
d4 := dataH and 16;
d5 := dataH and 32;
d6 := dataH and 64;
d7 := dataH and 128;
d7 := not d7;
d7 := d7 and 128;
dataH := d7 + d6 + d5 + d4;
data := dataL + dataH;
volt := (data *20)/1000;
delay(1);
end;

Dari gambar 10.4 dan 10.5 di atas, diperoleh informasi :


Sinyal kontrol untuk mengaktifkan buffer ADC
-37A.3
x

37A.2
Kontrol

-37A.1
Multiplekser

-37A.0
Buffer DAC

Biner

11

15

11

KETERANGAN
Data tidak bisa masuk
buffer ADC
Data disiapkan dan
masuk buffer ADC
Data dikunci di dalam
buffer ADC

37A.0 harus dalam kondisi 1 (bersifat inverter), agar data yang akan
dikeluarkan ke buffer ADC tidak ikut ke DAC.

Sinyal kontrol untuk mengambil 4 bit data ADC bawah dan 4 data ADC atas
Teknik Akuisisi Data

46

-37A.3
x

37A.2
Kontrol

-37A.1
Multiplekser

-37A.0
Buffer DAC

Biner

11

KETERANGAN
Untuk mengambil
data ADC 4 bit
bawah
Untuk mengambil
data ADC 4 bit
atas

37A.0 harus dalam kondisi 1 (bersifat inverter), agar data yang akan
dikeluarkan ke buffer ADC tidak ikut ke DAC dan 37A.2 harus dalam kondisi
0 agar data tidak masuk ke buffer ADC
Sinyal kontrol untuk menjalankan ADC
378.7
X
0
0
0
0
0

378.6
X
0
0
0
0
0

0
0

0
0

378.5
START

0
0
1
1
0
0
0

378.4 378.3 378.2


EN
ALE
C
0
0
0
0
1
0
0
1
0
0
0
0
0
0
0
TUNGGU EOC = 1
1
0
0
0
0
0

378.1
B
0
0
0
0
0

378.0
A
0
0
0
0
0

Data

KET

00H
08H
28H
20H
00

START
CONVERSION

0
0

0
0

10H
00H

AMBIL DATA

Data di atas diberikan dengan syarat buffer ADC harus aktif, sedangkan buffer
DAC harus OFF, sehingga sinyal kontrolnya adalah :
portout($37A,15);

Sehingga program ditulis :


portout($37A,15);
portout($378,$00 or chan);
portout($378,$08 or chan);
portout($378,$28 or chan);
portout($378,$00 or chan);
portout($37A,11);

{Buffer ADC dibuka}


{ ALE = START = ENABLE = 0
{ ALE = 1, START = ENABLE = 0
{ ALE = START = 1, ENABLE = 0
{ ALE = START = ENABLE = 0
{Buffer ADC ditutup}

}
}
}
}

program di atas digunakan untuk memulai konversi. 'or chan digunakan untuk
memilih kanal input yang akan dikonversi.
Teknik Akuisisi Data

47

Untuk mengetahui apakah konversi sudah selesai atau belum, maka output
INTR dari ADC harus dilihat. Jika INTR = 0, berarti konversi belum selesai
dan jika INTR = 1, maka konversi sudah selesai. Pin LPT yang digunakan
adalah 379H bit 3 sehingga program menjadi
repeat
intr := portin($379);
intr := intr and 8;
until intr = 8;

Jika konversi sudah selesai, maka data ADC harus diambil secara bergantian, 4
bit bawah (D3 D0) kemudian 4 bit atas (D7 D4). Untuk mengambil 4 bit
bawah, maka sinyal selektor dari multiplekser 74LS157 A/B = 0, kemudian
data diambil.:
portout($37A,11);
dataL := portin($379);

dan untuk mengambil 4 bit atas, maka sinyal selektor dari multiplekser
74LS157 A/B = 1, kemudian data diambil.:
portout($37A,9);
dataH := portin($379);

Masalah terjadi, karena bit 7 dari 379H bersifat inverter. Maka khusus bit 7
harus di NOT kan. Pada 4 bit bawah, data harus di AND kan dengan F0H
kemudian digeser 4x ke kanan (D3 D0, masuk ke -379.7 379.4)
dataL := dataL and $0f0;
dataL := dataL shr 4;

bit d0 di AND kan dengan 1


d0

:= dataL and 1;

bit d1 di AND kan dengan 2


Teknik Akuisisi Data

48

d1

:= dataL and 2;

bit d2 di AND kan dengan 4


d2

:= dataL and 4;

bit d3 di AND kan dengan 8, kemudian di NOT dan di AND kan dengan 8 lagi
d3
d3
d3

:= dataL and 8;
:= not d3;
:= d3 and 8;

dataL kemudian diperoleh dengan menjumlah d0 sampai d3, dimana d3 sudah


mengalami proses inverter.
dataL := d3 + d2 + d1 + d0;

Pada 4 bit atas, data harus di AND kan dengan F0H tetapi tanpa menggeser
data, karena D7 D4 masuk ke -379.7 379.4
dataH := dataH and $0f0;

bit d4 di AND kan dengan 16


d4

:= dataH and 16;

bit d5 di AND kan dengan 32


d5

:= dataH and 32;

bit d6 di AND kan dengan 64


d6

:= dataH and 64;

bit d7 di AND kan dengan 128, kemudian di NOT dan di AND kan dengan
128 lagi
d7
d7
d7

:= dataH and 128;


:= not d7;
:= d7 and 128;

Teknik Akuisisi Data

49

dataH kemudian diperoleh dengan menjumlah d4 sampai d7, dimana d7 sudah


mengalami proses inverter.
dataH := d7 + d6 + d5 + d4;

data kemudian diperoleh dengan menjumlah dataL dengan dataH, dan


dikalibrasi menjadi tegangan dengan mengalikan data dengan 1 LSB nya
data := dataL + dataH;
volt := (data *20)/1000;

Prosedur kanal ADC


Prosedur kanal 0
procedure TForm1.ReadADC0;
begin
with PaintBox1.Canvas do
begin
BacaADC(0);volt1[i]:=volt;
Pen.Width:=1;
Pen.Color:=clYellow;
LineTo(i,75-round(volt1[i]*15));
end;
end;

BacaADC(0) maksudnya mengambil data dari ADC kanal 0. Volt1[I] := volt,


maksudnya volt1[i] variabel untuk kanal 0 sama nilainya dengan volt hasil
kalibrasi pada prosedur BacaADC

procedure TForm1.ReadADC1;
begin
with PaintBox2.Canvas do
begin
BacaADC(1);volt2[i]:=volt;
Pen.Width:=1;
Pen.Color:=clYellow;
LineTo(i,75-round(volt2[i]*15));
end;
end;
Teknik Akuisisi Data

50

BacaADC(1) maksudnya mengambil data dari ADC kanal 1. Volt2[I] := volt,


maksudnya volt2[i] variabel untuk kanal 1 sama nilainya dengan volt hasil
kalibrasi pada prosedur BacaADC
procedure TForm1.ReadADC2;
begin
with PaintBox3.Canvas do
begin
BacaADC(2);volt3[i]:=volt;
Pen.Width:=1;
Pen.Color:=clYellow;
LineTo(i,75-round(volt3[i]*15));
end;
end;

BacaADC(2) maksudnya mengambil data dari ADC kanal 2. Volt3[I] := volt,


maksudnya volt3[i] variabel untuk kanal 2 sama nilainya dengan volt hasil
kalibrasi pada prosedur BacaADC
procedure TForm1.ReadADC3;
begin
with PaintBox4.Canvas do
begin
BacaADC(3);volt4[i]:=volt;
Pen.Width:=1;
Pen.Color:=clYellow;
LineTo(i,75-round(volt4[i]*15));
end;
end;

BacaADC(3) maksudnya mengambil data dari ADC kanal 3. Volt4[I] := volt,


maksudnya volt4[i] variabel untuk kanal 3 sama nilainya dengan volt hasil
kalibrasi pada prosedur BacaADC
procedure TForm1.ReadADC4;
begin
with PaintBox5.Canvas do
begin
BacaADC(4);volt5[i]:=volt;
Pen.Width:=1;
Pen.Color:=clYellow;
LineTo(i,75-round(volt5[i]*15));
Teknik Akuisisi Data

51

end;
end;

BacaADC(4) maksudnya mengambil data dari ADC kanal 4. Volt5[I] := volt,


maksudnya volt5[i] variabel untuk kanal 4 sama nilainya dengan volt hasil
kalibrasi pada prosedur BacaADC
procedure TForm1.ReadADC5;
begin
with PaintBox6.Canvas do
begin
BacaADC(5);volt6[i]:=volt;
Pen.Width:=1;
Pen.Color:=clYellow;
LineTo(i,75-round(volt6[i]*15));
end;
end;

BacaADC(5) maksudnya mengambil data dari ADC kanal 5. Volt6[I] := volt,


maksudnya volt6[i] variabel untuk kanal 15sama nilainya dengan volt hasil
kalibrasi pada prosedur BacaADC
procedure TForm1.ReadADC6;
begin
with PaintBox7.Canvas do
begin
BacaADC(6);volt7[i]:=volt;
Pen.Width:=1;
Pen.Color:=clYellow;
LineTo(i,75-round(volt7[i]*15));
end;
end;

BacaADC(6) maksudnya mengambil data dari ADC kanal 6. Volt7[I] := volt,


maksudnya volt2[i] variabel untuk kanal 6 sama nilainya dengan volt hasil
kalibrasi pada prosedur BacaADC

procedure TForm1.ReadADC7;
begin
with PaintBox8.Canvas do
begin
Teknik Akuisisi Data

52

BacaADC(7);volt8[i]:=volt;
Pen.Width:=1;
Pen.Color:=clYellow;
LineTo(i,75-round(volt8[i]*15));
end;
end;

BacaADC(7) maksudnya mengambil data dari ADC kanal 7. Volt8[I] := volt,


maksudnya volt8[i] variabel untuk kanal 7 sama nilainya dengan volt hasil
kalibrasi pada prosedur BacaADC
Prosedur untuk menampilkan hasil pembacaan ADC pada setiap kanal
pada Edit.
procedure TForm1.cmdADCClick(Sender: TObject);
begin
if cmdADC.Caption = 'Stop' then
cmdADC.Caption := 'Proses'
else
if cmdADC.Caption = 'Proses' then
cmdADC.Caption := 'Stop';
i:=0;kotak1;kotak2;kotak3;kotak4;
kotak5;kotak6;kotak7;kotak8;
repeat
ReadADC0;
Edit2.Text:=FloatTostr(volt);
ReadADC1;
Edit3.Text:=FloatTostr(volt);
ReadADC2;
Edit4.Text:=FloatTostr(volt);
ReadADC3;
Edit5.Text:=FloatTostr(volt);
ReadADC4;
Edit6.Text:=FloatTostr(volt);
ReadADC5;
Edit7.Text:=FloatTostr(volt);
ReadADC6;
Edit8.Text:=FloatTostr(volt);
ReadADC7;
Edit9.Text:=FloatTostr(volt);
i:=i+1;
if i= 280 then
begin
i:=0;kotak1;kotak2;kotak3;kotak4;
kotak5;kotak6;kotak7;kotak8;
end;
until cmdADC.Caption = 'Stop';
Teknik Akuisisi Data

53

end;
end.

3.6. ADC0804 yang diinterfacedkan dengan COM1

gambar 3.11. ADC0804 dengan mikrokontroler

gambar 3.12. Mikrokontroler 89S51

Teknik Akuisisi Data

54

gambar 3.13. Buffer serial RS232

Listing program bahasa assembly


ORG 00H
SJMP START
;------------------------------------;
LCD CONSTANTA
;------------------------------------DISPCLR
EQU
FUNCSET
EQU
ENTRMOD
EQU
DISPON
EQU
DATA_ADC
EQU
SAT
EQU
PUL
EQU
RAT
EQU

00000001B
00111000B
00000110B
00001100B
60H
61H
62H
63H

START:
ACALL
ACALL

INIT_LCD
INIT_SERIAL

MOV
ACALL

DPTR,#BARIS1
PRINTSTRING1

MOV
ACALL
ACALL
MOV
ACALL

DPTR,#BARIS2
PRINTSTRING2
TUNDA
DPTR,#HASIL
PRINTSTRING1

ACALL
ACALL

READ_ADC
OLAH_DATA

MAIN:

Teknik Akuisisi Data

55

ACALL
ACALL
SJMP

TX
TUNDA
MAIN

CLR
CLR
CLR
RET

P3.3
P3.4
P3.5

CH0:

READ_ADC:
ACALL
SETB
SETB
ACALL
CLR
ACALL
SETB
ACALL
JB
CLR
MOV
MOV
SETB
RET
OLAH_DATA:
MOV
MOV
DIV
MOV
MOV
DIV
MOV
MOV

CH0
P1.2
P1.3
DELAY
P1.2
DELAY
P1.2
DELAY
P3.2,$
P1.3
A,P2
DATA_ADC,A
P1.3

A,DATA_ADC
B,#10
AB
SAT,B
B,#10
AB
PUL,B
RAT,A

MOV
ACALL
MOV
ADD
ACALL

A,#85H
CONTROLOUT
A,RAT
A,#30H
DATAOUT

MOV
ACALL
MOV
ADD
ACALL

A,#86H
CONTROLOUT
A,PUL
A,#30H
DATAOUT

MOV
ACALL

A,#87H
CONTROLOUT

Teknik Akuisisi Data

56

MOV
ADD
ACALL
RET

A,SAT
A,#30H
DATAOUT

;------------------------------------------------------------------------; PROSEDUR MENGIRIM DATA DARI UC KE PC


;------------------------------------------------------------------------TX:
MOV
A,DATA_ADC
MOV
SBUF,A
JNB
TI,$
CLR
TI
RET
;-----------------------------------------------------------------; PROSEDUR MENERIMA DATA DARI PC
;-----------------------------------------------------------------RX:
;
MOV
IE,#0
CLR
RI
JNB
RI,$
MOV
A,SBUF
MOV
R3,A
MOV
A,#08FH
; PESAN TEMPAT DI KOLOM 15 BARIS 1
ACALL CONTROLOUT
MOV
A,R3
ADD
A,#30H
; ASCII
ACALL DATAOUT
;
MOV
IE,#10010000B
RET
;--------------------------------------------------; PROSEDUR INISIALISASI SERIAL
;--------------------------------------------------INIT_SERIAL:
MOV
SCON,#01010000b ;Set Mode 1
MOV
TMOD,#00100000b
;Set Timer 8 bit auto reload
MOV
TH1 ,#0FDh
;9600 bps pada kristal 11,0592 MHz
MOV
TCON,#40H
SETB
TR1
;Start Timer 1
RET
;-------------------------------------------------------; PROSEDUR PEMESANAN TEMPAT
;-------------------------------------------------------; RS : 0
: P1.0
;E :0-1-0
: P1.1
; DATA
: P0
CONTROLOUT:
Teknik Akuisisi Data

57

CLR
ACALL
CLR
ACALL
SETB
ACALL

P1.0
DELAY
P1.1
DELAY
P1.1
DELAY

MOV
CLR
ACALL
RET

P0,A
P1.1
DELAY

; RS = 0

;-------------------------------------------------------; PROSEDUR PENEMPATAN DATA


;-------------------------------------------------------; RS : 0
: P1.0
;E :0-1-0
: P1.1
DATAOUT:
SETB
ACALL
CLR
ACALL
SETB
ACALL
MOV
CLR
ACALL
RET

P1.0
DELAY
P1.1
DELAY
P1.1
DELAY
P0,A
P1.1
DELAY

; RS = 1
;E=0
;E=1

;E=0

;-------------------------------------------;
PROSEDUR DELAY LCD
;-------------------------------------------DELAY.INIT.LCD:
MOV
R6,#20H
DLY.LCD.LP:
MOV
R7,#10H
DJNZ
R7,$
DJNZ
R6,DLY.LCD.LP
RET
INIT_LCD:
MOV
ACALL
ACALL

A,#FUNCSET
CONTROLOUT
DELAY.INIT.LCD

MOV
ACALL
ACALL

A,#DISPON
CONTROLOUT
DELAY.INIT.LCD

Teknik Akuisisi Data

58

MOV
ACALL
ACALL

A,#DISPCLR
CONTROLOUT
DELAY.INIT.LCD

MOV
ACALL
ACALL
RET

A,#ENTRMOD
CONTROLOUT
DELAY.INIT.LCD

;---------------------------------------------------------; PROCEDURE LCD BARIS KOLOM LCD


;---------------------------------------------------------POSISI2.1:
MOV
A,#1
POSISI2:
ADD
A,#11000000B
DEC
A
ACALL CONTROLOUT
ACALL DELAY.INIT.LCD
RET
POSISI1.1:
MOV
POSISI1:
ADD
DEC
ACALL
ACALL
RET

; BARIS KEDUA

A,#1
A,#10000000B
A
CONTROLOUT
DELAY.INIT.LCD

; BARIS PERTAMA

PRINTSTRING2:
ACALL POSISI2.1
CLR
A
MOVC
A,@A+DPTR
JNZ
PRINTSTRINGLOOP
PRINTSTRINGLOOP:
ACALL DATAOUT
ACALL DELAY.INIT.LCD
INC
DPTR
CLR
A
MOVC
A,@A+DPTR
JNZ
PRINTSTRINGLOOP
RET
PRINTSTRING1:
ACALL
CLR
MOVC
JNZ
Teknik Akuisisi Data

POSISI1.1
A
A,@A+DPTR
PRINTSTRINGLOOP2

59

PRINTSTRINGLOOP2:
LCALL DATAOUT
ACALL DELAY.INIT.LCD
INC
DPTR
CLR
A
MOVC
A,@A+DPTR
JNZ
PRINTSTRINGLOOP2
RET
;----------------------------------------;
PROCEDURE DELAY
;----------------------------------------DELAY:
MOV
R5,#0
U1:
MOV
R6,#0
U2:
MOV
R7,#0
U3:
INC
R7
CJNE
R7,#5,U3
INC
R6
CJNE
R6,#5,U2
INC
R5
CJNE
R5,#5,U1
RET
TUNDA:
UU1:
UU2:
UU3:

MOV
MOV
MOV
INC
CJNE
INC
CJNE
INC
CJNE
RET

R5,#0
R6,#0
R7,#0
R7
R7,#50,UU3
R6
R6,#50,UU2
R5
R5,#50,UU1

BARIS1:
DB 'ADC0804 8 KANAL ',0
BARIS2:
DB ' MCS51 - 89S51 ',0
HASIL:
DB 'ADC:

Teknik Akuisisi Data

',0

60