Upload
cakmad69
View
247
Download
0
Embed Size (px)
Citation preview
8/9/2019 BAB05 - ADC0804
1/34
Teknik Akuisisi Data 27
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 teganganinput 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 05 volt dengan catu daya tunggal
Tidak memerlukanzero adjust
Resolusi 8 bit
Error total +/-1 LSB
Waktu konversi 100 us
Aplikasi umum :
8/9/2019 BAB05 - ADC0804
2/34
Teknik Akuisisi Data 28
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 addressnya.
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
8/9/2019 BAB05 - ADC0804
3/34
Teknik Akuisisi Data 29
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 absolutmaksimum 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
8/9/2019 BAB05 - ADC0804
4/34
Teknik Akuisisi Data 30
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.
8/9/2019 BAB05 - ADC0804
5/34
Teknik Akuisisi Data 31
gambar 3.3. Diagram blok ADC0804
3.3. Timing Diagram
Timing diagramberikut adalah cara kerja ADC0804 seperti di atas
8/9/2019 BAB05 - ADC0804
6/34
Teknik Akuisisi Data 32
gambar 3.4. Timing diagramADC0804
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
8/9/2019 BAB05 - ADC0804
7/34
8/9/2019 BAB05 - ADC0804
8/34
Teknik Akuisisi Data 34
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 P1dan zener Z24V7 membentuk rangkaian pembagi
tegangan untuk memberikan tegangan Vref yang dibutuhkan oleh
ADC0804. R4dipilih 220 dan P1dipilih 10K . Dengan Vcc 5V harga P1
bisa diatur untuk menghasilkan Vref sebesar 2,55 V.
3.4.3. Pengujian rangkaian menggunakan PPI 8255
8/9/2019 BAB05 - ADC0804
9/34
Teknik Akuisisi Data 35
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 : output
Port B : input
Port C lower : output
Port C upper : 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;
8/9/2019 BAB05 - ADC0804
10/34
Teknik Akuisisi Data 36
Tunggu sinyal INTR sampai LOW, kemudian data diambil dan RD
= 1repeat
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 PB6 PB5 PB4 PB3 PB2 PB1 PB0 }{ C B A WR 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);
8/9/2019 BAB05 - ADC0804
11/34
Teknik Akuisisi Data 37
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;
beginclrscr;
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 thenbegin
delay(10);i:=0; clearviewport;
bingkai;end;
until keypressed;closegraph;
end.
3.5. ADC0804 yang diinterfacedkan dengan LPT1
8/9/2019 BAB05 - ADC0804
12/34
Teknik Akuisisi Data 38
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
8/9/2019 BAB05 - ADC0804
13/34
Teknik Akuisisi Data 39
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. 1D8D 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 -A/B 4Y 3Y 2Y 1Y
1 X x x x x
0 0 4A 3A 2A 1A0 1 4B 3B 2B 1B
IC bekerja jika G = 0 atau di grounded. JikaA/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
8/9/2019 BAB05 - ADC0804
14/34
Teknik Akuisisi Data 40
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
37A.2
4
-37A.1
2
-37A.0
1
Data
Biner
1 0 1 1 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
37A.2
4
-37A.1
2
-37A.0
1
Data
Biner
1 0 1 0 10
portout($37A,10);
Kunci pintu masuk dari IC74LS573 dengan memberi output 0
pada pin C (ingat37A.H bersifat inverter)
portout($37A,11);
Jika ingin menjalankan ADC0804, maka perhatikan timing diagramdari 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
8/9/2019 BAB05 - ADC0804
15/34
Teknik Akuisisi Data 41
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 clockyang digunakan adalah sebuah R2 10
K kapasitor 150 pF, mempunyai frekuensi
RCfosc
2
1
KHzfosc 667
8/9/2019 BAB05 - ADC0804
16/34
Teknik Akuisisi Data 42
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.
8/9/2019 BAB05 - ADC0804
17/34
8/9/2019 BAB05 - ADC0804
18/34
Teknik Akuisisi Data 44
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 roundharus dilakukan
karena data yang dikeluarkan harus dalam word. Variabel yang digunakan
adalah dataDAC.
Sinyal kontrol untuk mengaktifkan buffer DAC
-37A.3 37A.2 -37A.1 -37A.0 Biner KETERANGAN
x Kontrol Multiplekser Buffer DAC
8/9/2019 BAB05 - ADC0804
19/34
Teknik Akuisisi Data 45
1 0 1 1 11Data tidak bisamasuk buffer DAC
1 0 1 0 10Data disiapkan danmasuk buffer DAC
1 0 1 1 11Data dikunci di dalambuffer 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 ADCprocedure 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);
repeatintr := portin($379);
intr := intr and 8;until intr = 8;
portout($37A,15);portout($378,$10 or chan); { ALE = START = 0,ENABLE = 1 }delay(1);portout($37A,11);{ 4 bit bawah }dataL := portin($379);
8/9/2019 BAB05 - ADC0804
20/34
Teknik Akuisisi Data 46
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 37A.2 -37A.1 -37A.0 Biner KETERANGAN
x Kontrol Multiplekser Buffer DAC
1 0 1 1 11Data tidak bisa masukbuffer ADC
1 1 1 1 15Data disiapkan danmasuk buffer ADC
1 0 1 1 11 Data dikunci di dalambuffer 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
8/9/2019 BAB05 - ADC0804
21/34
Teknik Akuisisi Data 47
-37A.3 37A.2 -37A.1 -37A.0 Biner KETERANGAN
x Kontrol Multiplekser Buffer DAC
1 0 1 1 11
Untuk mengambil
data ADC 4 bitbawah
1 0 0 1 9Untuk mengambildata ADC 4 bitatas
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 378.6 378.5 378.4 378.3 378.2 378.1 378.0 Data KET
X X START EN ALE C B A
STARTCONVERSION
0 0 0 0 0 0 0 0 00H
0 0 0 0 1 0 0 0 08H
0 0 1 0 1 0 0 0 28H
0 0 1 0 0 0 0 0 20H
0 0 0 0 0 0 0 0 00
TUNGGU EOC = 1
0 0 0 1 0 0 0 0 10H AMBIL DATA
0 0 0 0 0 0 0 0 00H
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); {Buffer ADC dibuka}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); {Buffer ADC ditutup}
program di atas digunakan untuk memulai konversi. 'or chan digunakan untuk
memilih kanal input yang akan dikonversi.
8/9/2019 BAB05 - ADC0804
22/34
Teknik Akuisisi Data 48
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
repeatintr := 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
74LS157A/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 (D3D0, masuk ke -379.7379.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
8/9/2019 BAB05 - ADC0804
23/34
Teknik Akuisisi Data 49
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 := dataL and 8;d3 := not d3;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 D7D4 masuk ke -379.7379.4
dataH := dataH and $0f0;
bit d4 di AND kan dengan 16d4 := 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 := dataH and 128;d7 := not d7;d7 := d7 and 128;
8/9/2019 BAB05 - ADC0804
24/34
Teknik Akuisisi Data 50
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 dobegin
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 dobegin
BacaADC(1);volt2[i]:=volt;Pen.Width:=1;Pen.Color:=clYellow;LineTo(i,75-round(volt2[i]*15));
end;end;
8/9/2019 BAB05 - ADC0804
25/34
8/9/2019 BAB05 - ADC0804
26/34
Teknik Akuisisi Data 52
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;beginwith PaintBox6.Canvas dobegin
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;beginwith PaintBox7.Canvas dobegin
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 dobegin
8/9/2019 BAB05 - ADC0804
27/34
Teknik Akuisisi Data 53
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);beginif cmdADC.Caption = 'Stop' thencmdADC.Caption := 'Proses'
elseif cmdADC.Caption = 'Proses' thencmdADC.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 thenbegini:=0;kotak1;kotak2;kotak3;kotak4;kotak5;kotak6;kotak7;kotak8;
end;until cmdADC.Caption = 'Stop';
8/9/2019 BAB05 - ADC0804
28/34
Teknik Akuisisi Data 54
end;end.
3.6. ADC0804 yang diinterfacedkan dengan COM1
gambar 3.11. ADC0804 dengan mikrokontroler
gambar 3.12. Mikrokontroler 89S51
8/9/2019 BAB05 - ADC0804
29/34
Teknik Akuisisi Data 55
gambar 3.13. Buffer serial RS232
Listing program bahasa assembly
ORG 00HSJMP START
;-------------------------------------; LCD CONSTANTA;-------------------------------------DISPCLR EQU 00000001BFUNCSET EQU 00111000BENTRMOD EQU 00000110BDISPON EQU 00001100BDATA_ADC EQU 60HSAT EQU 61HPUL EQU 62HRAT EQU 63H
START:ACALL INIT_LCDACALL INIT_SERIAL
MOV DPTR,#BARIS1ACALL PRINTSTRING1
MOV DPTR,#BARIS2ACALL PRINTSTRING2ACALL TUNDAMOV DPTR,#HASIL
ACALL PRINTSTRING1
MAIN:ACALL READ_ADCACALL OLAH_DATA
8/9/2019 BAB05 - ADC0804
30/34
Teknik Akuisisi Data 56
ACALL TXACALL TUNDASJMP MAIN
CH0:CLR P3.3CLR P3.4CLR P3.5RET
READ_ADC:ACALL CH0SETB P1.2SETB P1.3
ACALL DELAYCLR P1.2
ACALL DELAYSETB P1.2
ACALL DELAYJB P3.2,$CLR P1.3MOV A,P2MOV DATA_ADC,ASETB P1.3RET
OLAH_DATA:MOV A,DATA_ADC
MOV B,#10DIV ABMOV SAT,BMOV B,#10DIV ABMOV PUL,BMOV RAT,A
MOV A,#85HACALL CONTROLOUTMOV A,RAT
ADD A,#30H
ACALL DATAOUT
MOV A,#86HACALL CONTROLOUTMOV A,PUL
ADD A,#30HACALL DATAOUT
MOV A,#87HACALL CONTROLOUT
8/9/2019 BAB05 - ADC0804
31/34
8/9/2019 BAB05 - ADC0804
32/34
Teknik Akuisisi Data 58
CLR P1.0 ; RS = 0ACALL DELAYCLR P1.1
ACALL DELAY
SETB P1.1ACALL DELAY
MOV P0,ACLR P1.1
ACALL DELAYRET
;--------------------------------------------------------; PROSEDUR PENEMPATAN DATA;--------------------------------------------------------; RS : 0 : P1.0
; E : 0 - 1 - 0 : P1.1
DATAOUT:SETB P1.0 ; RS = 1
ACALL DELAYCLR P1.1 ; E = 0
ACALL DELAYSETB P1.1 ; E = 1
ACALL DELAY
MOV P0,ACLR P1.1 ; E = 0
ACALL DELAYRET
;--------------------------------------------; PROSEDUR DELAY LCD;--------------------------------------------DELAY.INIT.LCD:
MOV R6,#20HDLY.LCD.LP:
MOV R7,#10HDJNZ R7,$DJNZ R6,DLY.LCD.LP
RET
INIT_LCD:MOV A,#FUNCSET
ACALL CONTROLOUTACALL DELAY.INIT.LCD
MOV A,#DISPONACALL CONTROLOUTACALL DELAY.INIT.LCD
8/9/2019 BAB05 - ADC0804
33/34
Teknik Akuisisi Data 59
MOV A,#DISPCLRACALL CONTROLOUTACALL DELAY.INIT.LCD
MOV A,#ENTRMODACALL CONTROLOUTACALL DELAY.INIT.LCDRET
;----------------------------------------------------------; PROCEDURE LCD BARIS KOLOM LCD;----------------------------------------------------------POSISI2.1:
MOV A,#1POSISI2:
ADD A,#11000000B ; BARIS KEDUADEC A
ACALL CONTROLOUTACALL DELAY.INIT.LCDRET
POSISI1.1:MOV A,#1
POSISI1:ADD A,#10000000B ; BARIS PERTAMADEC A
ACALL CONTROLOUT
ACALL DELAY.INIT.LCDRET
PRINTSTRING2:ACALL POSISI2.1CLR AMOVC A,@A+DPTRJNZ PRINTSTRINGLOOP
PRINTSTRINGLOOP:ACALL DATAOUTACALL DELAY.INIT.LCDINC DPTR
CLR AMOVC A,@A+DPTRJNZ PRINTSTRINGLOOPRET
PRINTSTRING1:ACALL POSISI1.1CLR AMOVC A,@A+DPTRJNZ PRINTSTRINGLOOP2
8/9/2019 BAB05 - ADC0804
34/34