adc

14
Praktikum Teknik Interface dan Peripheral Modul #4: Antarmuka ADC Deskripsi: Mengkonversikan nilai tegangan analog dari luar menjadi bilangan digital serta menampilkan nilai digitalnya ke LED. Sinyal masukan adalah berupa tegangan analog dengan besar tegangan bervariasi (mulai dari 0V s/d 5V, dengan stepping 5V/256 = ~20mV). Nilai sinyal tegangan masukan ini akan ditampilkan konversi nilai digital desimalnya di LED dari 0 sampai 255 Program ini bertujuan melakukan antarmuka sistem analog ke sistem digital menggunakan IC ADC0804 (8-bit uP compatible A/D Converter) dari National Semiconductor 1. Antarmuka mikrokontroler/prosesor sebagai perangkat digital ke chip ADC sebagai jembatan dari analog ke digital 2. Teknik kontrol dan transaksi data antara ukontroler dengan ADC secara paralel

Upload: rahmad0912

Post on 25-Jul-2015

33 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Adc

Praktikum Teknik Interface dan Peripheral

Modul #4: Antarmuka ADC

Deskripsi:

     Mengkonversikan nilai tegangan analog dari luar menjadi bilangan digital

     serta menampilkan nilai digitalnya ke LED. Sinyal masukan adalah berupa

     tegangan analog dengan besar tegangan bervariasi (mulai dari 0V s/d 5V, dengan

     stepping 5V/256 = ~20mV). Nilai sinyal tegangan masukan ini akan ditampilkan

     konversi nilai digital desimalnya di LED dari 0 sampai 255

Program ini bertujuan melakukan antarmuka sistem analog ke sistem digital menggunakan

IC ADC0804 (8-bit uP compatible A/D Converter) dari National Semiconductor

1. Antarmuka mikrokontroler/prosesor sebagai perangkat digital ke chip ADC sebagai

jembatan dari analog ke digital

2. Teknik kontrol dan transaksi data antara ukontroler dengan ADC secara paralel

3. Teknik interupsi eksternal dan pengesetan sampling rate untuk sinyal analog masukan

4. Melakukan profiling chip ADC yang digunakan, yaitu grafik konversi nilai digital

dari besar tegangan analognya

Program menggunakan rutin-rutin seperti modul#2 (LED termultipleks)

Page 2: Adc

Alat dan Bahan

1. Hardware:

1. Board praktikum interface

2. 2-buah kabel paralel (10-pin) untuk data_LED, select_LED

3. 1 buah kabel paralel (8-pin) untuk data_ADC

4. 4 buah kabel tunggal untuk kontrol_ADC: nRead (R), nEnable (E), nWrite (W) dan

nInterrupt (I)

board pembagi tegangan dengan potensiometer sebagai emulator dari sensor, dll.

Keluaran tegangan minimal 0V, maksimal 5V

5. Alat ukur: multitester

2. Software:

    a. MCU8051IDE untuk editor kode sumber *.asm berbasis GUI beserta assemblernya

    b. NGProg33 programmer serial untuk upload kode *.hex ke board

Dasar Teori

1. Prinsip kerja ADC

2. Antarmuka mikrokontroler dengan ADC

    - koneksi ADC dengan mikrokontroler

3. Teknik antarmuka ADC

    - diagram timing

    - teknik pemrograman untuk protokol dan transaksi data di antarmuka ADC tersebut

Page 3: Adc

    - interupsi eksternal dan pengaturan sampling rate untuk sinyal analog

Referensi:

1. http://www.kmitl.ac.th/~kswichit/lecture47/index.html

2. 8051 Instruction Set. http://www.kmitl.ac.th/~kswichit/lecture47/8051instruction.pdf

3. Tutorial 8051. http://www.zntu.edu.ua/base/lection/rpf/lib/zhzh03/8051_tutorial.pdf

4. MCS@51 MICROCONTROLLER FAMILY USER MANUAL. Intel.

http://pmik.imio.pw.edu.pl/pliki/8051_Manual.pdf

5. ADC0804 Datasheet. National Semi. http://www.national.com/ds/DC/ADC0801.pdf

Cara Kerja:

1. Pastikan board praktikum terdeteksi dengan baik dari NGProg33

2. Hubungkan port P0 dengan jalur data_LED dan P2 dengan jalur select_LED

menggunakan kabel paralel 10-kabel

3. Hubungkan port P1 dengan jalur data_ADC menggunakan paralel 8-kabel

4. Hubungkan port kontrol_ADC:

1. P3.2 dengan adc_int (I)

2. P3.6 dengan adc_wr (W)

3. P3.7 dengan adc_rd (R)

4. adc_en dengan ground, gnd (P1,- atau P3,- atau Gnd lainnya)

Page 4: Adc
Page 5: Adc
Page 6: Adc

5. Program kode sumber, kompile dan upload ke board

Page 7: Adc

6. Sambungkan keluaran board pembagi tegangan ke masukan ADC (adc_in).

