bab04 - adc0809
TRANSCRIPT
-
8/9/2019 BAB04 - ADC0809
1/33
Teknik Akuisisi Data 21
2.Analog To Digital Converter ADC0808/0809
2.1. Pendahuluan
Sistem mikroprosesor hanya dapat mengolah data dalam bentuk digital.
Oleh karena itu segala sesuatu yang akan diolah oleh mikroprosesor harus diubah
dulu ke dalam bentuk digital.
Fungsi dasar dari pengubah analog ke digital adalah mengubah tegangan
analog ke dalam bentuk biner, sehingga dapat diolah oleh komputer. Tegangan
analog yang merupakan masukan ADC dapat berasal dari transduser atau sumber
tegangan lain, transduser inilah yang mengubah besaran kontinyu seperti suhu,
tekanan, kecepatan atau putaran menjadi tegangan listrik. Tegangan listrik ini
disebut tegangan analog dan tegangan analog inilah yang diubah oleh ADC menjadi
bentuk digital yang sebanding dengan besaran analog. Kode biner hasil konversi ini
diolah oleh komputer lewat data busnya.
Ada dua metode yang digunakan untuk membangun suatu ADC yaitu :
open loop
flash ADCdengan kecepatan tinggi, Time Window ADC, Slope
Converter dengan kecepatan sedang, dan dual slope converter
dengan kecepatan lambat tetapi mempunyai kestabilan yang
tinggi.
closed loop.
dalam metode closed loop (dengan feedback) ada tipe-tipe
single counter ADC.
-
8/9/2019 BAB04 - ADC0809
2/33
Teknik Akuisisi Data 22
2.2. ADC0808/0809
Spesifikasi :
Mudah di-interface-kan dengan semua mikroprosesor
Tidak memerlukan adjustuntukfull scaleatauzero
Multiplekser 8 kanal dengan selektor logika
Range input 05 volt dengan supply 5 volt
Outputnya mempunyai level TTL
ADC0808 ekivalen dengan MM74C949 dan ADC0809 ekivalen
dengan MM74C949-1
Resolusi 8 bit
Error : +/- LSB dan +/- 1 LSB
Single supply 5 VDC
Konsumsi daya 15 mW
Waktu konversi 100 us
Gambar ADC 0808/0809:
-
8/9/2019 BAB04 - ADC0809
3/33
Teknik Akuisisi Data 23
gambar 2.1. ADC 0808/0809
Keterangan kaki-kaki IC:
1. IN0 - IN7 : Input analog dengan multipleks
2. ADD0-ADD2 :input address untuk multipleks
3. D0 - D7 :data hasil pembacaan/ konversi ADC
4. START,ALE : input untuk memulai start konversi dari ADC
5. EOC :End of Conversion, sinyal yang memberi tanda
bahwa ADC telah selesai mengkonversi dan data
sudah valid.6. OUTPUT EN : untuk mengambil data valid dari ADC.
2.2.1.Cara kerja ADC 0808/0809
ADC ini merupakan konverter sinyal analog ke sinyal digital CMOS yang
menggunakan successive approximation sebagai teknik konversinya. ADC
0808/0809 juga merupakan ADC 8-bit dengan 8-kanal multiplekser, hanya
memerlukan daya 15mW dengan waktu konversi 100s. ADC 0808/0809
memiliki 8-channel single ended analog signal multiplexer. Inputnya dapat
dipilih dengan konfigurasiAddress Lineuntuk menentukan kanalnya.
Tabel 2.1. Pemilihan Kanal Input
KANAL C B A
0 0 0 01 0 0 1
2 0 1 03 0 1 14 1 0 05 1 0 16 1 1 0
7 1 1 1
-
8/9/2019 BAB04 - ADC0809
4/33
Teknik Akuisisi Data 24
Konverter analog ke digital ini memiliki 3 bagian penting yakni 256R
ladder network , SAR (Successive Approximation Register)dan komparator.
A/D konverter SAR akan reset pada saat positive edge dari sinyal Start
Conversion (SC). Konversi dimulai pada falling edgesinyal Start Conversion
(SC). Selama proses konversi akan diinterupsi oleh sinyal Start Conversion
yang baru, jika ingin mengakhiri konversi maka sinyal End Of Conversion
(EOC)segera dikirimkan.
Komparator dalam A/D konverter akan menentukan akurasi selama
proses konversi.
Keuntungan utama dari ADC0808/0809 adalah tegangan input memiliki
rangeyang sama dengan range power supply sehingga output dari transduser
dapat dihubungkan secara langsung ke kanal input ADC 0808. Tegangan
referensi berhubungan dengan tegangan skala penuh, jika VCC= VREF= 5.10 V
maka range pada skala penuh dibagi dengan 255 step. Step terkecil adalah 1LSB dimana harganya sekitar 20mV, tegangan referensi ini yang menentukan
akurasinya. ADC 0808/0809 menghendaki external clock, clock yang
disediakan berkisar antara 10kHz hingga 1280kHz.
Proses konversinya diawali dengan memberikan sinyal ALE (aktif
HIGH), sesaat kemudian disusul dengan memberikan sinyal START HIGH.
Sinyal ALE dibuatLOWdan diikuti dengan memberi sinyal START LOW. EOC
merupakan output dari SAR yang berupa akumulasi 8-bit kode biner.
Rising edge EOC menandakan bahwa data sudah siap untuk dibaca. Untuk
mengambil data yang sudah valid, maka kita berisi sinyal OUTPUT ENABLE
dengan HIGH. Setelah data sudah kita ambil, OUTPUT ENABLE kita
kembalikan keLOW lagi (lihat gambar 2.2).
-
8/9/2019 BAB04 - ADC0809
5/33
Teknik Akuisisi Data 25
2.2.2. Timing diagram ADC0808/0809
Timing diagram berikut menjelaskan cara kerja ADC di atas :
gambar 2.2. Timing Diagram ADC 0808/0809
Untuk menjalankan ADC ini maka pemrograman harus mengikuti timing
diagram di atas. Adapun urut-urutannya adalah sebagai berikut :
OUTPUT ENABLE = 0
ALE = 0, START = 0
ALE = 1
START = 1
-
8/9/2019 BAB04 - ADC0809
6/33
Teknik Akuisisi Data 26
ALE =0
START = 0
EOC (End Of Conversion) akan LOW. Artinya konversi sedang
dimulai. Konversi selesai setelah EOC = 1. Jadi EOC digunakan
sebagai input bagi rangkaian interface untuk mengetahui apakah
konversi sudah selesai atau belum.
Jika EOC sudah HIGH, data hasil konversi akan dikeluarkan jika kita
mengeluarkan OUTPUT ENABLE = 1 dan segera data diambil.
Jika data sudah diambil, kembalikan OUTPUT ENABLE menjadi
=0.
2.3. ADC0808 yang diinterfacedkan dengan PPI 8255
Gambar skema ADC dengan timing dari PPI :
-
8/9/2019 BAB04 - ADC0809
7/33
Teknik Akuisisi Data 27
gambar 2.3. Skema ADC 0808/0809 dengan hubungan card PPI
2.3.1. Rangkaian pendukung dan pemilihan komponen.
Rangkaian pendukung ADC 0808/0809 terdiri atas berbagai macam bagian
yakni :
Rangkaian Clock Generator
ADC memerlukan clock generator untuk menentukan kecepatan waktu
konversi dan proses pengiriman data untuk dibaca. Kemampuan clock
yang dapat dibangun untuk ADC 0808/0809 adalah antara 10kHz sampai
1280kHz, ditentukan frekuensi clock yang dihasilkan 500kHz. Rangkaian
ini dibangun oleh 3 buah NOT gate (Schmitt Trigger) jenis TTL
(74LS14) 2 buah resistor dan 1 buah kapasitor. Perhitungan komponen
untuk mendapatkan frekuensi 500kHz adalah sebagai berikut :
-
8/9/2019 BAB04 - ADC0809
8/33
Teknik Akuisisi Data 28
Ditentukan (dengan prediksi pasar) harga kapasitor sebesar 680pF.
Untuk mendapatkan harga resistor didapat dengan rumus :
fR C
0 35.
..2.1
R
R
0 35
50010 68010
1029 41
3 12
.
. .
,
..2.2
dipilih yang ada di pasaran 1k .
Rangkaian Referensi ADC 0808
Rangkaian ini dibangun untuk mendapatkan regangan referensi 5.10 volt,
ini berarti tegangan masukan sinyal analog memiliki range 0 - 5.10 volt.
Rangkaian tersusun atas LM 336-5 (voltage regulator) untuk
mendapatkan level tegangan yang stabil 5.10 volt, sedangkan adjust LM-
336 dan variabel resistor 10k untuk mendapatkan besarnya arus yang
masuk ke rangkaian buffer. Op-amp dengan penguatan satu merupakan
rangkaian voltage follower agar tidak terjadi drop tegangan pada ADC
karena dibangunnya tegangan referensi. Dipilihnya IC op-amp cukup dari
jenis LM741 karena impedansi input yang cukup tinggi dan hanya
digunakan sebagai buffer tegangan dc, tidak sebagai penguat atau buffer
dari sinyal non-dc.
Rangkaian Proteksi Input
-
8/9/2019 BAB04 - ADC0809
9/33
Teknik Akuisisi Data 29
gambar 2.4. Rangkaian proteksi
Rangkaian proteksi jumlahnya disesuaikan dengan kebutuhan anda. Jika anda
menggunakan 2 kanal input, maka anda hanya membuat 2 proteksi saja.
Rangkaian ini maksimum dibuat 8 buah karena kanal input ADC ada 8 buah.
Catatan :
Channel yang tidak dipakai lebih baik digrounded saja untuk
menghindari noise.
Rangkaian ini berfungsi untuk membatasi input yang masuk (level
tegangannya) hingga maksimum tegangan yang dapat masuk ke ADC adalah
5.3 - 5.4 volt. Rangkaian proteksi bekerja pada titik pertemuan diode IN4148
dimana harga berbagai input positif akan bernilai 5.3 - 5.4 volt merupakan
penjumlahan tegangan pada diode sebesar 0.6 - 0.7 volt dan diode zener yang
terpasang sebesar 4.7 volt. Tahanan R1 1kberfungsi untuk memberikan arus
biasdiode sebesar 7 mA agar diode dapat bekerja dan diode zener dengan IZM
5mA - 10mA agar rangkaian dapat bekerja dengan baik. Tahanan R2 sebesar
100 untuk mengamankan output dari tahap sebelumnya bila tegangannya
melebihi batas.
Ilustrasi perhitungan pemilihan resistansi R :
-
8/9/2019 BAB04 - ADC0809
10/33
Teknik Akuisisi Data 30
Diode Zener akan bekerja bila IZMmemiliki rating 5mA - 10mA sehingga
R dapat ditentukan sebagai berikut :
kR
mAR
Iz
VzVccR
1
7
7.412
Harga maksimum R yang diijinkan agar diode zener dapat bekerja adalah
1k , sedangkan harga minimumnya adalah 730 . Jadi hendaknya
dipilih harga R berkisar antara 730 - 1.5k. Dalam perancangan ini
dipilih harga 1k.
2.3.2. Pengujian rangkaian menggunakan PPI 8255
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 A
PPI 8255 (PA[0...7]) sedangkan untuk selektor kanal digunakan port B [B0-
B2]. Sinyal kontrol ADC dihubungkan dengan Port C. ADC diaktifkan terus
menerus (siap untuk konversi, Enable = high).
Sinyal ALE dihubungkan dengan PC0 dan START dengan PC1.
EOC dihubungkan dengan PC4, sinyal EN (Enable) dihubungkan
dengan PB3. Sebelum mengaktifkan ADC, PPI harus diberi control
word sbb:
Port A : input
Port B : output
Port C lower : output
-
8/9/2019 BAB04 - ADC0809
11/33
Teknik Akuisisi Data 31
Port C upper : output
diperoleh control word: 90H, sehingga software-nyaport [$303 ] := $90;
kemudian pilih kanal yang aktif dengan mengirim PB0 - PB2,
sedangkan PB3 - PB7 = 0.
channel : = 0; { 0 s.d 7 }
port[$301] : = channel;
dan semua sinyal kontrol di-LOW-kan
ADC diaktifkan dahulu dengan mengaktifkan ALE maka PC0 = 1
kemudian sinyal START, PC1 = 1, ALE PC0 = 0 baru START
PC1 = 0, maka ADC sudah start konversi.
port[$302] : = 0;
port[$302] : = 1;
port[$302] : = 3;port[$302] : = 2;
port[$302] : = 0; { ADC start konversi }
Selanjutnya tunggu ADC sampai selesai konversi, yaitu dengan
mengecek apakah EOC = 0 ?
repeat
cek := port[$302];
cek := cek and $10;
until cek $10; { konversi sudah selesai }
Jika EOC = 1, maka data sudah selesai dikonversi dan siap untuk
dibaca oleh komputer untuk ditampilkan datanya pada layar
monitor.
-
8/9/2019 BAB04 - ADC0809
12/33
Teknik Akuisisi Data 32
Untuk membaca data hasil konversi, maka PB3 = 1,
port [$301] : = 8 or channel;
Ambil data dari ADC melalui port A dan kalibrasi dengan 1 LSB =
20 mV:
hasil : = port[$300];
hasil : = hasil * (20 / 1000);
2.3.3 Program untuk ADC 0808/0809
Program aplikasi dengan TURBO PASCAL:
{ program ADC0808/0809 dengan TURBO PASCAL }
{ oleh : Rachmad Setiawan, ST,MT }
{ staff pengajar di Elektronika-Elektro -ITS Surabaya }
uses crt,dos;
var
channel,cek,data : integer;
hasil : real;begin
port[$303] := $90;
repeat
channel := 0; { channel 0 }
port[$301]:= channel;
port[$302]:= 0;
port[$302]:=1;
port[$302]:=3;
port[$302]:=2;
port[$302]:=0;repeat
cek := port[$302];
cek := cek and $10;
until cek $10;
port[$301]:=8 or channel;
data := port[$300];
hasil := data *(20/1000);
-
8/9/2019 BAB04 - ADC0809
13/33
Teknik Akuisisi Data 33
gotoxy(10,10);write(voltage :,hasil:4:2);
until keypressed;
end.
Program Aplikasi dengan TURBO C++:
// program ADC0808/0809 dengan TURBO C++
// oleh : Rachmad Setiawan, ST,MT
// staff pengajar di Elektronika-Elektro -ITS Surabaya
#include stdio.h
#include dos.h
#include conio.h
main()
{
int channel,cek,data;
float hasil;
outportb(0x303, 0x90);
do
{
channel = 0; // channel 0
outportb(0x301,channel);
outportb(0x302,0);
outportb(0x302,1);
outportb(0x302,3);
outportb(0x302,2);
outportb(0x302,0);
do
{
cek = inportb(0x302);
cek = cek & 0x10;}
while (cek = 0x10);
outportb(0x301,8 | channel);
data = inportb(0x300);
hasil = data *(20/1000);
gotoxy(10,10);printf(voltage : %4.2f,hasil);
}
-
8/9/2019 BAB04 - ADC0809
14/33
Teknik Akuisisi Data 34
while (!kbhit());
}
2.3.4. Contoh aplikasi pengukuran temperatur dengan ADC0808/0809
Untuk mengukur suhu, kita gunakan sensor LM335 dengan karakteristik pada
saat T = 25o, tegangan keluaran dari sensor 2,98 volt. Tegangan keluaran akan
naik dengan perbandingan 1oC = 10 mV.
gambar 2.5 Rangkaian sensor suhu
Keluaran dari rangkaian sensor suhu di atas dimasukkan ke kanal 0
dari gambar 10.3 sedang kanal 1 sampai kanal 7 di-grounded.
Sensor di-offset dengan cara mengatur potensiometer P1 yaitu pada
suhu 25okeluaran dari op amp U2harus 2,98 volt.
Untuk aplikasi dengan ketelitian tertentu, rangkaian sensor suhu bisa
ditambah dengan rangkaian instrumentasi dengan penguatan yang sesuai.
Program aplikasi dengan TURBO PASCAL:
{ program ADC0808/0809 untuk sensor temperatur }
{ dengan TURBO PASCAL }
{ oleh : Rachmad Setiawan, ST,MT }
{ staff pengajar di Elektronika-Elektro -ITS Surabaya }
-
8/9/2019 BAB04 - ADC0809
15/33
Teknik Akuisisi Data 35
uses crt,dos;
var
channel,cek,data : integer;
hasil,suhu : real;begin
port[$303] := $90;
repeat
channel := 0; { channel 0 }
port[$301]:= channel;
port[$302]:= 0;
port[$302]:= 1;
port[$302]:= 3;
port[$302]:= 2;port[$302]:= 0;
repeat
cek := port[$302];
cek := cek and $10;
until cek $10;
port[$301]:=8 or channel;
data := port[$300];
hasil := data *(20/1000);
suhu:= (hasil - 2.98) * 100 + 25;
gotoxy(10,10);write(voltage :,hasil :4:2);
gotoxy(10,12);write(temperature:,suhu 4:2);
until keypressed;
end.
Program Aplikasi dengan TURBO C++:
// program ADC0808/0809 untuk sensor temperature
// dengan TURBO C++
// oleh : Rachmad Setiawan, ST,MT// staff pengajar di Elektronika-Elektro -ITS Surabaya
#include stdio.h
#include dos.h#include conio.h
main()
{
int channel,cek,data;
-
8/9/2019 BAB04 - ADC0809
16/33
Teknik Akuisisi Data 36
float hasil,suhu;
outportb(0x303,0x90 );
do
{channel = 0; // channel
outportb(0x301,channel);
outportb(0x302,0);
outportb(0x302,1);
outportb(0x302,3);
outportb(0x302,2);
outportb(0x302,0);
do
{ cek = inportb(0x302);cek = cek & 0x10;
}
while (cek = 0x10);
outportb(0x301,8 | channel);
data =inportb(0x300);
hasil = data *(20/1000);
suhu = (hasil - 2.98) *100 + 25;
gotoxy(10,10);printf(voltage : %4.2f,hasil);
gotoxy(10,12);printf(suhu: %4.2f, suhu);
}
while (!kbhit());
}
2.4. ADC0808 diinterfacedkan dengan LPT1
2.4.1. Skema rangkaian
-
8/9/2019 BAB04 - ADC0809
17/33
Teknik Akuisisi Data 37
gambar 2.6. Buffer LPT ke ADC0808/0809
Keterangan :
Dari bab 9 tentang LPT, diketahui bahwa pada mode SPP :
Port 378H: D7 D6 D5 D4 D3 D2 D1 D0 semuanya berfungis
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:
-
8/9/2019 BAB04 - ADC0809
18/33
Teknik Akuisisi Data 38
DAC membutuhkan 8 bit output dari rangkaian interfacing
ADC membutuhkan 8 bit input, 3 output sinyal kontrol ALE,
START, ENABLE dan 1 sinyal input untuk EOC
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 danjika 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 ICmultiplekser yang digunakan untuk data masuk. Kerja dari IC74LS157 adalah
sebagai berikut :
G -A/B 4Y 3Y 2Y 1Y
1 X x x x x
0 0 4A 3A 2A 1A
0 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
Dari informasi 2 IC tambahan tadi, maka dibuatlah rangkaian seperti
gambar 10.4. Port 378H yang terdiri dari 8 bit output dijadikan 16 bit output
-
8/9/2019 BAB04 - ADC0809
19/33
Teknik Akuisisi Data 39
dengan bantuan data dari port 37AH yaitu 37A.0 dan 37A.2. Sedangkan 37A.1
digunakan untuk selector 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 ADC0808/0809, maka perhatikan timing diagramdari
ADC seperti dibahas pada bab 2. Urutan programnya adalah
ALE = 0, START = 0, ENABLE = 0
ALE = 1, START = 0, ENABLE = 0, delay sebentar
ALE = 1, START = 1, ENABLE = 0, delay sebentar
ALE = 0, START = 1, ENABLE = 0, delay sebentar
ALE = 0, START = 0, ENABLE = 0, delay sebentar
Tunggu EOC = 1 !
-
8/9/2019 BAB04 - ADC0809
20/33
Teknik Akuisisi Data 40
Jika EOC sudah = 0, ambil data dengan memberi perintah
ALE = 0, START = 0, ENABLE = 1 kemudian ambil datanya.
Setelah data diambil, kembalikan seperti semula
ALE = 0, START = 0, ENABLE = 0
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 2.7. Rangkaian AD0808/0809
Pada gambar 10.5 di atas, frekuensi clock yang digunakan adalah sebuah
oscillator1 MHz, mempunyai 4 pin yaitu +5, GND dan OUT serta 1 pin NC
(No Connection). Tegangan referensi menggunakan dioda zener 6V2 serta
multiturn yang diatur untuk mendapatkan tegangan 5.1 V.
-
8/9/2019 BAB04 - ADC0809
21/33
Teknik Akuisisi Data 41
gambar 2.8 Rangkaian 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 :
KmA
VR 5.2
20
1.5
4
2.4.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 BAB04 - ADC0809
22/33
Teknik Akuisisi Data 42
gambar 2.9. Tampilan depan dari akuisisi data menggunakan ADC0809
Jika anda memakai program Delphi 7 underWindows 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 :
implementationprocedure PortOut(Port : Word; Data : Byte); stdcall; external 'io.dll';function PortIn(Port:Word):Byte; stdcall; external 'io.dll';
Penulisanproceduredanfunctiontepat di bawah implementation
procedure PortOut(Port : Word; Data : Byte);
-
8/9/2019 BAB04 - ADC0809
23/33
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);
2.4.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.
-
8/9/2019 BAB04 - ADC0809
24/33
Teknik Akuisisi Data 44
Sinyal kontrol untuk mengaktifkan buffer DAC
-37A.3 37A.2 -37A.1 -37A.0 Biner KETERANGAN
x Kontrol Multiplekser Buffer DAC
1 0 1 1 11Data tidak bisa masukbuffer 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 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);
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);
-
8/9/2019 BAB04 - ADC0809
25/33
Teknik Akuisisi Data 45
portout($37A,11);{ 4 bit bawah }dataL := portin($379);
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 11Data dikunci di dalambuffer ADC
37A.0 harus dalam kondisi 1 (bersifat inverter), agar data yang akan
dikeluarkan ke buffer ADC tidak ikut ke DAC.
-
8/9/2019 BAB04 - ADC0809
26/33
Teknik Akuisisi Data 46
Sinyal kontrol untuk mengambil 4 bit data ADC bawah dan 4 data ADC atas
-37A.3 37A.2 -37A.1 -37A.0 Biner KETERANGANx Kontrol Multiplekser Buffer DAC
1 0 1 1 11Untuk mengambildata 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 20H0 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}
-
8/9/2019 BAB04 - ADC0809
27/33
Teknik Akuisisi Data 47
program di atas digunakan untuk memulai konversi. 'or chan digunakan untuk
memilih kanal input yang akan dikonversi.
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
-
8/9/2019 BAB04 - ADC0809
28/33
Teknik Akuisisi Data 48
d0 := dataL and 1;
bit d1 di AND kan dengan 2
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 menggeserdata, karena D7D4 masuk ke -379.7379.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
-
8/9/2019 BAB04 - ADC0809
29/33
Teknik Akuisisi Data 49
d7 := dataH and 128;d7 := not d7;d7 := d7 and 128;
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;
-
8/9/2019 BAB04 - ADC0809
30/33
Teknik Akuisisi Data 50
Pen.Color:=clYellow;LineTo(i,75-round(volt2[i]*15));
end;end;
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;beginwith PaintBox3.Canvas dobegin
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;beginwith PaintBox4.Canvas dobegin
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;beginwith PaintBox5.Canvas dobegin
-
8/9/2019 BAB04 - ADC0809
31/33
Teknik Akuisisi Data 51
BacaADC(4);volt5[i]:=volt;Pen.Width:=1;Pen.Color:=clYellow;LineTo(i,75-round(volt5[i]*15));
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 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;
-
8/9/2019 BAB04 - ADC0809
32/33
Teknik Akuisisi Data 52
beginwith PaintBox8.Canvas dobegin
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;repeatReadADC0;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;
-
8/9/2019 BAB04 - ADC0809
33/33
kotak5;kotak6;kotak7;kotak8;end;
until cmdADC.Caption = 'Stop';end;
end.