- LEVEL : ADVANCE
- BAHAN2 : AVR micro ( ATTINY 2313), KEYBOARD PS-2, DOTMATRIX , R 10K
- DASAR yg PERLU DIKUASAI : Basic I/O, Interupt dan menulis ke DOT MATRIX ( love hurts) silahkan baca disini
Pertama kita perlu mengetahui port keyboard PS2 itu seperti ini :
sedangkan pada input micro , umumnya menggunakan koneksi seperti ini :
dimana input 'clock' masuk ke pin interupt pada microcontroller, sedangkan pin 'data' masuk ke pin biasa dari AVR (bidirect). semua I/O di pull up dengan resistor 10k ke Vcc. Selanjutnya kita bahas dulu format transfer data saat ada penekanan tombol , gambarannya seperti ini :
jadi keyboard dapat mengirim data karakter ke micro, sedangkan micro mengirimkan setting keyboard. sehingga komunikasinya bidirectional
oke, selanjutnya kita perhatikan kode scan/hex dari pencetan tombol keyboard, tabelnya seperti ini :
setelah itu kita susun port ps 2 & port dot matrix dengan susunan I/O seperti ini :
==========potongan script di main(), lengkapi sendiri============== //clock di interupt 0 (pin 6) MCUCR |= (1<<ISC01) | (0<<ISC00); // falling edge int 0 GIMSK |= (1<<INT0); //data keyboard di port PD3 (pin 7) DDRD &= ~_BV(PD3) ; //kolom dot matrix DDRD |= _BV(PD0) | _BV(PD1) | _BV(PD4) | _BV(PD5) | _BV(PD6) ; //data / baris dot matrix DDRB |= _BV(PB0) | _BV(PB1) | _BV(PB2) | _BV(PB3) | _BV(PB4) | _BV(PB5) | _BV(PB6) ; // output led buat ngecek ada pencetan keyboard di PA0 (pin 4) DDRA |= _BV(PA0);
kemudian yg ga kalah pentingnya adalah membikin databse/lookup table untuk scan code keyboard menjadi baris data dot matrix. (harap baca dulu cara menulis di dot matrix)
const char h_A[5] PROGMEM = {0x7e, 0x11, 0x11, 0x11, 0x7e}; //A const char h_B[5] PROGMEM = {0x7f, 0x49, 0x49, 0x49, 0x36}; //B const char h_C[5] PROGMEM = {0x3e, 0x41, 0x41, 0x41, 0x22}; //C const char h_D[5] PROGMEM = {0x7f, 0x41, 0x41, 0x22, 0x1c}; //D ...... dst ....
jadi, tiap ada pemencetan tombol, maka pin clock dari keyboard akan menginterupt ( falling / turun dari 1-0) AVR dengan format seperti gambar diatas, sehingga script pada interuptnya berupa
SIGNAL (SIG_INT0) //routinre interupt INT0 { if(clk > 1 && clk <10) //clock yg bermanfaat saja yg dibaca { //pindahkan data dari PIN DATA keyboard ke memory key[(clk - 2)] = ((PIND & _BV(PIND3)) >> PIND3); //nyalakan led penanda ada data dikirim keyboard PORTA |= _BV(PA0); } clk++; // tambahkan nilai variable clk tiap interrupt if(clk == 12) //maksimum clock yg dikirim {clk=1; PORTA &= ~_BV(PA0); //matikan led tanda data kosong } }
selanjutnya kita terjemahkan data dari memory array "key" kedalam bentuk hexa yg kemudian diterjemahkan dengan database metode "lookup"
int a; char hurufnya[5]; //rumus merubah array key ke hexa scan code a= (128*key[7]) + (64*key[6]) + (32*key[5]) + (16*key[4]) + (8*key[3]) + (4*key[2]) + (2*key[1]) + key[0] ; switch (a) { case 0x1C : strncpy_P(hurufnya,h_A,5); break; case 0x32 : strncpy_P(hurufnya,h_B,5); break; case 0x21 : strncpy_P(hurufnya,h_C,5); break; case 0x23 : strncpy_P(hurufnya,h_D,5); break; case 0x24 : strncpy_P(hurufnya,h_E,5); break; case 0x2B : strncpy_P(hurufnya,h_F,5); break; ............dan seterusnya default : strncpy_P(hurufnya,h_43,5); } // selanjutnya ditampilkan di DOTMATRIX ( tampilkan per kolom) //kolom 1 PORTB = 0x80; PORTD &= ~_BV(PD0); PORTD |= _BV(PD1) | _BV(PD4) | _BV(PD5) | _BV(PD6) ; PORTB = hurufnya[0]; _delay_ms(10); //kolom2 PORTB = 0x80; PORTD &= ~_BV(PD1); PORTD |= _BV(PD0) | _BV(PD4) | _BV(PD5) | _BV(PD6) ; PORTB = hurufnya[1]; _delay_ms(10); ......dst.....
Masalahnya jaman sekarang udah jarang yang jual model PS/2 dan yang umum itu versi USB. Tinggal beli adapter nya aja...ehhh ternyata didalemnya ga ada rangkaian tambahannya loo...bikin aja sendiri
Jangan lupa untuk melakukan pull-up clock dan data dengan resistor 10K ke Vcc
hasilnya kalo udah mahir, seperti ini loooo....
code full bisa didapat disini
Gan boleh minta programnya?
BalasHapusifuraixame@gmail.com
terima kasih
tolong bikinin bisa gak
BalasHapusmas boleh minta programnya gak?
BalasHapuskirim ke sini ya mas : furiysa@gmail.com
terima kasih mas
gan tolong minta programnya.
BalasHapuskirim ke arnoyappi@yahoo.co.id
matursuwun
mas boleh minta programnya?
BalasHapussofian.dh.89@gmail.com trimakasih
silahkan download source yang full di : http://goo.gl/Pe7qmX
BalasHapusgan,,,bleh minta rangkaian skematiknya gk? kirim ke irsadnurfiqri@gmail.com,,,, makasih
BalasHapusmas boleh minta programnya gak?
BalasHapuskirim ke sini ya mas : zannagi6@gmail.com
terima kasih mas