Assalamualaykum.. 😀
Akhirnya bisa update blog lagi uy..
setelah sekian lama disibukkan dengan kesibukan yang terus menerus datang menghampiri.. XD
Apa kabar nih sobat embedded-ist dan Roboticist?? 😀
++ISTIMEWAAA…++ (Jawab ala Chibi.. XD)

Pada post kali ini saya akan membahas tentang penggunaan perangkat input digital yang berupa Keypad Matrix 4*4 ..
Tentu saja sobat sudah tau kan apa itu Keypad Matrix 4*4??
Secara umum keypad matrix 4*4 adalah 16 buah push button yang disusun / dirangkai dengan konnfigurasi matrix, sehingga memiliki index baris dan kolom..
Berikut contoh gambar dari keypad matrix 4*4 tersebut :

Keypad Matrix 4×4

Untuk rangkaiannya kira2 seperti ini :

Rangkaian Keypad Matrix 4×4

Penggunaan keypad matrix ini biasanya pada aplikasi yang membutuhkan banyak perangkat input teteapi pada kontrollernya (misal mikrokontroller) memiliki I/O yang terbatas..
Misalnya pada aplikasi input data untuk memasukkan nomor Hp, Nomor ID, Password, dll

Pertanyaannya adalah : Bagaimanakah cara membaca inputan dari keypad matrix ini dan mengetahui tombol manakah yang ditekan??
Itulah yang akan saya bahas pada artikel kali ini.
Kita akan sama2 belajar tentang bagaimana menggunakan Keypad Matrix 4*4 ini menggunakan BASCOM AVR dan mikrokontroller ATMega32.
Langsung saja, berikut adalah rangkaian yang akan kita gunakan :

Rangkaian Uji Coba

Secara garis besar, uji coba yang kita lakukan adalah membaca nilai output dari keypad matrix 4*4 dan ditampilkan ke LCD 16*2..
Langsung saja, berikut hasil uji cobanya :

Hasil Uji Coba

Prinsip kerja dari keypad matrix sebenarnya adalah menggunakan proses scanning Baris dan Kolom..
Pada Keypad Matrix 4*4 memiliki 4 buah Baris dan 4 buah kolom.
Jika kita menggunakan program scanning manual, maka salah satu dari Baris atau Kolom tsb harus di set sebagai output dan yang lainnya sebagai input (pada pin mikrokontroller yang terhubung dg keypad).

Pada contoh ini Kolom (PortD.0 – PortD.3) yang di set sebagai Output dan Baris sebagai Input (PinD.4 – PinD.7)
Langkah pertama adalah mengirimkan nilai 0001 pada Kolom, selanjutnya bit digeser ke kiri setiap 1 kali looping dan bila bit high (1) sudah mencapai bit paling kiri, maka diulangi lagi dari awal..
Sekuens-nya kira kira seperti ini : 0001 => 0010 => 0100 => 1000 => 0001 =>0010 =>…. dst

Kemudian untuk Baris (PinD.4 – PinD.7), semuanya di set sebagai input dengan nilai awal Low (0).
nah, dengan seperti ini ketika ada tombol yang ditekan, maka kita akan tahu tombol di koordinat manakah yang ditekan.
pada contoh gambar diatas, tombol yang ditekan adalah tombol B, Tombol B berada pada koordinat (Baris, Kolom) B(1,3).
Artinya : Ketika nilai Kolom = 0001, tombol yang terhubung ke PinD.5 DITEKAN.. atau nilai PortD.3 = 1 dan PinD.5 = 1
Terdengar rumit ha?? XDD

Diatas itu adalah algoritma cara membaca nilai keypad matrix secara manual..
Apabila kita memprogram menggunakan BASCOM AVR, hal diatas bisa dilakukan dengan jauuh lebih mudah.. XD
Karena pada BASCOM AVR telah disediakan fungsi untuk membaca keypad matrix 4*4.. 😀
Fungsi itu adalah “GETKBD()”.. 😀
Dengan fungsi Getkbd(), nilai dari tombol yang ditekan akan secara otomatis kita dapatkan!!
Sebagai contoh, pada gambar diatas ketika tombol “B” ditekan, maka fungsi Getkbd() akan memberikan nilai “7”..
Berikut tabel nilai yang akan diberikan oleh fungsi Getkbd() jika kita menggunakan rangkaian seperti pada contoh diatas :

Tombol yang ditekan      |       Nilai fungsi Getkbd()
‘                0                                          13
‘                1                                           0
‘                2                                           1
‘                3                                           2
‘                4                                           4
‘                5                                           5
‘                6                                           6
‘                7                                           8
‘                8                                            9
‘                9                                           10
‘                A                                            3
‘                B                                            7
‘                C                                           11
‘                D                                           15
‘                *                                           12
‘                #                                           14

Untuk Listing programnya, kira2 seperti ini :

 

'======================================================================================================
'joe4cva.wordpress.com
'Program : Mengakses Keypad 4*4 pada PortD
'Oleh : Pramudita Johan I.
'Elektronika Dan Instrumentasi
'Universitas Gadjah mada

$regfile = “m32def.dat” ‘Deklarasi mikrokontroller yang dipakai adalah ATMega32
$crystal = 12000000 ‘Deklarasi crystal yang dipakai adalah 11059200 Hz

Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
‘Mengkonfigurasi Pin LCD yang terkoneksi ke mikrokontroller
‘ Pin Db4 (Data Bus 4) = ke PortC.3
‘ Pin Db5 (Data Bus 5) = ke PortC.2
‘ Pin Db6 (Data Bus 6) = ke PortC.1
‘ Pin Db7 (Data Bus 7) = ke PortC.0
‘ Pin E (Enable) = ke PortC.4
‘ Pin RS (Register Select) = ke PortC.5
Config Lcdbus = 4 ‘Mengkonfig Bus LCD yang dipakai
Config Lcd = 16 * 2 ‘Mengkonfig type LCD yang dipakai (kolom * baris)
Cursor Off ‘Matikan cursor

Config Kbd = Portd , Debounce = 20 [ , Delay = 10]
‘mengkonfigurasi Keypad Matrix Pada Portd , Debounce = 20ms , Delay Antar Penekanan = 10ms
Dim Datakeypad As Byte ‘Deklarasi Variabel Datakeypad sebagai byte

Cls
Do
Datakeypad = Getkbd() ‘nilai variabel Datakeypad diambil dari keypad matrix
Locate 1 , 1
Lcd “Tes Keypad Matrx”
Locate 2 , 1
Lcd “Datakeypad : ” ; Datakeypad ; ” ” ‘tampilkan nilai datakeypad (NB : ketika tidak ada tombol yg ditekan, maka nilai datakeypad = 16)
Loop

‘============================================================================================

 

Demikian sedikit celotehan saya tentang Keypad Matrix 4*4.. Jika ada yang salah atau kurang,
mohon dikoreksi dan ditambahin via comment.. 😀
Semoga Bermanfaat.. 😀