Pada kesempatan kali ini, saya akan menulis tentang pembacaan joystick dengan AVR. Pada semester ini, saya mengambil mata kuliah EL3096 Sistem Mikroprosesor, dan pada akhir kuliah terdapat tugas proyek. Proyek yang saya akan lakukan adalah mobil-mobilan dengan controller berupa joystick Play Station.
Joystick PS sudah banyak diketahui orang, dan menurut saya sangat menarik apabila joystick tersebut dapat kita gunakan sesuai dengan keinginan kita.Untuk dapat menggunakan joystick tersebut, maka kita harus dapat membaca data yang dikirimkan dari joystick agar kita dapat menggunakan dan memproses data tersebut kemudian. Berhubung yang saya pelajari pada mata kuliah ini adalah mikrokontroller AVR, maka yang saya akan bahas adalah pembacaan joystick dengan AVR.
Cara menggunakan joystick dengan AVR sebenarnya sudah banyak bertebaran di internet, tetapi saya akan membahasnya disini juga untuk membantu dan mendokumentasikan proyek saya.
Hardware Joystick
Kabel joystick PS memiliki interface hardware sebagai berikut:
Gambar 1 Hardware Interface Joystick PS |
Gambar 2 Interface Joystick dengan SPI pada AVR |
Untuk menghubungkan lima kabel tersebut, bisa dilakukan dengan berbagai cara. Apabila anda tidak sayang pada joystick anda atau joystick sudah tidak dipakai lagi untuk main, bisa dilakukan dengan memotong kabel dan membuat sambungan dengan rangkaian diatas. Cara lain adalah dengan membeli sebuah connector joystick ke USB yang ada di pasaran, misalnya seperti ini:
Gambar 3 Connector Joystick to USB |
Gambar 4 Hasil Connector Buatan ke Mikrokontroller |
Pengiriman Data dengan SPI ke Mikrokontroller
Data yang dikirimkan dari joystick dapat diterima dengan melakukan command melalui spi pada avr. Data yang dikirimkan oleh joystick adalah seperti pada tabel berikut.
Tabel 1 Tabel Data dari Joystick |
Pembacaan Data dari Tombol dan Kontrol Analog
Tombol pada joystick adalah sebuah push button dengan sifat active low, sehingga misalkan kita menekan tombol Start, maka byte4 akan bernilai 0xF7.
Analog pada joystick dapat diibaratkan potensiometer, dengan masing-masing analog kiri dan kana terdiri dari dua potensiometer, sumbu x dan sumby y. Oleh karena itu data pada byte 6 hingga 9 adalah data ADC dari tiap sumbu analog. Pada posisi default (tengah) nilainya adalah sekitar 127, posisi minimum dan maksimumnya ditunjukkan pada Tabel 1.
Procedure Pembacaan data
Pembacaan dengan spi dilakukan dengan procedure sebagai berikut.
Semua variabel diatas terserah pada anda, pilih saja yang paling memudahkan. Dari hasil prosedur scan_data di atas, dapat dilakukan pengesetan variabel sesuai kondisi data yang dikirimkan.
Saya membuat suatu varibel key untuk menentukan tombol mana yang ditekan, sehingga ke depannya dengan mengetahui key apa yang ditekan saya dapat menentukan apa yanag akan dilakukan.
Prosedur assign_data tersebut dapat juga langsung disatukan dengan scan data agar pemanggilan prosedurnya cukup sekali saja. Saya memisahkan hanya untuk memperjelas pembacaan dan langkah lanjutannya.
Berikut contoh hasilnya, dengan memanfaatkan variabel key, xkiri, ykiri, xkanan, dan ykanan, lalu saya tampilkan pada LCD.
Bersambung ke post selanjutnya mengenai joystick wireless. Disertakan juga file header joystick jika perlu referensi tambahan.
Sekian dan terima kasih, semoga bermanfaat.
"Lihatlah dunia, dengan itu kita berkarya" -tandukion-
Daftar Pustaka dan Gambar:
http://store.curiousinventor.com/guides/PS2/
nugroho.staff.uii.ac.id/files/2009/01/psx.pdf
gan bisa minta source code nya gak,, kirim k sini fazallfast@gmail.com terimakasih sebelumnya,, newbie gan heheh,,
ReplyDeleteSilahkan cek di post yang kedua dan tentang RC Car. Disitu sudah saya sediakan bro. Kalau masih ada yang kurang silahkan tanya lagi aja, Insya Allah nanti saya jawab sebisa saya.
Deletemaksdu dari ini apa bro.>>> SPCR=(0<<SPIE) | (1<<SPE) | (1<<DORD) | (1<<MSTR) | (1<<CPOL) | (1<<CPHA) | (1<<SPR1) | (0<<SPR0);
ReplyDeleteSPSR=(1<<SPI2X);..?
maaf baru balas, itu register untuk fungsi spi di mikronya. Kalau mau diubah-ubah bisa cek di datasheet mikronya.
DeleteKalau untuk pengaturan frekuensinya, mudahnya ada di post selanjutnya http://tandukion.blogspot.com/2012/12/interfacing-joystick-dengan-avr-ii.html
Mas, kalau gamepad USB (stick untuk main pes) pakai kapasitor berapa ya?
ReplyDeleteAssalamualaikum Mas. saya sdh mengikuti step2 yg Mas post tapi yg tampil cuma angka 0 dan terkadang 255. Dan jika saya tekan tidak ada perubahan angka/data Mas. itu gmana ya?
ReplyDeleteAssalamualaikum Mas. saya sdh mengikuti step2 yg Mas post tapi yg tampil cuma angka 0 dan terkadang 255. Dan jika saya tekan tidak ada perubahan angka/data Mas. itu gmana ya?
ReplyDeleteHemm coba dua kemungkinan: atur frekuensi spi sehingga data tepat, atau cek lagi koneksi konektor dari joystick ke mikro
Delete