Interface ADC dan LCD ke mikrokontroler
Gambar 3.14. Rangkaian interface ADC dan LCD ke mikrokontroler
Anda perhatikan koneksi pin /WR dan pin /INT, sungguh merupakan koneksi yang luar biasa. Karena anda tidak perlu repot-repot untuk mengendalikan ADC untuk mulai konversi, tetapi ADC akan berkerja dengan sendirinya. Pada saat awal power ON, maka WR mendapat logika 0, yang menyebabkan ADC bekerja untuk mengkonversikan dari Analog ke Digital, bila konversi telah selesai maka ADC akan mengeluarkan logika 0 pada pin INT. Karena pin INT terkoneksi ke WR maka ADC akan start konversi lagi, dst. Sungguh koneksi yang luar biasa yang dalam bahasa Jawanya dikenal dengan istilah " STAND ALONE ".
;Percobaan 3.5.1.
;Menuliskan data tegangan ADC ke LCD character dalam format desimal
;Pada percobaan ini kata tegangan dituliskan pada baris 2 mulai kolom pertama
;data desimal akan dituliskan pada kolom 10, 11, dan 12 pada baris 2, data desimal
;ini akan berubah sesuai dengan nilai tegangan yang masuk ke ADC
;Pada listing program tampak sebuah subrutine untuk menerjemahkan dari
;bilangan HEXA ke Desimal melalui subrutine Konversi
T | e | g | a | n | g | a | n | : | 2 | 3 | 3 |
dispclr equ 00000001b
funcset equ 00111000b
entrmod equ 00000110b
dispon equ 00001100b
Org 0h
Mulai: acall init_lcd
acall tulis
Again: acall adc
acall konversi
acall printoutchar
sjmp again
;
ADC: mov A,P2
ret
;
konversi:
mov B,#100d ; B= 100d
div AB ; A = A/ B, B = Sisa pembagian
mov Ratusan,A ; [Ratusan] = A
mov A,B ; A = B
mov B,#10d ; B = 10d
div AB ; A = A/ B, B = Sisa pembagian
mov Puluhan,a ; [Puluhan] = A
mov Satuan,b ; [ Satuan] = B
ret
;
Printoutchar:
mov R1,#0CAh ; R1 = CAh, pemilihan baris ke 2 kolom ke 10
acall write_inst
mov A,Ratusan ; A = [ Ratusan ]
Add A,#30h ; A = A + 30h, konversi data byte ke ascii
mov R1,A ; R1 = A
acall write_data
;
mov R1,#0CBh ; R1 = CAh, pemilihan baris ke 2 kolom ke 11
acall write_inst
mov A,puluhan ; A = [ Puluhan ]
add A,#30h ; A = A + 30h, konversi data byte ke ascii
mov R1,A ; R1 = A
acall write_data
;
mov R1,#0CCh ; R1 = CCh, pemilihan baris ke 2 kolom 12
acall write_inst
mov A,satuan ; A = [ Satuan ]
add A,#30h ; A = A + 30h, konversi data byte ke ascii
mov R1,A ; R1 = A
acall write_data
ret
;
Tulis: mov dptr,#tulisan1
mov r3,#9
mov r1,#0C0h
acall write_inst
Tulis1: clr a
movc a,@a+dptr
mov r1,A
inc dptr
acall write_data
djnz r3,tulis1
ret
;
Write_inst:
Clr P1.0 ; RS = P1.0 = 0, mode tulis instruksi ke LCD
Mov P0,R1 ; D7 s/d D0 = P0 = R1
Setb P1.1 ; EN = 1 = P1.1
Acall delay ; panggil waktu tunda
Clr P1.1 ; EN = 0 = P1.1
ret
;
Write_data:
Setb P1.0 ; RS = P1.0 = 1, mode tulis data ke LCD
Mov P0,R1 ; D7 s/d D0 = P0 = R1
Setb P1.1 ; EN = 1 = P1.1
Acall delay ; panggil waktu tunda
Clr p1.1 ; EN = 0 = P1.1
ret
;
init_lcd:
mov r1,#dispclr
acall write_inst
mov r1,#funcset
acall write_inst
mov r1,#dispon
acall write_inst
mov r1,#entrmod
acall write_inst
ret
;
Tulisan1: DB 'TEGANGAN:'
end
Koneksi yang cantik !
Gambar 3.15. Rangkaian interface ADC dan LCD ke mikrokontroler
Pada gambar 3.15 tersebut tampak koneksi yang sangat anggun sekali, untuk menampilan data ADC ke 7 segmen, karena dari segi cost tentulah sangat murah sekali apabila dibandingkan dengan percobaan display dengan menggunakan LCD karakter, dan dengan mudahnya anda dapat membuat rangkaian tersebut untuk berbagai macam keperluan.
;Percobaan 3.5.2.
;Display output ADC0804 ke Seven Segmen
;Ratusan-> 7S.5, Puluhan->7S.6, Satuan-> 7S.5
;Pada percobaan ini data dari ADC akan dikonversikan terlebih dahulu menjadi
;data Ratusan-Puluhan-Satuan dengan menggunakan subrutine KOnversi
;seperti halnya pada LCD karakter maka data-data ini akan dioutputkan ke
;7 segmen satu persatu dan dilakukan scanning data. Pada proses scan data ini
;sebenarnya akan terlihat data angka yang berkedip, karena frekuensi scan
;cukup cepat maka tidak akan terlihat kedipan dari data yang didisplaykan
Org 0h
Start: Acall ADC ; Memanggil subrutine ADC
Acall Konversi ; Memanggil subrutine Konversi
Acall Display7Segmen ; Memanggil subrutine Display7 Segmen
sjmp Start ; Looping forever terjadi disini, dan program akan
; terjebak selama-lamanya dan tidak ada sesuatu
; yang dapat kita perbuat dengan hal ini.
;
ADC: mov A,P2 ; A = P2
ret
;
Konversi:
mov b,#100d ; Idem dengan percobaan sebelumnya
div ab
mov Ratusan,a
mov a,b
mov b,#10d
div ab
mov Puluhan,a
mov Satuan,b
ret
;
Display7segmen:
Mov P1,#11111111b ; P1 = 11111111b
mov A, Ratusan ; A = [Ratusan ]
mov DPTR,#Data7segmen ; DPTR =[Data7segmen]
movc A,@A+DPTR ; A = [A+DPTR]
mov P0,A ; P0 = A, menuliskan karakter ratusan
clr P1.5 ; P1.5 = 0, hidupkan segmen ke 5
Acall delay
;
mov A,Puluhan ; A = [ Puluhan ]
mov DPTR,#Data7segmen ; DPTR = [ Data7Segmen ]
movc A,@A+DPTR ; A = [A+DPTR]
setb P1.5 ; P1.5 = 1
mov P0,A ; P0 = A, menulis karakter puluhan
clr P1.6 ; P1.6 = 0, hidupkan segmen ke 6
Acall delay
;
mov A,Satuan ; A = [ Satuan ]
mov DPTR,#Data7segmen ; DPTR = [ Data7segmen ]
movc A,@A+DPTR ; A = [A+DPTR]
setb P1.6 ; P1.6 = 1
mov P0,A ; P0 = A, menulis karakter satuan
clr P1.7 ; P1.7 = 0, hidupkan segmen ke 7
Acall delay
;
ret
Data7segmen:
db11000000b,11111001b,10100100b,10110000b,10011001b,
db10010010b,10000010b,11111000b,10000000b,10010000b
No comments:
Post a Comment