Anda di halaman 1dari 3

Antarmuka Joystick PlayStation Dengan Mikrokontroler AVR Menggunakan CVAVR

Oleh : Agung Nugroho Adi


Laboratorium Mekatronika J urusan Teknik Mesin Universitas IslamIndonesia
ag_nug@yahoo.com
nugroho.staff.uii.ac.id

Saat ini tampaknya tidak ada orang yang tidak kenal PlayStation sebagai game console yang paling
populer di Indonesia. Tentunya kebanyakan dari kita sudah sangat terbiasa menggunakan joystick
PS, baik yang analog dan digital. Untuk itu akan menjadi suatu keuntungan tersendiri jika dapat
dibuat robot yang menggunakan joystick PS sebagai kontroler karena sudah tidak asing lagi, mudah
untuk digunakan, terdapat 16 tombol, dan terdapat 4 jalur analog.
Saya pertama kali mencoba untuk menggunakan joystick PS ini setelah membaca artikel dari J on
Williams berjudul PlayStation pada Nuts & Volts of Basic Stamps volume 4 yang juga terdapat
pada CD bawaan dari Parallax. Pada artikel tersebut diterangkan cara untuk mengakses data dari
joystick PS menggunakan mikrokontroler Basic Stamp 2. Waktu itu saya mengikuti langkah-
langkah yang terdapat pada artikel tersebut dan berhasil menampilkan data tombol yang ditekan
pada joystick PS pada PC. Tulisan yang saya buat ini sebagian besar bersumber dari artikel J on
Williams tersebut, tentunya dengan penyesuaian dan penjelasan tambahan karena mikrokontroler
yang digunakan berbeda, yaitu ATMega8535. Bahasa pemrograman yang digunakan adalah
CVAVR, karena nampaknya saat ini pemrograman ini cukup banyak digunakan (di Indonesia).

Gambar 1 Rangkaian antarmuka joystick PS dengan mikrokontroler ATMega8535

Antarmuka J oystick PlayStation Dengan Mikrokontroler AVR Menggunakan CVAVR 2
Rangkaian yang menghubungkan joystick PS2 cukup sederhana, hanya memerlukan beberapa
resistor, yang terdiri dari 3 resistor 220 yang berfungsi sebagai pengaman dan 1 buah resistor 4k7
sebagai pullup. Bahkan sebetulnya PsxCmd, PsxClock, dan PsxAttn dapat langsung dihubungkan
tanpa resistor sama sekali, namun tidak ada salahnya berjaga-jaga untuk melindungi jalur I/O
keduanya (catatan : biasanya pada pin Basic Stamp memang sangat dianjurkan menggunakan
resistor pembatas arus sebagai pengaman). Pin PsxDat, serta PsxAck jika digunakan, harus diberi
resistor pullup karena bersifat open collector. Dari mikrokontroler ATMega 8535 dibutuhkan 4 pin,
3 sebagai output (PB7/SCK, PB5/MOSI, dan PB4) serta 1 pin sebagai input (PB6/MISO).
Pemilihan pin disesuaikan dengan jalur SPI yang dapat dilihat pada datasheet masing-masing
mikrokontroler. Kabel abu-abu dihubungkan dengan catu daya 9V hanya jika motor getar akan
diaktifkan. Sebagai catatan, rangkaian ini sedikit berbeda dengan rangkaian pada artikel J on
Williams, karena di sana jalur PsxClock harus diinvert untuk menyesuaikan dengan perintah
shiftin/shiftout pada Basic Stamp.
Pada setiap joystick PS terdapat kontroler yang bertugas untuk berkomunikasi dengan console PS.
Komunikasi yang digunakan adalah serial sinkron, yaitu data dikirimsatu per satu melalui jalur
data. Untuk mengkoordinasikan antara pengirimdan penerima terdapat satu jalur clock. Hal inilah
yang membedakan serial sinkron dengan serial asinkron (UART/RS232) yang dapat bekerja tanpa
jalur clock karena masing-masing pengirimdan penerima mempunyai clock.

Gambar 2 Ilustrasi komunikasi serial sinkron

