semua ilmu semakin di pelajari semakin mudah. jika anda merasa sebaliknya, berarti.
anda mempelajari ilmu sesat atau anda tersesat saat mempelajarinya.
<kenzanin>.
Phase Alpha.
PsxPad atau PSX joystick bukan hal yang baru lagi bagi kita terutama yang penggemar
game, namum bagi yang belum kenal it’s okay there always first time for everything
hehe alat atau device ini berfungsi sebagai pengendali PSXconsole, secara fisik yang
terlihat hanya tombol yang tersusun pada tempat yang lebih mirip pesawat luar angkasa
di tambah kabel pada bagian depan nya. Mungkin setelah melihat gambarnya anda akan
lebih mengerti ☺.
Gambar PSxConsole
Sebagian besar PSxPad di gunakan untuk mengendalikan game yang dimainkan pada
PSX atau PS2 console yang tentu saja sebatas gambar yang bergerak gerak di TV, seiring
dengan rasa penasaran yang tinggi muncul pertanyaan apakah mungkin mengendalikan
hal-hal nyata dengan menggunakan PsxPad? Saya yakin “semua hal yang bisa di
rumuskan pasti dapat di kendalikan” karena itu pasti ada cara untuk mewujutkan
keinginan itu maka dimulailah project PsxPad interfacing.
Phase one.
QAC(question, answer, conclusion):
Q:
Cari apakah project seperti ini sudah ada yang mengerjakan?
A:
Sudah sangat banyak, dari berbagai sumber di internet ternyata sangat banyak orang yang
sudah berhasil menghubungkan PSXpad selain ke PSXconsole
C:
Berarti kemungkinan besar ide bisa di wujudkan.
Q:
Apa yang di perlukan untuk menghubungkan PsXpad ke device atau alat lain?
A:
Kebanyakan project menggunakan micro Controller(uC) mulai dari AVR sampai PIC,
bahkan ada juga yang menggunakan PC parallel port.
C:
Penggunaan PC parallel port pada project ini kurang flexible(karena ukuran dan
beratnya) karena itu sepertinya penggunaan micro controller lebih masuk akal.
Q:
Kebanyakan micro controller yang tersedia di pasar adalah jenis MCS-51 (AT89S52)
apakah ada project yang sama out there?
A:
Sayangnya diantara project yang di buka secara umum di internet tidak ada yang
menggunakan micro controller jenis ini, namum ada tempat pelatihan uC yang
menyediakan kelas untuk mempelajari hal ini dengan biaya Rp 700.000.
C:
Heheh biaya traning yang cukup tinggi bukan jadi masalah tapi jika jumat malam ndak
ketemu sama … hehehehe ndak ah. Melihat berbagai reverensi data yang ada sepertinya
bukan hal yang sulit untuk menghubungkan PSXpad ke uC karena itu lebih baik kerjakan
sendiri.
Q:
Analisa berbagai kendala yang di hadapi
A:
Tidak adanya datasheet resmi dari Sony menyebabkan data harus di kumpulkan sendiri.
Meski ada diagram timing dari internet namun itu bukan versi resmi jadi kebenarannya
tidak bisa dianggap 100%(but it’s very good start).
Perbedaan Negara pembuat PSXpad memungkinkan adanya perbedaan antara reverensi
dan barang nyata.
C:
Mencari data suatu alat tanpa datasheet sama seperti berjalan di kegelapan sambil
membawa flash light tanpa battery. Heheh susah, namun di Bantu alat alat yang sesuai
maka project ini masih memiliki kesempatan besar untuk bisa di laksanakan. Lanjut terus.
Q:
Bahasa pemograman yang tepat untuk project ini
A:
Bahasa C memberikan fleksibilitas yang tinggi namun hal ini berdampak pada penurunan
kecepatan program.
Bahasa Assembly memang menyusahkan namun kecepatannya yang tinggi (jika benar
memprogramnya) merupakan suatu keuntungan yang besar.
C:
Karena kecepatan dari PSx belum benar benar di ketahui maka sebaiknya menggunakan
assembly untuk project ini di samping itu tidak di perlukan manipulasi database membuat
assembly lebih sederhana.
Phase two.
Recipe PsxPad Interfacing.
Bahan-bahan:
Satu buah PsxPad lengkap dengan kabelnya
Satu soket SIP usahakan masih memiliki minimal 7 kaki
Kabel secukupnya
Timah secukupnya
Alat-alat:
Solder listrik + pembersih timah
Power supply 5v(untuk uC dan PsxPad) dan 9V (untuk analog PSxPad)
AT89S52 minimum system + ISP programmer
Oscilloscope (usahakan dapat yang digital)
Multimeter
Gunting atau tang pemotong kabel
Pisau jika ada
Semua bahan selain PSXpad, bisa anda dapatkan jika menjadi bagian dari Politeknik
Aceh (Promosi heheh).
Phase Three.
Close Look to the device.
Membeli PSxPad seharga Rp 40.000. kemudian membedahnya benar benar bukan hal
yang saya inginkan karena itu saya minta bantuan teman teman yang tertarik pada project
ini dan menyakinkannya untuk membelinya hehe.
Alhamdulilah teman saya mau membelikan dan menyerahkannya pada saya tanpa syarat
(what a wonderful world). Project di mulai dengan menggunakan situs pinouts.ru sebagai
referensinya berikut data dari situs pinouts.ru.
Semua pin dari PSxPad menggunakan tegangan 0(low)-5(high)v kecuali untuk analog
menggunakan power supply tambahan 9V pada pin ketiganya.
Jadi semua pin selain nomer 3 bisa langsung di hubungkan dengan uC dengan tambahan
resistor pull-up (1k-10k) pada pin 1(data) dan 9(ack).
Juga informasi dari pinouts.ru bahwa untuk PSxPad yang asli bisa berkerja pada level
tegangan 0(low)-3-5(high)v sedang yang aspal 5v.
Diagram di atas adalah bentuk komunikasi yang di gunakan antara uC dan PsxPad pada
diagram di atas hanya di tulis satu tahap komunikasi(sesi) sedang untuk komunikasi
sebenarnya di butuhkan lebih dari satu, banyaknya sesi data tergantung dari jenis pad
yang digunakan.
Misal
Digital 5 sesi data.
Analog red or green mode 9 sesi data.
Dll. (selengkapnya bisa di lihat di pinouts.ru)
Komunikasi data pada PsXpad menggunakan metode komunikasi serial 8bit yang sangat
mirip dengan komunikasi SPI
(http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus)
Langkah pertama uC (master) mengaktifkan device PsXpad (Slave) dengan cara memberi
logika rendah pada pin att nya, setelah itu clock mulai di berikan, data terima dan cmd di
kirim pada saat clock transisi rendah, pada transisi tinggi digunakan untuk
mempersiapkan cmd yang dikirim dan mempersiapkan tempat menampung data, satu kali
clock mewakili satu bit data yang di terima dan satu bit cmd, untuk mendapatkan 8bit,
maka perlu mengulang sebanyak 8kali.
Setiap 8kali clock pin ack akan memberikan logika rendah sesaat untuk memberikan
signal sync pada uC pada PSX console yang asli signal ack di gunakan untuk mendeteksi
kehadiran PSxPad.
Timing diagram terbagi atas dua bagian header dan data, header berfungsi untuk
mengaktifkan dan mendeteksi jenis psxpad yang di pakai.
Gambar contoh komunikasi antara digital PSXpad dan PSconsole atau uC.
Berikut keterangan dari gambar di atas.
• ATT di drive low untuk memulai komunikasi.
1. Byte 1.
a. uC atau PSconsole memberi CMD 0x01 untuk meminta ID dari
PSxPad.
2. Byte 2.
a. PsxPad mengirim ID melalui DATA 0x41 untuk digital, 0x73 untuk
analog red, 0x53 analog green, selengkapnya ada pada situs pinouts.ru
b. uC mengirim CMD 0x42 untuk meminta data tombol dari PSxPad.
3. Byte 3.
a. PsxPad mengirim DATA 0x5a yang menandakan bahwa PSxPad siap
mengirim data tombol ke uC.
Setelah bagian header berakhir sekarang masuk ke bagian data, pada bagian
ini jumlah sesi tergantung dengan model pad yang di gunakan untuk digital
PSxPad memiliki dua sesi data.
4. byte 4.
a. Data tombol bagian satu bagian ini meliputi D0 untuk tombol
SELECT, D3 START, D4 UP, D5 RIGHT, D6 DOWN, D7 LEFT.
Misalkan pada saat ini kita menekan tombol SELECT maka D0 akan
menjadi rendah
D7 D6 D5 D4 D3 D2 D1 D0
1 1 1 1 1 1 1 0
Maka data yang di hasilkan adalah 0xFE.
Jika kita menekan tombol UP maka D4
D7 D6 D5 D4 D3 D2 D1 D0
1 1 1 0 1 1 1 1
Sehingga data yang di kirim menjadi 0xEF.
Dan jika kita menekan dua tombol secara misal SELECT dan UP
maka data akan menjadi 0xEE.
5. byte 5.
a. Pada sesi ini menampung data E0 L2, E1 R2, E2 L1, E3 R1, E4
SEGITIGA, E5 LINGKARAN, E6 SILANG, E7 KOTAK.
Metode pengiriman data pada sesi ini sama dengan pada byte 4.
• ATT di drive high untuk memberi tahu PSxPad bahwa komunikasi sudah
berakhir.
Phase Four.
Close Look to the software.
Setelah melihat deskripsi mengenai device waktunya merancang software yang kita
butuhkan pada intinya program kita berfungsi untuk mengirim CMD dan menerima
DATA seiring(sync) dengan Clock.
Dengan menggunakan bahasa assembly untuk MCS-51 kita bisa membuat program
seperti di bawah ini
pada program di atas data CMD yang tersimpan pada accumulator akan di kirim ke
PSxPad dan pada akhir eksekusi DATA akan tersimpan pada accumulator.
Nah diatas contoh singkat tentang program yang di gunakan untuk menghubungkan
digital dan analog PSxPad ke uC.
Untuk program yang saya tulis selain untuk digital dan analog red PSxPad juga untuk
Negcon dan PSxMouse.
Menggunakan P2 sebagai bus out nya dan P3 sebagai selectornya sedang PSxPad masuk
ke P0.
Berikut table output untuk program KenPSxPad Interface.
Selector DataOut
0 0 1 Data 01 (tombol arah + start + select)
0 1 0 Data 02 (L1, L2, R1, R2, Segitiga, kotak, lingkaran, silang)
0 1 1 Data 03 (Right Joy 0x00 = Left 0xFF = Right)
1 0 0 Data 04 (Right Joy 0x00 = Up 0xFF = Down)
1 0 1 Data 05 (Left Joy 0x00 = Left 0xFF = Right)
1 1 0 Data 06 (Left Joy 0x00 = Up 0xFF = Down)
Berikut timing diagram dari PsxPad yang berhasil di rekam.
Perhatian di karenakan oscilloscope digital yang ada hanya memiliki 2 channel maka
untuk mendapatkan data seperti pada gambar, pengukuran harus di ulang ulang.
Sepertinya dokumentasi cukup sampai di sini entar klo ada request silahkan kirik ke
E-mail kenzanin@kenzanin.co.cc suka.isnaini@politeknikaceh.ac.id Okeh.
Lampiran Program
________________________________________________________________________
;This is free software
;you can redistribute it and/or modify it under the terms of the GNU
Lesser
;General Public License as published by the Free Software Foundation
;either version 2.1 of the License, or any later version.
;You should have received a copy of the GNU Lesser General Public
License along
;with this library if not, write to the Free Software Foundation, Inc.,
;59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
;copyright suka isnaini suka.isnaini@politeknikaceh.ac.id
pinctr equ P0
outp equ p2
outpc equ p3
pinclk equ pinctr.1
pinatt equ pinctr.2
pincmd equ pinctr.3
pindata equ pinctr.4
pinack equ pinctr.0
data01 equ r3
data02 equ r4
idle equ 0ffh
org $+00h
sjmp main
org $+40h
main: ;program utama
call f_scanPSx
sjmp main
f_scanPSx:
clr pinatt
rwspi 01h ;1
rwspi 42h ;2
cjne a,#41h,f_scanPSx01 ;digital pad <tested>
sjmp f_scanPSx_kel03
f_scanPSx01:
cjne a,#73h,f_scanPSx02 ;analog red pad <tested>
sjmp f_scanPSx_kel01
f_scanPSx02:
cjne a,#23h,f_scanPSx03 ;negcon pad <untested>
sjmp f_scanPSx_kel01
f_scanPSx03:
cjne a,#53h,f_scanPSx04 ;analog green pad <untested>
sjmp f_scanPSx_kel01
f_scanPSx04:
cjne a,#12h,f_scanPSx06 ;PSX mouse <untested>
sjmp f_scanPSx_kel02
f_scanPSx_kel01:
mov r5,#6
sjmp f_scanPSx_lanjut
f_scanPSx_kel02:
mov r5,#4
sjmp f_scanPSx_lanjut
f_scanPSx_kel03:
mov r5,#2
sjmp f_scanPSx_lanjut
f_scanPSx_lanjut:
rwspi idle ;3
cjne a,#5ah,f_scanPSx06
mov outpc,#1
f_scanPSx05:
rwspi idle ;4 -> 9 tergantung jenis pad
mov outp,a
inc outpc
djnz r5,f_scanPSx05
f_scanPSx06:
setb pinatt
delay 100
ret
f_spi:
mov r0,#8
f_spi01:
mov c,acc.0
mov pincmd,c
clr pinclk ;clock rendah
delay 5
rr a
mov c,pindata
mov acc.7,c
setb pinclk ;clock tinggi
delay 5
djnz r0,f_spi01
delay 20
ret
f_delay:
djnz r6,f_delay
ret
end