Shop OBEX P1 Docs P2 Docs Learn Events
Wireless Playstation controller not working! — Parallax Forums

Wireless Playstation controller not working!

mountaineermountaineer Posts: 27
edited 2009-11-14 16:06 in BASIC Stamp
I am using the BS2 OEM version with an external circuit to invert the signal to a the MadCatz 440 Series wireless 2.4 GHz Playstation Controller. The circuit I have works with the MadCatz 400 Series wired controller fine. I have the vibrating motor power to the Playstation controller hooked up to 7.2v unregulated(6 1.2v AAs). One would think that since the 400 series and 440 series are so close that they would use the same chipset and, thus, work the same, but, alas, that doesn't appear so. I can get the "Link" light to come on, showing the wireless dogle and controller are connected, but the Basic stamp doesn't read the controller and it appears as though it isn't even plugged in. I've connected the controller every which way I can think of but it still doesn't seem to work. I think there might be some additional timing requirements for wireless feature. What am I don't wrong? I've tried using Jon Williams' code to read the raw data and the controller appears unplugged.

Thanks in Advance, botguy


jumpin.gifidea.gif P.S. I've gotten the rumble features to be controllable In the code attached. There are two new variables in Jon Williams' code: psxVibSmall and psxVibLarge. These control the two Force Feedback motors, one with a small counterweight and one with a large one. The small one is either on or off and almost feels like a massage. It is controlled by the bit psxVibSmall. The other motor has a large counterweight and has variable speed of 0-255, with 0 being off. In order to enable force feedback you need to replace the "Get_PSX_Packet_Fast" in the Main loop with "Get_PSX_Packet_Fast_Vibrate." The code also automatically turns on analog mode at startup and locks the analog button so it can't be turned off. If you don't want this to happen comment out that part of the code in the "setup" portion of the code.

Have fun!

