- Beranda
- Hobby & Community
Hobby Elektronika Digital, MicroController & solder Menyolder gabung sini Yuks
...
TS
ahocool
Hobby Elektronika Digital, MicroController & solder Menyolder gabung sini Yuks
DIGITAL ELECTRONICS HOBBY FORUM

UPDATE 8/JUNI/2014
DUKUN FUSEBIT AKAN MENGHIDUPKAN IC MU YANG MATI !

Selengkapnya dibahas di sini gan !!
CLINOMETER SEDERHANA MEMANFAATKAN ADC

Selengkapnya dibahas di post berikut
Proyek2 micro yg sudah jadi
I.N.D.E.X F.O.R.U.M
Biar ngiler, ane kasih contoh hasil karya TS...
.

Spoiler for apa aja sih yang dibahas?:
Spoiler for "Hobby Microcontroller Itu Mahal ? Kreativitasmu Itu yg Mahal Gan !":
UPDATE 8/JUNI/2014
DUKUN FUSEBIT AKAN MENGHIDUPKAN IC MU YANG MATI !

Selengkapnya dibahas di sini gan !!
CLINOMETER SEDERHANA MEMANFAATKAN ADC

Selengkapnya dibahas di post berikut
Spoiler for Buka Jika Mau Paket Belajar:
Proyek2 micro yg sudah jadi
Quote:
I.N.D.E.X F.O.R.U.M
Quote:
Biar ngiler, ane kasih contoh hasil karya TS...
Spoiler for Contact TS lewat dimari yahh:
.
Diubah oleh ahocool 14-06-2025 11:27
0
1M
8.6K
Komentar yang asik ya
Mari bergabung, dapatkan informasi dan teman baru!
Hobby & Community
10.5KThread•7.2KAnggota
Tampilkan semua post
TS
ahocool
#3795
INTERFACING KEYBOARD ke AVR & OUTPUT ke DOT MATRIX
- 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 :
![kaskus-image]()
dimana input clock masuk ke pin interupt, seangkan 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 pemencetan tombol , gambarannya seperti ini :
![kaskus-image]()
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 :
![kaskus-image]()
setelah itu kita susun port ps 2 & port dot matrix dengan susunan I/O seperti ini :
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)
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
selanjutnya kita terjemahkan data dari memory array "key" kedalam bentuk hexa yg kemudian diterjemahkan dengan database lookup
hasilnya kalo udah mahir, seperti ini loooo....
code full bisa didapat via PM ( kepanjangan)
SELAMAT MENCOBA
- 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, seangkan 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 pemencetan 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 :
Code:
//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)
Code:
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
Code:
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 lookup
Code:
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
hasilnya kalo udah mahir, seperti ini loooo....
code full bisa didapat via PM ( kepanjangan)
SELAMAT MENCOBA
0
