AVR dan Keypad

Baiklah,…. berhubung deadline laporan progres penelitan udah mau menyentuh hidung alias udah mepeeett,… mending ngeblog dulu ah….(Don’t try this,…trust me!!!). dan kali ini  tentang penggunaan keypad untuk input mikrokontroller,…. dengan cara polling tanpa interupt,… kalo cara interface keypad dengan AVR sendiri sih, ada banyak banget, kalo mau,..tanya aja sama om gugle,…

ok udah basa basinya, keypad itu ada yang 3×4, ada yang 4×4 dan ada juga yang lainnya, (yang pernah saya pake baru yang 3×4 sama 4×4, hehehehe…). modelnya umumnya  kayak gini:

kali ini kita menggunakan keypad 4×4, dan skematiknya seperti gambar berikut,….

baiklah, mari kita bahas cara kerja dari keypad ini,…  prinsipnya sih kalo ditekan dia bernilai 1 kalo tidak ditekan bernilai 0,(tergantung rangkainnya, bisa juga sebaliknya), nah sekarang  jika kita memberikan logika 1 pada Row(baris) 0, maka jika tombol “1” ditekan maka col(kolom) 0 akan bernilai 1, sementara kolom  yang lain di baris 0 akan bernilai 0, dan selanjutnya jika tombol “2” ditekan maka kolom 2 akan bernilai satu dan kolom yang lain dibaris o akan bernilai 0, begitu seterusnya sampai tombol “A”, dan begitupun untuk baris selanjutnya….

jadi untuk mendeteksi tombol yang ditekan kita tinggal mencari kombinasi dari 8 bit pin yang bernilai 1 pada baris dan kolomnya (dalam kasus penggunaan keypad seperti ini), sebagai contoh, kombinasi pin untuk tombol “1”, baris 0 bernilai 1 dan baris lainnya bernilai 0, kolom 1 bernilai 1 dan kolom lainnya bernilai satu,, sehingga untuk menyatakan tombol satu dalam bilangan biner, urutannya sebagai berikut, baris 0, baris1, baris2, baris3, kolom1, kolom2, kolom3, kolom4 ato tombol 1 = 0b10001000, lebih jelasnya dapat kita liat pada tabel berikut:

Perlu dicatat, bahwa tabel di atas tidak selamanya sesuai dengan keypad yang ada, intinya liat aja gambar skematiknya dan prinsip kerja dari tiap2 keypad…..

untuk contoh potongan scriptnya seperti di bawah (keypad yang ini buatan innovative electronics surabaya, dan menggunakan AVR yang aktive low, jadi berkebalikan dengan tabel di atas jika di tekan akan bernilai 0)

void detek_key(void)

{PORTA.7=0;PORTA.6=1; PORTA.5=1; PORTA.4=1;

if(PINA ==0b01111110){dtkey=0xc; while (PINA ==0b01111110);  }

else if (PINA == 0b01111101){dtkey=3; x++; while (PINA ==0b01111101);}

else if (PINA == 0b01111011) {dtkey=2; x++; while (PINA ==0b01111011);}

else if (PINA == 0b01110111) {dtkey=1;x++; while (PINA ==0b01110111);}

PORTA.7=1; PORTA.6=0; PORTA.5=1; PORTA.4=1;

if(PINA ==0b10111110){ dtkeyy=0xd; while (PINA ==0b10111110); }

else if (PINA == 0b10111101) {dtkey=6; x++; while (PINA ==0b10111101);}

else if (PINA == 0b10111011) {dtkey=5;x++; while (PINA ==0b10111011);}

else if (PINA == 0b10110111) {dtkey=4; x++; while (PINA ==0b10110111);}

PORTA.7=1; PORTA.6=1; PORTA.5=1; PORTA.4=0;

if(PINA ==0b11101110){dtkeyy=0xf; while (PINA ==0b11101110);}

else if (PINA == 0b11101101) {dtkey=0xb; while (PINA ==0b11101101);}

else if (PINA == 0b11101011) {dtkey=0; x++; while (PINA ==0b11101011);}

else if (PINA == 0b11100111) {dtkey=0xa; while (PINA ==0b11100111);}

PORTA.7=1; PORTA.6=1; PORTA.5=1; PORTA.4=1;

if(PINA ==0b11101110){dtkey=0xf;while (PINA ==0b11101110);}

else if (PINA == 0b11101101) {dtkey=0xb; while (PINA ==0b11101101);}

else if (PINA == 0b11101011) {dtkey=0; x++; while (PINA ==0b11101011);}

else if (PINA == 0b11100111) {dtkey=0xa; while (PINA ==0b11100111);}

PORTA.7=1; PORTA.6=1; PORTA.5=0; PORTA.4=1;

if(PINA ==0b11011110){dtkey=0xe; while (PINA ==0b11011110);}

else if (PINA == 0b11011101) {dtkey=9;x++; while (PINA ==0b11011101);}

else if (PINA == 0b11011011) {dtkey=8; x++; while (PINA ==0b11011011);}

else if (PINA == 0b11010111) {dtkey=7; x++; while (PINA ==0b11010111);}}

 

Bersambung dilain waktu insya Allah dengan script yang lebih lengkap :D……

Category: AVR
You can follow any responses to this entry through the RSS 2.0 feed. Responses are currently closed, but you can trackback from your own site.

Comments are closed.