Komunikasi serial terdapat beberapa macam, yang terkenal adalah
I2C (Inter Integrated Circuit) atau juga dikenal dengan 2 wire (TWI =Two Wire Interface)
SPI (Serial Pheriperal Interface) atau kadang-kadang disebut 3 Wire Interface.
Yang digunakan pada joystick PS adalah komunikasi SPI. Awalnya saya sempat mengira kalau SPI
itu hanya digunakan untuk pemrograman mikrokontroler, tapi ternyata penggunaannya banyak juga,
misalnya untuk mengakses shift register 74595/74165, ADC0831, sensor temperatur DS1620,
kompas H55B dan masih banyak peranti lainnya.
Pada beberapa bahasa pemrograman tingkat tinggi telah tersedia fungsi yang menunjang
komunikasi SPI ini, misalnya shiftin/shiftout pada Pbasic atau Bascom dan spi untuk CVAVR.
Fungsi spi pada CVAVR mempunyai kelebihan dibandingkan dengan fungsi shiftin/shiftout, karena
dapat mengirimkan sekaligus menerima data pada rentang waktu yang sama. Untuk itulah dengan
menggunakan CVAVR tidak perlu dibuat subrutin tambahan seperti yang terdapat pada artikel J on
Williams.
Pertukaran data antara kontroler joystick PS dan mikrokontroler seperti tercantumpada tabel 1 dan
2. Untuk mengawali komunikasi dengan joystick PS mikrokontroler megirimbyte pertama berupa
perintah 0x01, kemudian byte kedua perintah 0x42 (baca data) sekaligus menerima tipe joystick
(0x41 untuk digital, 0x73 untuk analog) dari kontroler joystick. Byte ketiga dan seterusnya
mikrokontroler menerima data dari kontroler joystick berturut-turut 0x5A (ready), data digital 1,
Lab. Mekatronika J urusan Teknik Mesin UII 3
dan data digital 2. Data digital ini bersifat active low, jadi jika tidak ada tombol ditekan akan
diterima data 0xff (0b11111111).
J ika joystick dalamkondisi operasi analog maka komunikasi dilanjutkan dengan data analog 1, data
analog 2, data analog 3, dan data analog 4, yang saat pada kondisi netral berupa data 0x7f (127)
dengan nilai minimal 0 dan nilai maksimal 0xff (255). Saat operasi digital byte 6 9 selalu
memberikan data 0xff.

Tabel 1 Pertukaran data untuk joystick digital
Byte PsxCmd PsxData Keterangan
01 0x01 -
02 0x42 0x41

03 - 0x5A Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
04 - data
digital 1
Start Select
05 - data
digital 2
X O R1 L1 R2 L2


Tabel 2 Pertukaran data untuk joystick analog
Byte PsxCmd PsxData Keterangan
1 0x01 -
2 0x42 0x73

3 - 0x5A Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
4 - data
digital 1
Start J oy-R J oy-L Select
5 - data
digital 2
X O R1 L1 R2 L2
6 - data
analog 1
J oystick Analog Kanan Sumbu X
0x00 kiri, 0xff kanan
7 - data
analog 2
J oystick Analog Kanan Sumbu Y
0x00 atas, 0xff bawah
8 - data
analog 3
J oystick Analog Kiri Sumbu X
0x00 kiri, 0xff kanan
9 - data
analog 4
J oystick Analog Kiri Sumbu Y
0x00 atas, 0xff bawah

