Pada sebuah perangkat, kadang kita
menggunakan satu atau lebih komponen berupa sakelar. Entah itu sakelar geser,
tombol tekan atau push button baik push ON atau push OFF atau sekedar sebuah
jumperan. Semua itu adalah salah satu bentuk masukan untuk perangkat yang
bersifat manual yaitu masukan itu dilakukan oleh operator atau pengguna
perangkat tersebut.
Sakelar yang digunakan pada sebuah
perangkat kadang terdiri dari satu atau lebih tergantung kebutuhan dan fungsi
dari perangkat itu sendiri. Setidaknya sebuah sakelar diperlukan meskipun
sekedar untuk ON dan OFF atau untuk menghidupkan dan mematikan perangkat, namun
itu tidak relevan dengan pembahasan kita. Sakelar yang dimaksud dalam sebuah
perangkat adalah sakelar yang kondisi kontaknya mempengaruhi kerja sebuah
perangkat, lebih jauh lagi kondisi logika sakelar tersebut diproses oleh
perangkat sebagai sebuah perintah yang harus dikerjakan dan mempengaruhi hasil keluarannya
baik langsung maupun tidak langsung.
Ada beberapa perangkat yang hanya
membutuhkan sedikit sakelar untuk masukannya, sebagai contoh panel CPU yang
cuma memiliki tombol ON/OFF dan RESET. Atau monitor komputer atau televisi yang
memiliki sedikit lebih banyak tombol sakelar untuk menu hingga enam atau lebih
tombol.
Ada perangkat yang membutuhkan
begitu banyak sakelar berbentuk tombol. Sekedar contoh adalah remot televisi
atau kalkulator dan yang aku gunakan untuk mengetik postingan ini adalah sebuah
keyboard yang bahkan memiliki ratusan tombol.
Bagaimana mengaplikasikan sakelar
tombol pada sebuah perangkat tergantung kebutuhan dan ketersediaan saluran
masukan dari perangkat. Untuk perangkat yang sedikit menggunaakan sakelar
umumnya masukan sakelar ini dihubungkan dengan satu atau beberapa gerbang
masukan yang tersedia khususnya jika perangkat itu menggunakan sistem
mikrokontroler. Namun penulis merasa bahwa sekarang ini hampir semua perangkat
sesederhana apapun lebih banyaka menggunakan mikrokontroler. Karena era
sekarang ini sudah bergeser dari analog ke digital dan bahkan yang masih berbau
analog sekalipun diubah menjadi digital.
Nah, bagaimana dengan perangkat
yang banyak memiliki tombol sakelar? Tentu tidak memungkinkan bahwa setiap
sakelar bersifat individual di mana masing-masing sakelar terhubung ke gerbang
masukan yang sendiri-sendiri. Berapa
banyak saluran gerbang yang dibutuhkan oleh mikrokontroler untuk itu, tentu
sangat tidak memungkinkan. Maka, diperlukan tombol sakelar yang dirangkai
berbentuk matriks yaitu rangkaian sakelar tersebut terdiri dari beberapa kolom
dan baris. Matriks sakelar ini sering kita sebut dengan istilah matriks keypad
karena susunannya yang umumnya teratur dan berurutan.
Matriks keypad ada beberapa jenis
namun kita akan membedakannya dari jumlah kolom dan baris yaitu matriks keypad
3 X 4 (3 kolom dan 4 baris) atau 4 X 4 atau 4 X 8. Jumlah tombol yang bisa
dihasilkan dari matrik adalah sesuai perkalian dari jumlah kolom dan barisnya.
Sebuah matriks 3 X 4 berarti memilik 12 tombol, matriks 4 X 4 memiliki 16
tombol dan seterusnya.
Berkaitan dengan jumlah saluran
gerbang atau bit yang dibutuhkan untuk menangani matrik keypad ini adalah
sesuai dengan jumlah baris dan kolomnya. Ini berarti untuk matriks 3 X 4 dengan
12 tombol sakelar membutuhkan 7 bit saluran gerbang. Matriks 4 X 8 dengan 32
tombol memerlukan 12 bit. Matriks 4 X 4 dengan 16 tombol menggunakan 8 bit.
Begitu pula matriks 8 X 8 untuk 64 tombol hanya perlu 16 bit.
Terkadang dengan maksud untuk
menghemat penggunaan gerbang dari mikrokontroler dapat dilakukan dengan
menggunakan encoder dan shift register. Cara ini memungkinkan matriks 4 X 4
dengan 16 tombol hanya membutuhkan 4 bit saluran gerbang mikrokontroler saja.
Dan untuk saluran gerbang dengan 8 bit atau 1 byte dapat melayani sakelar hingga
256 tombol.
Contoh rangkaian matriks keypad 3
X 4 dengan 12 tombol dan 7 bit keluarannya dapat dilihat berikut ini:
Sekarang bagaimana sebuah tombol
dari matriks keypad dapat dikenali secara individual. Pada gambar di atas
diperlihat sebuah matriks 3 X 4 memiliki 12 sakelar yang terdiri dari S301
sampai dengan S312. Dan masing-masing tombol sakelar itu
merepresentasikan fungsinya sebagai tombol angka 1 sampai 9 ditambah 0 serta *
dan # seperti yang umum pada keypad telepon. Ini sekedar contoh saja. Masih
merujuk gambar di atas, matriks tersebut memiliki 3 saluran kolom dan 4 saluran
baris. Kita akan mengelompokkan saluran tersebut menjadi 2 bagian yaitu grup
kolom dan grup baris.
Selanjutnya dari kedua kelompok
baik kolom atau baris akan dipilih salah satu untuk difungsikan sebagai masukan
aktif yang akan mendapat sinyal berbentuk sinyal pencacah geser. Untuk itu
penulis mencoba melakukan pendekatan dengan menetapkan grup kolom yang akan
digunakan sebagai masukan aktif. Bentuk sinyal pencacah geser yang dibutuhkan
diperlihatkan pada gambar berikut ini:
Sinyal geser yang digunakan adalah
aktif rendah. Ini tidak mutlak, sobat bisa menggunakan sinyal geser aktif
tinggi sesuai keinginan dan disesuaikan dengan rangkaiannya tentu. Sekali lagi
penulis hanya mencoba melakukan pendekatan saja.
Sinyal pada C1, C2
dan C3 akan terus bergeser untuk melakukan scan. Jika tidak ada
satupun tombol yang ditekan maka masing-masing keluaran R1 sampai R4 akan tetap
tinggi. Kemudian jika salah satu tombol ditekan maka keluaran baris dari tombol
tersebut akan mengikuti logika dari sinyal kolom. Kita ambil contoh saat
menekan tombol S5 maka saat sinyal geser berada pada posisi C2
mengakibatkan R2 juga rendah. Apabila kedua grup ini dikombinasikan
menjadi urutan C3C2C1R4R3R2R1
maka akan menghasilkan sebuah format data dalam bentuk 1011101 sehingga dapat
diproses sebuah mikrokontroler atau rangkaian yang sesuai.
Mungkin sobat ada yang bertanya,
bagaimana jika menekan lebih dari satu tombol?
Hal ini tidak menjadi masalah karena
bagaimanapun semua tergantung dengan aplikasi yang akan dijalankan oleh
mikrokontroler. Karena pada aplikasi komputer di mana dalam penggunaan keyboard
kadang penekanan beberapa tombol secara bersamaan sering terjadi, contoh
Ctrl-Alt-Del, Ctrl-Alt-Shift, Alt-F4 dan masih banyak lagi.
Tapi pada kesempatan yang
berbahagia ini (seperti orang pidato) aku sebagai penulis akan membahas
mengenai pembuatan matriks keypad 3 X 4 yang nanti keluarannya akan dikirimkan
secara serial yang dapat langsung dibaca oleh sebuah PC. Terserah sobat untuk
memilih menggunakan Accessibility Option sehingga perangkat kita dianggap
sebagai keyboard serial atau menggunakan Hyperterminal. Keduanya sudah aku
bahas pada postingan sebelumnya.
Rangkaian lengkap dari matriks
keypad menggunakan AT89C2051 dapat sobat lihat berikut ini:
Rangkaian sederhana di atas aku
tambahkan sebuah penggerak buzzer sehingga penekanan sebuah tombol akan
menghasilkan bunyi beep. Untuk aplikasi program yang harus dijalankan AT89C2051
dapat dilihat berikut ini:
$mod51
Buzzer bit p1.0
Kolom1 bit p1.1
Kolom2 bit p1.2
Kolom3 bit p1.3
Baris1 bit p1.4
Baris2 bit p1.5
Baris3 bit p1.6
Baris4 bit p1.7
org
0h
Awal:
mov sp, #20h
mov scon, #50h
mov tmod, #20h
mov tl1, #0fdh
mov th1, #0fdh
mov ie, #90h
ajmp PeriksaBaris
Inisialisasi kecepatan data serial ditetapkan 9600 bps dengan mengisi TH1
dan TL1 masing-masing berisi FDH. Karena hanya memanfaatkan keluaran serial
saja maka tidak menggunakan ORG 23H untuk lokasi memori interupsi serial.
KirimSerial:
mov sbuf, a
jnb ti, $
clr ti
ret
SubRutinKolom:
jb Kolom1, GeserKolom2
mov p1, #11111011b
ajmp KolomSelesai
GeserKolom2:
jb Kolom2, GeserKolom3
mov p1, #11110111b
ajmp KolomSelesai
GeserKolom3:
mov p1, #11111101b
KolomSelesai:
mov r7, #255
djnz r7, $
ret
PeriksaBaris:
acall SubRutinKolom
mov a, p1
cpl a
anl a, #11110000b
jz PeriksaBaris
clr Buzzer
jb Baris1, PeriksaKolom2
mov b, #'1'
jnb Baris1, ProsesSerial
mov b, #'4'
jnb Baris2, ProsesSerial
mov b, #'7'
jnb Baris3, ProsesSerial
mov b, #'*'
ajmp ProsesSerial
PeriksaKolom2:
jb Baris2, PeriksaKolom3
mov b, #'2'
jnb Baris1, ProsesSerial
mov b, #'5'
jnb Baris2, ProsesSerial
mov b, #'8'
jnb Baris3, ProsesSerial
mov b, #'0'
ajmp ProsesSerial
PeriksaKolom3:
mov b, #'3'
jnb Baris1, ProsesSerial
mov b, #'6'
jnb Baris2, ProsesSerial
mov b, #'9'
jnb Baris3, ProsesSerial
mov b, #'#'
ProsesSerial:
mov a, p1
cpl a
anl a, #11110000b
jnz ProsesSerial
setb Buzzer
mov a, b
acall KirimSerial
ajmp PeriksaBaris
end
Nah program di atas sederhana kan.
Setelah proses kompilasi dengan ASM51.EXE hasilnya program kita hanya sampai
alamat 95H atau sekitar 149 byte (7,28%) dari total EEPROM AT89C2051 yang 2048
byte (000H – 7FFH).
Udah ya, makasih udah baca postingan aku. Semoga bisa bermanfaat,
sukur-sukur bisa diterapkan oleh sobat semua.
Salam....
Bisa dihubungkna dengan VB 6 dan database SQL ini ya... ok pak saya coba artiekel ini, sebenarnya saya pernah dapt tawaran dari PT.adsp untuk buka tutup portal masuk kendaraan, saya pernah tawarkan dengan vb6 + mikrokontroller dan berhasil kerja, namun kendala ada pada penghubung software yg dipake PT.asdp ( yg sudah tercompile ) maunya pemesan alat saya bisa membaca event yg bekerja pada software tsb... sampai skrg blm saya lanjutkan....
BalasHapusDilanjutkan saja Mas Ibnu....
BalasHapusApa pun kondisinya akan saya coba bantu sebisa mungkin, karena menurut saya itu peluang lho dan saya sudah sering menjalankannya.
Untuk aplikasi berhubungan dengan portal keluar masuk kendaraan sudah pernah saya implementasikan bukan menggunakan matriks keypad tetapi menggunakan RFID dan waktu itu saya memakai jenis MIFARE sehingga data USER bisa disimpan pada memori kartu S50.
Jika Tuhan berkenan nanti semua perangkat yang pernah saya buat satu-persatu akan dimuat dalam bentuk artikel di blog ini. Saya berusaha tetap menulis disela waktu kerja yang akhir-akhir ini cukup padat dan menyita waktu.