bab04 - adc0809

Upload: cakmad69

Post on 01-Jun-2018

218 views

Category:

Documents


0 download

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.