Hubungkan juga multitester untuk mengukur tegangan tersebut dengan referensi

ground

7. Run program

8. Putar potensiometer sampai tegangan terukur mendekati 0V atau tampilan LED 000.

9. Putar berlahan-lahan dengan step seperti yang diminta dalam lembar kegiatan.

10. Amati besar tegangan terukur di multitester dan nilai keluaran LED

11. Buat tabel, gambar grafik dan analisis profile dari ADC (fungsi transfer)

Tugas praktikum

1. Buat subprogram untuk mengubah tampilan LED dari nilai digital menjadi kode

tegangan (4 digit, digit 4 untuk tegangan satuan, sisanya untuk pecahan).

Misalnya: 0V menjadi 0000, 40mV menjadi 0040. Nilai tegangan diperoleh dari

pembacaan multitester dan nilai digital konversinya

2. Edit program untuk sampling tegangan 1ms. Jelaskan solusi Anda

; -----------------------

; Include file

; -----------------------

    include    "delay.asm"    ; Fungsi-fungsi delay

    include    "led_matrik.asm"    ; Fungsi dan makro untuk matriks LED

 

Page 8: Adc

; -----------------------

; Vector

; -----------------------

    org    0        ; Reset vector

    jmp    start

 

    org    03h        ; External0 vector

    jmp    EX0_int

 

    org    0Bh        ; Interrupt vector - T0

    sjmp    T0_int

 

; -----------------------------

; Konstanta dan Definisi

; -----------------------------

 

    ;; Konfigurasi pin di P1

    ; P1: port DAC

    ; P3.6: port strobe nWrite

adc_port    equ    P1    ; port DAC

adc_int    equ    P3.2        ; Pin interrupt ADC

adc_wr    equ    P3.6        ; Kontrol Write/WR ADC

adc_rd    equ    P3.7        ; Kontrol Read/RD ADC

 

data_led    data    20h    ; Sama dengan alamat data_ptr di led_matrik.asm

adc_data    data    30h    ; Menyimpan data DAC

Page 9: Adc

adc_count    data    31h    ; Alamat untuk menyimpan counting DAC

adc_rate    equ    200    ; 200us * 200 = 40ms sampling

 

 

;; Macro assert & deassert

    ; Assert: activate

    ; Deassert: deactivate

assert    macro    bit

    ;setb    bit    ; active-high

    clr    bit            ; active-low

endm

 

deassert    macro    bit

    ;clr    bit    ; active-high

    setb    bit            ; active-low

endm

 

; ------------------------------------------

; Subprogram

; ------------------------------------------

;

    ;; Handle interrupt from TF0

T0_int:

    push    ACC        ; Protect register Acc dan B

    push    B

    ; Tampilkan bilangan ke display LED

Page 10: Adc

    call    display_number

    inc    adc_count    ; Increment adc_count, used in EX0_int

    mov    A, adc_count

    cjne    A, #adc_rate, t0_noops

    mov    adc_count, #0

    call    start_conversion    ; Start conversion dg rate adc_rate

 

t0_noops:

    pop    B

    pop    ACC

    reti

 

    ;; Handle interrupt from External0

EX0_int:

    push    ACC        ; Protect register Acc dan B

    push    B

    assert    adc_rd

    ; Get data dari ADC

    mov    adc_data, adc_port

    call    extract_num    ; Ekstrak bilangan desimal, tampilkan di LED

    deassert    adc_rd

    pop    B

    pop    ACC

    reti

 

Page 11: Adc

start_conversion:

    assert    adc_wr

    deassert    adc_wr

    ret

 

    ;; extract_num

    ; Ekstrak bilangan desimal menjadi unit, puluhan dan ratusan

 

extract_num:

    ; ekstrak ratusan

    mov    A, adc_data

    mov    B, #100d

    div    AB

    mov    data_led+2, A

    ; ekstrak puluhan

    mov    A, B        ; Ambil reminder

    mov    B, #10d

    div    AB

    mov    data_led+1, A

    mov    data_led, B

    ret

 

start:

    ; Inisialisasi data ke 0h

    init_led    data_ptr, #0h

Page 12: Adc

    mov    R0, #data_led+data_len

    ; Inisialisasi nilai masukan dac

    mov    adc_count, #0

    mov    P0, adc_count

    ; Interrupt setting

    mov    IE, #0h        ; disable all interrupts

    setb    ET0        ; Aktifkan interrupt timer

    setb    EX0        ; Aktifkan interrupt EX0

    setb    EA

    ;; Inisialisasi Timer0

    mov    TMOD, #03h    ; Mode 3 timer: separated timer 8-bit

    mov    TL0, #185d    ; 200us timer at 11.059MHz

                ; 12*TL0/11.059M

    setb    TR0        ; Turn on Timer0

    call    start_conversion    ; Initiate ADC conversion

    sjmp    main

 

main:                ; Main loop

    jmp    main

 

;-------------

; Program End

;-------------

    end

Page 13: Adc