Thursday 22 November 2012

Pembacaan Joystick dengan AVR

Halo dunia!
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
Untuk membaca data dari joystick dengan AVR, kita memanfaatkan fitur SPI (Serial Peripheral Interface) pada mikrokontroller AVR. Dari 9 kabel yang ditunjukkan pada gambar 1, hanya beberapa yang digunakan, yaitu ditunjukkan pada gambar 2 berikut.
Gambar 2 Interface Joystick dengan SPI pada AVR
Resistor digunakan sebagai pengaman dan pembatas arus, dan juga sebagai pull-up pada pin untuk MISO.
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
Karena kita hanya membutuhkan connector femalenya, maka kita dapat meng"kanibal" connector tadi dan membuat sambungan baru untuk menguhubungkan joystick ke mikrokontroller. Hasil kanibalisasi yang saya lakukan:
Gambar 4 Hasil Connector Buatan ke Mikrokontroller
Selanjutnya connector yang dibuat siap disambungkan ke header yang menuju pin yang ditunjukkan pada Gambar 2.

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
Dari Tabel 1, untuk memulai pengiriman data dari joystick, diberikan command 0x01. Kemudian diberikan command 0x42 untuk mendapatkan tipe joystick data akan seperti pada keterangan. Selanjutnya dengan command 0, akan didapatkan data-data pada byte 4 hingga 9 secara berurutan.

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

8 comments:

  1. gan bisa minta source code nya gak,, kirim k sini fazallfast@gmail.com terimakasih sebelumnya,, newbie gan heheh,,

    ReplyDelete
    Replies
    1. Silahkan 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.

      Delete
  2. maksdu dari ini apa bro.>>> SPCR=(0<<SPIE) | (1<<SPE) | (1<<DORD) | (1<<MSTR) | (1<<CPOL) | (1<<CPHA) | (1<<SPR1) | (0<<SPR0);
    SPSR=(1<<SPI2X);..?

    ReplyDelete
    Replies
    1. maaf baru balas, itu register untuk fungsi spi di mikronya. Kalau mau diubah-ubah bisa cek di datasheet mikronya.
      Kalau untuk pengaturan frekuensinya, mudahnya ada di post selanjutnya http://tandukion.blogspot.com/2012/12/interfacing-joystick-dengan-avr-ii.html

      Delete
  3. Mas, kalau gamepad USB (stick untuk main pes) pakai kapasitor berapa ya?

    ReplyDelete
  4. Assalamualaikum 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?

    ReplyDelete
  5. Assalamualaikum 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?

    ReplyDelete
    Replies
    1. Hemm coba dua kemungkinan: atur frekuensi spi sehingga data tepat, atau cek lagi koneksi konektor dari joystick ke mikro

      Delete