Anda di halaman 1dari 33

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 ADC dengan 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.

Teknik Akuisisi Data

21

2.2. ADC0808/0809
Spesifikasi :

Mudah di-interface-kan dengan semua mikroprosesor

Tidak memerlukan adjust untuk full scale atau zero

Multiplekser 8 kanal dengan selektor logika

Range input 0 5 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 :

Teknik Akuisisi Data

22

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 konfigurasi Address Line untuk menentukan kanalnya.

Tabel 2.1. Pemilihan Kanal Input


KANAL
0
1
2
3
4
5
6
7
Teknik Akuisisi Data

C
0
0
0
0
1
1
1
1

B
0
0
1
1
0
0
1
1

A
0
1
0
1
0
1
0
1
23

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 edge sinyal 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
range yang 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 1
LSB 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 dibuat LOW dan 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 ke LOW lagi (lihat gambar 2.2).
Teknik Akuisisi Data

24

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

Teknik Akuisisi Data

25

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 :

Teknik Akuisisi Data

26

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 :

Teknik Akuisisi Data

27

Ditentukan (dengan prediksi pasar) harga kapasitor sebesar 680pF.


Untuk mendapatkan harga resistor didapat dengan rumus :

0.35
.2.1
R. C

0.35
3

12

50010
. 68010
.
R 1029,41

..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 LM336 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

Teknik Akuisisi Data

28

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 1k berfungsi untuk memberikan arus
bias diode sebesar 7 mA agar diode dapat bekerja dan diode zener dengan I ZM
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 :


Teknik Akuisisi Data

29

Diode Zener akan bekerja bila IZM memiliki rating 5mA - 10mA sehingga
R dapat ditentukan sebagai berikut :

Vcc Vz
Iz
12 4.7
R
7mA
R 1k
R

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 [B0B2]. 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
Port B
Port C lower
Teknik Akuisisi Data

: input
: output
: output
30

Port C upper

: output

diperoleh control word : 90H, sehingga software-nya


port [$303 ] := $90;
kemudian pilih kanal yang aktif dengan mengirim PB0 - PB2,
sedangkan PB3 - PB7 = 0.
channel
port[$301]

: = 0; { 0 s.d 7 }
: = 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.

Teknik Akuisisi Data

31

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);
Teknik Akuisisi Data

32

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);
}
Teknik Akuisisi Data

33

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 25o keluaran dari op amp U2 harus 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 }

Teknik Akuisisi Data

34

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;
Teknik Akuisisi Data

35

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

Teknik Akuisisi Data

36

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:
Teknik Akuisisi Data

37

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 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 :
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
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
Teknik Akuisisi Data

38

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
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 ADC0808/0809, maka perhatikan timing diagram dari


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 !

Teknik Akuisisi Data

39

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
oscillator 1 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.

Teknik Akuisisi Data

40

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 :
R4

5.1V
2.5K
20mA

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.

Teknik Akuisisi Data

41

gambar 2.9. 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

42

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 round harus dilakukan
karena data yang dikeluarkan harus dalam word. Variabel yang digunakan
adalah dataDAC.

Teknik Akuisisi Data

43

Sinyal kontrol untuk mengaktifkan buffer DAC


-37A.3
x

37A.2
Kontrol

-37A.1
Multiplekser

-37A.0
Buffer DAC

Biner

11

10

11

KETERANGAN
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);
Teknik Akuisisi Data

{ ALE = START = 0,ENABLE = 1 }

44

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
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.
Teknik Akuisisi Data

45

Sinyal kontrol untuk mengambil 4 bit data ADC bawah dan 4 data ADC atas
-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);
Teknik Akuisisi Data

{Buffer ADC dibuka}


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

}
}
}
}

46

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
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


Teknik Akuisisi Data

47

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
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

Teknik Akuisisi Data

48

d7
d7
d7

:= dataH and 128;


:= not 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 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;
Teknik Akuisisi Data

49

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;
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
Teknik Akuisisi Data

50

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 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;
Teknik Akuisisi Data

51

begin
with PaintBox8.Canvas do
begin
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;
Teknik Akuisisi Data

52

kotak5;kotak6;kotak7;kotak8;
end;
until cmdADC.Caption = 'Stop';
end;
end.

Teknik Akuisisi Data

53