Hi. I'm looking for an example of how to hook up and program a lynxmotion PS2 controller without using the BotBoard. I have a Universal Development Board for the Atom Pro40 I am using for a Dev board rather than a BotBoard, but all the examples I can find to program the PS2 controller are for the BotBoards.
My DevBoard
http://www.basicmicro.com/USB-Universal ... _p_69.htmlNote: I've already tried using the code from the BotBoard I and II examples and just plugging the controller straight to the proper ports on the Atom Pro, but I couldn't get it to work. The code I'm using is shown below, and is from an example I found online. When it runs, it outputs all 0's in the terminal. I'm pretty sure the receiver and controller are powered properly. When it first turns on, the green light is solid and the red light is blinking on the receiver. Then when I turn the controller on, the red light on the receiver goes solid. But like I said, I'm still having trouble getting the controller to output correctly, and I didn't know if it was because the code I was using was for a BotBoard II or something. My connections are to the proper pins, including a 10k pullup resistor on the DAT line. Any ideas on what the problem could be? Thanks!
Code:
DAT con P4
CMD con P5
SEL con P6
CLK con P7
;-----------------------------
index var byte
temp var byte(19)
mode var byte
Small_Motor var byte
Large_Motor var byte
;PS2Init
high CLK
low SEL
shiftout CMD,CLK,FASTLSBPRE,[$1\8,$43\8,$0\8,$1\8,$0\8] ;CONFIG_MODE_ENTER
high SEL
pause 1
low SEL
shiftout CMD,CLK,FASTLSBPRE,[$01\8,$44\8,$00\8,$01\8,$03\8,$00\8,$00\8,$00\8,$00\8] ;SET_MODE_AND_LOCK
high SEL
pause 100
low SEL
shiftout CMD,CLK,FASTLSBPRE,[$01\8,$4F\8,$00\8,$FF\8,$FF\8,$03\8,$00\8,$00\8,$00\8] ;SET_DS2_NATIVE_MODE
high SEL
pause 1
low SEL
shiftout CMD,CLK,FASTLSBPRE,[$01\8,$4D\8,$00\8,$00\8,$01\8,$FF\8,$FF\8,$FF\8,$FF\8] ;VIBRATION_ENABLE
high SEL
pause 1
low SEL
shiftout CMD,CLK,FASTLSBPRE,[$01\8,$43\8,$00\8,$00\8,$5A\8,$5A\8,$5A\8,$5A\8,$5A\8] ;CONFIG_MODE_EXIT_DS2_NATIVE
high SEL
pause 1
low SEL
shiftout CMD,CLK,FASTLSBPRE,[$01\8,$43\8,$00\8,$00\8,$00\8,$00\8,$00\8,$00\8,$00\8] ;CONFIG_MODE_EXIT
high SEL
pause 1
main
;-----------PS2 Mode----------
low SEL
; asking "mode" to PS2 controller
shiftout CMD,CLK,FASTLSBPRE,[$1\8]
; reading "mode" from PS2 controller
; 73(hex) is dualshock1 (digital buttons)
; 79(hex) is dualshock2 (analog buttons)
shiftin DAT,CLK,FASTLSBPOST,[mode\8]
high SEL
;-----------------------------
pause 1
;-----------PS2 Data----------
low SEL
; asking data to PS2 controller
shiftout CMD,CLK,FASTLSBPRE,[$1\8,$42\8]
; reading data from controller
; (don't use a "for-next" loop, it's too slow to read PS2 data)
shiftin DAT,CLK,FASTLSBPOST,[temp(0)\8,temp(1)\8,temp(2)\8,temp(3)\8,temp(4)\8,temp(5)\8,temp(6)\8,temp(7)\8,temp(8)\8, |
temp(9)\8,temp(10)\8,temp(11)\8,temp(12)\8,temp(13)\8,temp(14)\8,temp(15)\8,temp(16)\8,temp(17)\8,temp(18)\8]
high SEL
;-----------------------------
pause 1
;-----------PS2 Vibration motors----------
Small_Motor = 1 - Temp(1).bit5 ; Numeric right arrow button (Small Motor on/off)
Large_Motor = Temp(8) ; Analog left arrow button (Large Motor speed)
low SEL
; asking data to PS2 controller (again)
; sending at the same time the vibration motors speed to perform
; (using the previously read analog buttons position ( <- : large motor, -> : small motor )
; the more you press on these buttons, the more the corresponding motor vibrates fast
; some wireless PS2 controllers react only to the large motor command and some have no motor at all.
shiftout CMD,CLK,FASTLSBPRE,[$1\8,$42\8,$0\8,Small_Motor\8,Large_Motor\8]
; we don't care about reading the data from the controller here.
; so, why not use this to read PS2 data the first time? because it's not working:
; as the PS2 controller is starting to send data just after receiving the
; "shiftout CMD,CLK,FASTLSBPRE,[$1\8,$42\8..."<------here
; and as we are sending after that some data for motors "... ,$0\8,temp(7)\8,temp(8)\8]"
; it's now too late to read all the data from the PS2 controller
; because there's already some bytes sent by it and lost (no buffer here).
high SEL
;-----------------------------
;-----------Basic Micro IDE terminal----------
; sending carriage return (CR = 13) and the PS2 mode(hex) to the PC
;serout S_OUT,i57600,[13, hex2 mode\2] ; Basic Micro IDE <= 02.2.1.1
;serout S_OUT,I8N1_57600,[13, hex2 mode\2] ; Basic Micro IDE <= 05.3.0.0
serout S_OUT,i57600,[13, hex2 mode\2] ; Basic Micro Pro IDE <= 08.0.1.7
for index = 1 to 18 ; temp(0) contains a dummy variable so we don't send it to the PC
; sending all the data to the PC
;serout S_OUT,i57600,[" ", dec3 temp(index)\3] ; Basic Micro IDE <= 02.2.1.1
;serout S_OUT,I8N1_57600,[" ", dec3 temp(index)\3] ; Basic Micro IDE <= 05.3.0.0
serout S_OUT,i57600,[" ", dec3 temp(index)\3] ; Basic Micro Pro IDE <= 08.0.1.7
next
;-----------------------------
goto main