Prosedur untuk membaca data dari joystick adalah sebagai berikut.
voi d baca_dat a( ) {
psxat t n=0;
spi ( 0x01) ;
I D=spi ( 0x42) ;
SS=spi ( 0) ;
byt e4=spi ( 0) ;
byt e5=spi ( 0) ;
byt e6=spi ( 0) ;
byt e7=spi ( 0) ;
byt e8=spi ( 0) ;
byt e9=spi ( 0) ;
psxat t n=1;
}
Saat kondisi iddle pin PsxAttn dalamkeadaan high. Untuk menandai dimulainya komunikasi pin
PsxAttn diberi low, kemudian terjadi pertukaran perintah dan data seperti yang telah dijelaskan di
atas. Komunikasi diakhiri dengan membuat PsxAttn high kembali.
Antarmuka J oystick PlayStation Dengan Mikrokontroler AVR Menggunakan CVAVR 4
Pada bagian insisialisasi ada beberapa hal yang perlu diberikan pada program. Yang pertama adalah
#include<spi.h>. Selanjutnya hal yang perlu diperhatikan adalah penentuan register SPCR pada
bagian SPI Initialization. Nilai SPCR diisi 0b01111110 (0x7e) dengan penjelasan sebagai berikut
7 - SPIE =0 : interupsi SPI tidak aktif
6 - SPE =1 : SPI aktif
5 - DORD =1 : data order LSB first
4 - MSTR =1 : uc sebagai master
3 CPOL =1 : saat iddle clock =high
2 CPHA =1 : ambil/kirim data saat clock transisi turun
1 SPR1 =1
0 SPR0 =0 : rate select =10, fsck =fosc/64, untuk kristal 4 MHz =62.5 kHz
J ika anda menggunakan CodeWizzard AVR, maka parameter untuk tab SPI dapat diatur seperti di
atas.
Untuk PORTB Initialization PORTB diberi nilai 0x10 (0b00010000) karena PORTB.4 (PsxAttn)
diberi nilai awal 1 pada kondisi iddle. DDRB diberi nilai 0xB0 (0b10110000) karena PORTB.7
(PsxSck), PORTB5(PsxCmd), dan PORTB.4 (PsxAttn) sebagai output sedangkan PORTB.6
(PsxDat) sebagai input.
Hal-hal yang perlu diperhatikan :
Dari percobaan menggunakan beberapa kecepatan transfer data yang berbeda, data yang
diterima valid untuk frekuensi clock 62.5 kHz dan 31.25 Hz, namun nampaknya kontroler stick
PS tidak dapat melayani pertukaran data untuk 125 kHz dan 1 MHz. Sehingga saya
memperkirakan jika digunakan kristal 8 MHz maka SPR diberi nilai 11 (fsck =fosc/128).
Hingga saat ini saya masih belummenemukan konektor female dari joystick PS, sehingga untuk
melakukan percobaan ini saya harus menggunting kabel konektornya (yang artinya joysticknya
gak bisa dipakai buat main PS lagi). Mungkin konektor female bisa diperoleh dari PS bekas
ataupun mencarinya di tempat reparasi PS (jika ada info mengenai hal ini mohon saya dikabari
).
Dari beberapa joystick yang sudah saya potong kabelnya ada beberapa yang kabelnya 8, tidak 9
seperti yang telah dijelaskan pada gambar 1. Untuk yang seperti ini kabel warna putih yang
terhubung dengan pin PsxCmd (yang seharusnya warna oranye). Untuk mengeceknya dapat
digunakan multimeter.
Mikrokontroler juga dapat digunakan untuk mengaktifkan motor getar pada joystick PS, untuk
itu kabel abu-abu disambungkan dengan catu daya 9 V. Untuk daftar perintah dan pertukaran
data joystick PS dapat dilihat pada http://www.lynxmotion.com/images/files/ps2cmd01.txt
Demikian tulisan singkat mengenai antarmuka joystick PS dengan mikrokontroler ATMega8535,
jika terdapat masukan atau informasi tambahan dapat menghubungi saya.
Selamat Mencoba dan Semoga Bermanfaat (0109)

Referensi
J on Williams, PlayStation Control Redux, The Nuts 7 Volts of Basic Stamps (Volume 4),
September 2003, www.nutsvolts.com.
Pavel Haiduc, Code Vision AVR User Manual, HP Info Tech S.R.L, 2005.
Thomas Scherrer, Playstation Gamepad, http://www.webx.dk/robot-crawler/ps-joy.htm
Andrew J McCubbin, Sony Playstation Controller Information,
http://www.gamesx.com/controldata/psxcont/psxcont.htm
Near Future Laboratory, Playstation 2 Logic Analysis,
http://www.nearfuturelaboratory.com/2008/06/19/playstation2-logic-analysis/
http://www.lynxmotion.com/images/files/ps2cmd01.txt

Anda mungkin juga menyukai