Powered By Blogger

Daftar Isi


Sunday, January 23, 2011

KEYPAD 3 X 4 DAN PEMROGRAMAN PADA ATmega 8535

Keypad 3×4
Keypad dibuat dari sekumpulan saklar push button.  Perbedaan modul saklar push button dan modul keypad adalah pada modul push button setiap saklar dihubungkan dengan satu pin I/O pada mikrokontroler.  Untuk mengontrol 8 buah saklar push button diperlukan 8 pin I/O. Keypadkeypad 3×4 (12 saklar) hanya membutuhkan 7 saklar kontrol saja (4 kontrol baris dan 3 kontrol kolom) sehingga lebih jumlah pin I/O yang digunakan lebih hemat. Penggunaan keypad 3×4 setidaknya bisa memberikan gambaran awal bagi programmer bahwa penghematan dari sisi hardware akan berakibat pemborosan dari sisi software...dihubungkan dengan I/O secara matriks sehingga lebih menghemat pin I/O.  Modul keypad 3×4 (12 saklar) hanya membutuhkan 7 saklar kontrol saja (4 kontrol baris dan 3 kontrol kolom) sehingga lebih jumlah pin I/O yang digunakan lebih hemat. Penggunaan keypad 3×4 setidaknya bisa memberikan gambaran awal bagi programmer bahwa penghematan dari sisi hardware akan berakibat pemborosan dari sisi software.

