Custom Search

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

0 comments:

Post a Comment

Informasi Pilihan Identitas:
Google/Blogger : Khusus yang punya Account Blogger.
Lainnya : Jika tidak punya account blogger namun punya alamat Blog atau Website.
Anonim : Jika tidak ingin mempublikasikan profile anda (tidak disarankan).

Artikel yang serupa