Pada kesempatan kali ini saya akan membagikan cara untuk mengakses Stik Ps2 ke mikrokontroler AVR atmega32 . Kontroler stik ps2 ini biasa digunakan untuk mengontrol robot secara manual . Jenis dari komunkisi yang di gunakan adalah jenis komunikasi SPI atau biasa disebut serial periperal interface. nah tidak usah berlama-lama saya akan menjelaskan mulai dari awal pembuatan sampai seting register menggunakan compiler Codevision AVR.agar teman-teman tidak tersesat di tengah jalan saya harap teman-teman bisa mengkikuti langkah-langkah di bawah ini.
Seting Chip & crystal |
Spi seting |
Kemudian seting Clock phase ke mode Cycle Half , kemudaian clock polaritinya ke mode High , Spi Type sebagai master , data ordernya ke LSB , kemudian SPI clock rate nya kita seting 125.000Khz. Pastikan semua register yang kalian seting sama seperti register diatas.
seting port |
Berikut adalah pin apa saja yang akan kalian seting untuk Pin4 kalian harus memberi Logic 1 karena pin 4 adalah (psxatt) iddle kondisi , PORTB.7 sebagai (psxSck) , PORTB.6 sebagai (psxData) , dan PORTB.5 segabai (psxcmd). kemudian kalian lakukan generate dan save program , dan hasil dari program ini adalah seperti berikut untuk setingan di main programnya .
// SPI initialization
// SPI Type: Master
// SPI Clock Rate: 125.000 kHz
// SPI Clock Phase: Cycle Half
// SPI Clock Polarity: High
// SPI Data Order: LSB First
// SPCR=0x7E;
// SPSR=0x00;
Pastikan hasil yang kalian generate sama seperti yang diatas , agar lebih memudahkan kalian dalam proses uji coba program.Selanjutnya tulislah listing program sama seperti yang ada di bawah ini.
while(1)
{
PORTB.4=0;
spi(0x01);
delay_us(1);
byte1=spi(0x42);
delay_us(1);
byte2=spi(0);
delay_us(1);
byte3=spi(0);
delay_us(1);
byte4=spi(0);
delay_us(1);
byte5=spi(0);
delay_us(1);
byte6=spi(0);
delay_us(1);
byte7=spi(0);
delay_us(1);
byte8=spi(0);
delay_us(1);
PORTB.4=1;
delay_ms(10);
lcd_clear();
lcd_gotoxy(0,0);
sprintf(byte,"%d %d %d %d\n %d %d %d %d",byte1,byte2,byte3,byte4,byte5,byte6,byte7,byte8);
lcd_puts(byte);
delay_ms(10);
}
Kemudian saya akan menjelaskan secara detil tentang penjelasan program diatas.Data digital ini bersifat active low , jadi ketika tombol di tekan akan diterima data 0xff(0b11111111). Jika joystik sedang dalam kondisi analog , maka komunikasi dilanjutkan dengan data analog 1, data analog 2 , data analog 3 dan data analog 4, yang saat kondisi netral berupa data 0x7f(127) dengan nilai minimal 0 dan nilai maximal 255.Saat operasi digital byte 6 sampai dengan byte 9 akan selalu memberikan data 0xff.
Saat kondisi iddle pin Psxatt dalam keadaan High. Untuk menandai dimualinya kondisi pin Psxatt di beri low ,kemudian akan terjadi pertukaran perintah dan data seperti yang telah saya jelaskan diatas. Komunikasi di akhiri dengan membuat Psxatt kembali High.Kemudian kita lanjutakan dengan membuat rangkaian elektroniknya. Rangkaian elektriknya sangat sederhana dan ikuti langkah-langkah pembuatan seperti contoh dibawah.
Untuk lebih detilnya diatas terdapat beberapa warna-warna yang ada di dalam kabel stik ps2 yang akan kalian akses datanya.Sebagai catatan untuk Resistor dimasing-masing kaki bisa diganti dengan nilai yang tidak jauh berbeda semisal dengan nilai 330ohm atau 560ohm.Nah untuk lebih detil, saya akan memberikan gambaran tentang beberapa konektor stik p2 ini.
Nah setelah ini kalian bisa mengakses tombol-tombol dan analog yang ada di dalam Stik Ps2 ini . Untuk lebih lengkapnya silahkan download linknya disini.
Source code stik Ps2 atmega16
Datasheet atmega16
// SPI Type: Master
// SPI Clock Rate: 125.000 kHz
// SPI Clock Phase: Cycle Half
// SPI Clock Polarity: High
// SPI Data Order: LSB First
// SPCR=0x7E;
// SPSR=0x00;
Pastikan hasil yang kalian generate sama seperti yang diatas , agar lebih memudahkan kalian dalam proses uji coba program.Selanjutnya tulislah listing program sama seperti yang ada di bawah ini.
while(1)
{
PORTB.4=0;
spi(0x01);
delay_us(1);
byte1=spi(0x42);
delay_us(1);
byte2=spi(0);
delay_us(1);
byte3=spi(0);
delay_us(1);
byte4=spi(0);
delay_us(1);
byte5=spi(0);
delay_us(1);
byte6=spi(0);
delay_us(1);
byte7=spi(0);
delay_us(1);
byte8=spi(0);
delay_us(1);
PORTB.4=1;
delay_ms(10);
lcd_clear();
lcd_gotoxy(0,0);
sprintf(byte,"%d %d %d %d\n %d %d %d %d",byte1,byte2,byte3,byte4,byte5,byte6,byte7,byte8);
lcd_puts(byte);
delay_ms(10);
}
Kemudian saya akan menjelaskan secara detil tentang penjelasan program diatas.Data digital ini bersifat active low , jadi ketika tombol di tekan akan diterima data 0xff(0b11111111). Jika joystik sedang dalam kondisi analog , maka komunikasi dilanjutkan dengan data analog 1, data analog 2 , data analog 3 dan data analog 4, yang saat kondisi netral berupa data 0x7f(127) dengan nilai minimal 0 dan nilai maximal 255.Saat operasi digital byte 6 sampai dengan byte 9 akan selalu memberikan data 0xff.
Pertukaran Data Digital |
Stik Ps2 ke mikrokontroler |
konektor stik ps2 |
Konektor stik PS2 |
Source code stik Ps2 atmega16
Datasheet atmega16
Sekian dan terimakasi dari saya By. andra risciawan
Trims infonya,
ReplyDeletesy coba menggunakan atmega 128 knp tidak bisa y? apakah ada yg harus di ubah.
kalau berkenan boleh d email k aidielpoetra@gmail.com jika menggunakan atmega 128.
trims.
Harusnya bisa mas ... tidak ada yang berbeda dari atemega 128 .. hanya saja mas harus seting crystal dan port yang berbeda saja
Deletekak gmn klu kriystal yg di pake tuh 12 mhz
ReplyDelete