Comments

  • Nick_GradyNick_Grady Posts: 2
    edited 2006-09-21 22:14
    skull.gif

    I am looking for help from anyone! I have tried a few configurations for wiring up the controller and none have worked with their associated code. I settled on the schematic fron the NV101 and still no luck with the working. All I get is:

    11111111 11111111 255 255 255 255

    and on other code that is suppose to use the same wiring I get a 'no repsonse'. I have put the controller in a PS to make sure it works, and it does. I have checked my wiring many times and it looks good and traces out. I also pushed the analog button to be sure this was not it. I am using the Pelican Chameleon Wireless. I can also see the light flash on the receiver when I mes with the buttons or the joysticks. I also tried to relink the receiver to make sure this is not it. I even tried different stamps the BS2 and the BS2P, but I am at a loss.


    Nick
  • TechnoRobboTechnoRobbo Posts: 323
    edited 2006-09-22 01:51
    See attached wiring diagram - byou cn ignore 9v

    Use code below- works with BS2 and pelican or thrustmaster (BS2 not fast enough for madcatz)

    ' {$STAMP BS2}
    ' {$PBASIC 2.5}


    'i/o config


    · PsxAtt PIN 9 ' PSX joystick interface
    · PsxClk PIN 8
    · PsxCmd PIN 10
    · PsxDat PIN 11
    ·'--equates---
    · buff VAR B0
    · tmpout VAR B9
    · idx·· VAR B10.LOWNIB
    · idy·· VAR B10.HIGHNIB

    · 'inits
    · PAUSE 500 'give controller time to initialize
    · OUTPUT PsxClk
    · OUTPUT PsxAtt
    · OUTPUT PsxCmd
    · INPUT PsxDat
    · HIGH PsxAtt
    · HIGH PsxClk

    ·Again:


    ··· FOR idy = 0 TO 8
    ····· LOOKUP idy,[noparse][[/noparse]$01,$43,$00,$01,$00,$00,$00,$00,$00],tmpout 'config mode enter
    ····· GOSUB BitSend
    ··· NEXT
    ··· HIGH PsxAtt
    ··· HIGH PsxCmd
    ··· PAUSE 1


    ··· FOR idy = 0 TO 8
    ····· LOOKUP idy,[noparse][[/noparse]$01,$44,$00,$00,$03,$00,$00,$00,$00],tmpout 'set digital
    ···· GOSUB BitSend
    ··· NEXT
    ··· HIGH PsxAtt
    ··· HIGH PsxCmd
    ··· PAUSE 1


    ··· FOR idy = 0 TO 8
    ······· LOOKUP idy,[noparse][[/noparse]$01,$4D,$00,$00,$01,$ff,$ff,$ff,$ff],tmpout 'Vibration Enable
    ······· GOSUB BitSend
    ··· NEXT
    ··· HIGH PsxAtt
    ··· HIGH PsxCmd
    ··· PAUSE 1


    ··· FOR idy = 0 TO 8
    ····· LOOKUP idy,[noparse][[/noparse]$01,$4F,$00,$FF,$FF,$03,$00,$00,$00],tmpout 'Set Native Mode
    ····· GOSUB BitSend
    ··· NEXT
    ··· HIGH PsxAtt
    ··· HIGH PsxCmd
    ··· PAUSE 1


    ··· FOR idy = 0 TO 8
    ····· LOOKUP idy,[noparse][[/noparse]$01,$43,$00,$00,$5A,$5A,$5A,$5A,$5A],tmpout 'EXIT DS2 NATIVE
    ····· GOSUB BitSend
    ··· NEXT
    ··· HIGH PsxAtt
    ··· HIGH PsxCmd
    ··· PAUSE 1


    ··· FOR idy = 0 TO 8
    ····· LOOKUP idy,[noparse][[/noparse]$01,$43,$00,$00,$00,$00,$00,$00,$00],tmpout 'config mode exit
    ····· GOSUB BitSend
    ··· NEXT
    ··· HIGH PsxAtt
    ··· HIGH PsxCmd
    ··· PAUSE 1

    ··· GOSUB Get_PSX_Buttons
    ··· DEBUG HOME, "DS2Mode=", HEX2 buff(1),CR

    ··· IF (buff(1)<>$41) THEN
    ······· PAUSE 250
    ······· GOTO Again
    ··· ENDIF

    ··· PAUSE 250

    · '[noparse][[/noparse]$01,$41,$00,$5A,$5A,$5A,$5A,$5A,$5A] 'Read Mode
    · '[noparse][[/noparse]$01,$43,$00,$01,$00,$00,$00,$00,$00]'config mode enter
    · '[noparse][[/noparse]$01,$42,$00,$00,$00,$00,$00,$00,$00],'Read Data
    · '[noparse][[/noparse]$01,$44,$00,$01,$03,$00,$00,$00,$00]'set analog
    · '[noparse][[/noparse]$01,$4D,$00,$00,$01,$ff,$ff,$ff,$ff]'Vibration Enable
    · '[noparse][[/noparse]$01,$4F,$00,$FF,$FF,$03,$00,$00,$00]'Set Native Mode
    · '[noparse][[/noparse]$01,$43,$00,$00,$5A,$5A,$5A,$5A,$5A]'EXIT DS2 NATIVE
    · '[noparse][[/noparse]$01,$43,$00,$00,$00,$00,$00,$00,$00],'config mode exit
    · 'program

    · MAIN:
    · DO
    ··· GOSUB Get_PSX_Buttons

    ··· DEBUG HOME,LF,LF,LF,HEX2 buff(1),HEX2 buff(2),CR
    ··· DEBUG BIN8 buff(3)," ",BIN8 buff(4) ,CR
    ··· DEBUG DEC3 buff(5)," ",DEC3 buff(6) ,CR
    ··· DEBUG DEC3 buff(7)," ",DEC3 buff(8) ,CR
    ··· PAUSE 16
    ··· 'END
    · LOOP

    '
    [noparse][[/noparse] Subroutines ]
    · Get_PSX_Buttons:' This routineDOES NOT REQUIRE an Inverted clock
    ··· OUTPUT PsxCmd
    ··· INPUT PsxDat

    ··· HIGH PsxClk
    ··· FOR idy = 0 TO 8
    ····· LOOKUP idy,[noparse][[/noparse]$01,$42,$00,$00,$00,$00,$00,$00,$00],tmpout
    ····· GOSUB BitSend
    ····· buff(idy)=tmpout
    ··· NEXT
    ··· HIGH PsxAtt
    ··· HIGH PsxCmd
    · RETURN

    · BitSend:

    ··· FOR idx=0 TO 7
    ······ LOW PsxAtt
    ······ PsxCmd=tmpout.LOWBIT(idx)
    ······ tmpout.LOWBIT(idx)=PsxDat
    ······ PULSOUT PsxClk,1
    ··· NEXT
    · RETURN

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    Have Fun


    TR

    Post Edited (TechnoRobbo) : 9/22/2006 1:56:23 AM GMT
    788 x 549 - 47K
  • soujirosoujiro Posts: 2
    edited 2009-11-14 01:46
    Nick,

    Did this code and schematic ever work for you?

    Let me know.
    Thanks,
    Michael
    TechnoRobbo said...
    See attached wiring diagram - byou cn ignore 9v

    Use code below- works with BS2 and pelican or thrustmaster (BS2 not fast enough for madcatz)

    ' {$STAMP BS2}
    ' {$PBASIC 2.5}


    'i/o config


    PsxAtt PIN 9 ' PSX joystick interface
    PsxClk PIN 8
    PsxCmd PIN 10
    PsxDat PIN 11
    '--equates---
    buff VAR B0
    tmpout VAR B9
    idx VAR B10.LOWNIB
    idy VAR B10.HIGHNIB

    'inits
    PAUSE 500 'give controller time to initialize
    OUTPUT PsxClk
    OUTPUT PsxAtt
    OUTPUT PsxCmd
    INPUT PsxDat
    HIGH PsxAtt
    HIGH PsxClk

    Again:


    FOR idy = 0 TO 8
    LOOKUP idy,[noparse][[/noparse]$01,$43,$00,$01,$00,$00,$00,$00,$00],tmpout 'config mode enter
    GOSUB BitSend
    NEXT
    HIGH PsxAtt
    HIGH PsxCmd
    PAUSE 1


    FOR idy = 0 TO 8
    LOOKUP idy,[noparse][[/noparse]$01,$44,$00,$00,$03,$00,$00,$00,$00],tmpout 'set digital
    GOSUB BitSend
    NEXT
    HIGH PsxAtt
    HIGH PsxCmd
    PAUSE 1


    FOR idy = 0 TO 8
    LOOKUP idy,[noparse][[/noparse]$01,$4D,$00,$00,$01,$ff,$ff,$ff,$ff],tmpout 'Vibration Enable
    GOSUB BitSend
    NEXT
    HIGH PsxAtt
    HIGH PsxCmd
    PAUSE 1


    FOR idy = 0 TO 8
    LOOKUP idy,[noparse][[/noparse]$01,$4F,$00,$FF,$FF,$03,$00,$00,$00],tmpout 'Set Native Mode
    GOSUB BitSend
    NEXT
    HIGH PsxAtt
    HIGH PsxCmd
    PAUSE 1


    FOR idy = 0 TO 8
    LOOKUP idy,[noparse][[/noparse]$01,$43,$00,$00,$5A,$5A,$5A,$5A,$5A],tmpout 'EXIT DS2 NATIVE
    GOSUB BitSend
    NEXT
    HIGH PsxAtt
    HIGH PsxCmd
    PAUSE 1


    FOR idy = 0 TO 8
    LOOKUP idy,[noparse][[/noparse]$01,$43,$00,$00,$00,$00,$00,$00,$00],tmpout 'config mode exit
    GOSUB BitSend
    NEXT
    HIGH PsxAtt
    HIGH PsxCmd
    PAUSE 1

    GOSUB Get_PSX_Buttons
    DEBUG HOME, "DS2Mode=", HEX2 buff(1),CR

    IF (buff(1)<>$41) THEN
    PAUSE 250
    GOTO Again
    ENDIF

    PAUSE 250

    '[noparse][[/noparse]$01,$41,$00,$5A,$5A,$5A,$5A,$5A,$5A] 'Read Mode
    '[noparse][[/noparse]$01,$43,$00,$01,$00,$00,$00,$00,$00]'config mode enter
    '[noparse][[/noparse]$01,$42,$00,$00,$00,$00,$00,$00,$00],'Read Data
    '[noparse][[/noparse]$01,$44,$00,$01,$03,$00,$00,$00,$00]'set analog
    '[noparse][[/noparse]$01,$4D,$00,$00,$01,$ff,$ff,$ff,$ff]'Vibration Enable
    '[noparse][[/noparse]$01,$4F,$00,$FF,$FF,$03,$00,$00,$00]'Set Native Mode
    '[noparse][[/noparse]$01,$43,$00,$00,$5A,$5A,$5A,$5A,$5A]'EXIT DS2 NATIVE
    '[noparse][[/noparse]$01,$43,$00,$00,$00,$00,$00,$00,$00],'config mode exit
    'program

    MAIN:
    DO
    GOSUB Get_PSX_Buttons

    DEBUG HOME,LF,LF,LF,HEX2 buff(1),HEX2 buff(2),CR
    DEBUG BIN8 buff(3)," ",BIN8 buff(4) ,CR
    DEBUG DEC3 buff(5)," ",DEC3 buff(6) ,CR
    DEBUG DEC3 buff(7)," ",DEC3 buff(8) ,CR
    PAUSE 16
    'END
    LOOP

    '
    [noparse][[/noparse] Subroutines ]
    Get_PSX_Buttons:' This routineDOES NOT REQUIRE an Inverted clock
    OUTPUT PsxCmd
    INPUT PsxDat

    HIGH PsxClk
    FOR idy = 0 TO 8
    LOOKUP idy,[noparse][[/noparse]$01,$42,$00,$00,$00,$00,$00,$00,$00],tmpout
    GOSUB BitSend
    buff(idy)=tmpout
    NEXT
    HIGH PsxAtt
    HIGH PsxCmd
    RETURN

    BitSend:

    FOR idx=0 TO 7
    LOW PsxAtt
    PsxCmd=tmpout.LOWBIT(idx)
    tmpout.LOWBIT(idx)=PsxDat
    PULSOUT PsxClk,1
    NEXT
    RETURN
  • soujirosoujiro Posts: 2
    edited 2009-11-14 16:06
    Do this also work for the original Sony PS2 controller? Thanks.
    TechnoRobbo said...
    See attached wiring diagram - byou cn ignore 9v

    Use code below- works with BS2 and pelican or thrustmaster (BS2 not fast enough for madcatz)

    ' {$STAMP BS2}
    ' {$PBASIC 2.5}


    'i/o config


    PsxAtt PIN 9 ' PSX joystick interface
    PsxClk PIN 8
    PsxCmd PIN 10
    PsxDat PIN 11
    '--equates---
    buff VAR B0
    tmpout VAR B9
    idx VAR B10.LOWNIB
    idy VAR B10.HIGHNIB

    'inits
    PAUSE 500 'give controller time to initialize
    OUTPUT PsxClk
    OUTPUT PsxAtt
    OUTPUT PsxCmd
    INPUT PsxDat
    HIGH PsxAtt
    HIGH PsxClk

    Again:


    FOR idy = 0 TO 8
    LOOKUP idy,[noparse][[/noparse]$01,$43,$00,$01,$00,$00,$00,$00,$00],tmpout 'config mode enter
    GOSUB BitSend
    NEXT
    HIGH PsxAtt
    HIGH PsxCmd
    PAUSE 1


    FOR idy = 0 TO 8
    LOOKUP idy,[noparse][[/noparse]$01,$44,$00,$00,$03,$00,$00,$00,$00],tmpout 'set digital
    GOSUB BitSend
    NEXT
    HIGH PsxAtt
    HIGH PsxCmd
    PAUSE 1


    FOR idy = 0 TO 8
    LOOKUP idy,[noparse][[/noparse]$01,$4D,$00,$00,$01,$ff,$ff,$ff,$ff],tmpout 'Vibration Enable
    GOSUB BitSend
    NEXT
    HIGH PsxAtt
    HIGH PsxCmd
    PAUSE 1


    FOR idy = 0 TO 8
    LOOKUP idy,[noparse][[/noparse]$01,$4F,$00,$FF,$FF,$03,$00,$00,$00],tmpout 'Set Native Mode
    GOSUB BitSend
    NEXT
    HIGH PsxAtt
    HIGH PsxCmd
    PAUSE 1


    FOR idy = 0 TO 8
    LOOKUP idy,[noparse][[/noparse]$01,$43,$00,$00,$5A,$5A,$5A,$5A,$5A],tmpout 'EXIT DS2 NATIVE
    GOSUB BitSend
    NEXT
    HIGH PsxAtt
    HIGH PsxCmd
    PAUSE 1


    FOR idy = 0 TO 8
    LOOKUP idy,[noparse][[/noparse]$01,$43,$00,$00,$00,$00,$00,$00,$00],tmpout 'config mode exit
    GOSUB BitSend
    NEXT
    HIGH PsxAtt
    HIGH PsxCmd
    PAUSE 1

    GOSUB Get_PSX_Buttons
    DEBUG HOME, "DS2Mode=", HEX2 buff(1),CR

    IF (buff(1)<>$41) THEN
    PAUSE 250
    GOTO Again
    ENDIF

    PAUSE 250

    '[noparse][[/noparse]$01,$41,$00,$5A,$5A,$5A,$5A,$5A,$5A] 'Read Mode
    '[noparse][[/noparse]$01,$43,$00,$01,$00,$00,$00,$00,$00]'config mode enter
    '[noparse][[/noparse]$01,$42,$00,$00,$00,$00,$00,$00,$00],'Read Data
    '[noparse][[/noparse]$01,$44,$00,$01,$03,$00,$00,$00,$00]'set analog
    '[noparse][[/noparse]$01,$4D,$00,$00,$01,$ff,$ff,$ff,$ff]'Vibration Enable
    '[noparse][[/noparse]$01,$4F,$00,$FF,$FF,$03,$00,$00,$00]'Set Native Mode
    '[noparse][[/noparse]$01,$43,$00,$00,$5A,$5A,$5A,$5A,$5A]'EXIT DS2 NATIVE
    '[noparse][[/noparse]$01,$43,$00,$00,$00,$00,$00,$00,$00],'config mode exit
    'program

    MAIN:
    DO
    GOSUB Get_PSX_Buttons

    DEBUG HOME,LF,LF,LF,HEX2 buff(1),HEX2 buff(2),CR
    DEBUG BIN8 buff(3)," ",BIN8 buff(4) ,CR
    DEBUG DEC3 buff(5)," ",DEC3 buff(6) ,CR
    DEBUG DEC3 buff(7)," ",DEC3 buff(8) ,CR
    PAUSE 16
    'END
    LOOP

    '
    [noparse][[/noparse] Subroutines ]
    Get_PSX_Buttons:' This routineDOES NOT REQUIRE an Inverted clock
    OUTPUT PsxCmd
    INPUT PsxDat

    HIGH PsxClk
    FOR idy = 0 TO 8
    LOOKUP idy,[noparse][[/noparse]$01,$42,$00,$00,$00,$00,$00,$00,$00],tmpout
    GOSUB BitSend
    buff(idy)=tmpout
    NEXT
    HIGH PsxAtt
    HIGH PsxCmd
    RETURN

    BitSend:

    FOR idx=0 TO 7
    LOW PsxAtt
    PsxCmd=tmpout.LOWBIT(idx)
    tmpout.LOWBIT(idx)=PsxDat
    PULSOUT PsxClk,1
    NEXT
    RETURN
Sign In or Register to comment.