Perhatikan rangkaian keypad berikut: 
Gambar  Bentuk Fisik dan Rangkaian Keypad 3×4
Terlihat tombol 1, 2, dan 3 berada pada baris 1 (dihubungkan ke R1), tombol 4,5, dan 6 berada pada baris 2 (dihubungkan ke R2), dst.  Kaki lainnya dari push button disambung dengan push button lain yang berada pada satu kolom.  Misalnya tombol 1, 4, 7, dan * dihubungkan ke R7.
Untuk menentukan tombol mana yang ditekan, kita berikan logika 1 pada seluruh pin, kemudian kolom 1 diberikan logika 0.  Periksa R1, R2, R3, dan R4:
a) Jika R1 berubah menjadi 0, berarti tombol “1” sedang ditekan
b) Jika R2 berubah menjadi 0, berarti tombol “4” sedang ditekan
c) Jika R3 berubah menjadi 0, berarti tombol “7” sedang ditekan
d) Jika R4 berubah menjadi 0, berarti tombol “*” sedang ditekan
e) Jika R1, R2, R3, dan R4  tetap berlogika 1, berarti seluruh tombol pada   kolom 1 tidak ditekan
Berikan kembali logika 1 pada kolom 1 kemudian berikan logika 0 pada kolom 2.  Periksa lagi R1, R2, R3, dan R4:
a)  Jika R1 berubah menjadi 0, berarti tombol “2” sedang ditekan
b)  Jika R2 berubah menjadi 0, berarti tombol “5” sedang ditekan
c)  Jika R3 berubah menjadi 0, berarti tombol “8” sedang ditekan
d)  Jika R4 berubah menjadi 0, berarti tombol “0” sedang ditekan
e)  Jika R1, R2, R3, dan R4  tetap berlogika 1, berarti seluruh tombol pada kolom 2 tidak ditekan
Berikan kembali logika 1 pada kolom 2 kemudian berikan logika 0 pada kolom 3.  Periksa lagi R1, R2, R3, dan R4:
a) Jika R1 berubah menjadi 0, berarti tombol “3” sedang ditekan
b) Jika R2 berubah menjadi 0, berarti tombol “6” sedang ditekan
c) Jika R3 berubah menjadi 0, berarti tombol “9” sedang ditekan
d) Jika R4 berubah menjadi 0, berarti tombol “#” sedang ditekan
e) Jika R1, R2, R3, dan R4  tetap berlogika 1, berarti seluruh tombol pada    kolom 2 tidak ditekan
Perlu untuk diketahui bahwa ketika saklar ditekan, secara fisik tegangan pada baris yang berkaitan tidak akan langsung konstan di posisi 0 Volt.  Tegangan akan berosilasi (bouncing) selama keadaan transisi (transient) sebelum mencapai keadaan mantap (steady state).  Oleh karena itu pemeriksaan baris harus dilakukan berulang-ulang (misal 50 kali pemeriksaan) jika salah satu dari pemeriksaan sudah menghasilkan logika 0 maka pemeriksaan dihentikan.
Program Scanning Keypad 3×4
Untuk membuat program scanning keypad 3×4 yang tersusun secara matrik sesuai keterangan keypad 3×4 diatas dapat dilihat subroutine program keypad dibawah ini:
;————————————————————
; Check keypad sub routine
;————————————————————
check_keys:
ldi    temp,col1    ;isikan r22 dengan konstanta col1
out    PORTC,temp
rcall  timer100u
sbic   pinc,0        ;cek key1 ditekan atau tidak
rjmp   key4          ;jika tidak, cek key selanjutnya
ldi    key,0×01      ;jika ya,isikan key dengan nilai hexa 01
rjmp   Exitkey       ;lompat ke Exitkey
key4:
sbic   pinc,1        ;cek key4 ditekan atau tidak
rjmp   key7          ;jika tidak, cek key selanjutnya
ldi    key,0×04      ;jika ya,isikan key dengan nilai hexa 04
rjmp   Exitkey       ;lompat ke exit kay
key7:
sbic   pinc,2        ;cek key7 ditekan atau tidak
rjmp   keybintang    ;jika tidak, cek key selanjutnya
ldi    key,0×07      ;jika ya,isikan key dengan nilai hexa 07
rjmp   Exitkey       ;lompat ke exit kay
keybintang:
sbic   pinc,3       ;cek keybintang ditekan atau tidak
rjmp   key2          ;jika tidak, cek key selanjutnya
ldi    key,0x0a     ;jika ya,isikan key dengan nilai hexa 0a
rjmp   Exitkey       ;lompat ke exit kay
key2:
ldi    temp,col2    ; isikan r22 dengan konstanta col2
out    PORTC,temp
rcall  timer100u
sbic  pinc,0       ;cek key2 ditekan atau tidak
rjmp   key5          ;jika tidak, cek key selanjutnya
ldi    key,0×02     ;jika ya,isikan key dengan nilai hexa 02
rjmp   Exitkey       ;lompat ke exit kay
key5:
sbic   pinc,1       ;cek key5 ditekan atau tidak
rjmp   key8          ;jika tidak, cek key selanjutnya
ldi    key,0×05     ;jika ya,isikan key dengan nilai hexa 05
rjmp   Exitkey       ;lompat ke exit kay
key8:
sbic   pinc,2       ;cek key8 ditekan atau tidak
rjmp   key0          ;jika tidak, cek key selanjutnya
ldi    key,0×08     ;jika ya,isikan key dengan nilai hexa 08
rjmp   Exitkey       ;lompat ke exit kay
key0:
sbic   pinc,3       ;cek key0 ditekan atau tidak
rjmp   key3          ;jika tidak, cek key selanjutnya
ldi    key,0×00     ;jika ya,isikan key dengan nilai hexa 00
rjmp   Exitkey       ;lompat ke exit kay
key3:
ldi    temp,col3    ;isikan r22 dengan konstanta col3
out    PORTc,temp
rcall  timer100u
sbic   pinc,0       ;cek key3 ditekan atau tidak
rjmp   key6          ;jika tidak, cek key selanjutnya
ldi    key,0×03     ;jika ya,isikan key dengan nilai hexa 03
rjmp   Exitkey       ;lompat ke exit kay
key6:
sbic   pinc,1        ;cek key6 ditekan atau tidak
rjmp   key9          ;jika tidak, cek key selanjutnya
ldi    key,0×06      ;jika ya,isikan key dengan nilai hexa 06
rjmp   Exitkey       ;lompat ke exit kay
key9:
sbic   pinc,2       ;cek key9 ditekan atau tidak
rjmp   keypagar    ;jika tidak, cek key selanjutnya
ldi    key,0×09     ;jika ya, sikan key dengan nilai hexa 09
rjmp   Exitkey       ;lompat ke exit kay
keypagar:
sbic   pinc,3       ;cek keypagar ditekan atau tidak
rjmp   Nokey        ;jika tidak, cek key selanjutnya
ldi    key,0x0b     ;jika ya,isikan key dengan nilai hexa 0b
rjmp   Exitkey      ;lompat ke exit kay
Nokey:
ldi    key,0xFF      ;isi key dengan FF
Exitkey:
rcall timer100u
ret                  ;kembali dari subroutine
;————————————————————
; Delay sub routine100
;————————————————————
timer100u:
ldi          r30,0×2
ulang1:
Dec          r30
cpi          r30,0×00
brne ulang1
ret

Sumber : click here

0 comments:

Post a Comment

Link Exchange/Tukar Link

Tukaran Link Yuk....
 

©  copyright 2011 powered by Second Child