• Welcome to TechPowerUp Forums, Guest! Please check out our forum guidelines for info related to our community.

Adding PSP Bluetooth controller support

Joined
May 27, 2008
Messages
3,622 (0.70/day)
System Name Ultra 64
Processor NEC VR4300 (MIPS R4300i)
Motherboard proprietary design
Cooling Fanless aircooled
Memory 4.5MB 250 MHz RDRAM
Video Card(s) 62.5 MHz Reality Coprocessor
Storage 32 - 512 Mbit ROM Cartridge
Display(s) 720x576
Case Clear Blue Funtastic
Audio Device(s) 16-bit CD quality
Power Supply proprietary design
Mouse N64 mouse for use with N64DD
Keyboard N64 keyboard for use with N64DD
Firstly I know this isn't really the forum for this kind of project. However I'm not a member of any other forums more related to this kind of stuff and from memory (been a while since I've engaged with TPU admittedly) there are members here who are into this kind of thing.

Plus I need assistance and can't think of where else to ask, but its mostly to share my project. (well probably 70/30 to the assistance side but...)

So the project, I'm using an Arduino nano 33 IOT to communicate with Bluetooth enabled controllers and then hijack the buttons on the PSP. Initially ill just be doing the buttons then once that is working focus on the analog stick, most likely using a digital potentiometer. This will be going into a PSP 2003 model as that has tv out functionality which would give me a nice Nintendo Switch like UX. Maybe even attempt to 3D print a little dock or something, but that's far into the future.

1649148659667.png

Space is at a premium inside these things so ill be dropping the UMD drive and mounting it in that space. The end goal is to hopefully design a daughter board to solder the Arduino to using the castellated holes to mount it flush. Then mount that using the existing UMD fixing points. Having a play designing very basic PCB's in KiCad but that's a very steep learning curve in and of itself.

I'm using the very impressive library Bluepad 32 to actually communicate with the controllers, currently got a hello world project running and communicating with a Nintendo Wii controller and num-chuk (ill share that shortly). It will be interesting to see if I can access some of the gyroscope functionality that the Wii and I think some newer PlayStation controllers have, but lets get a MVP out the door first!

My code and any PCB designs I do create will shared on my GitHub. Not created a repo yet but when I do ill share it here.

More actually interesting stuff to come very soon.
 
Joined
May 27, 2008
Messages
3,622 (0.70/day)
System Name Ultra 64
Processor NEC VR4300 (MIPS R4300i)
Motherboard proprietary design
Cooling Fanless aircooled
Memory 4.5MB 250 MHz RDRAM
Video Card(s) 62.5 MHz Reality Coprocessor
Storage 32 - 512 Mbit ROM Cartridge
Display(s) 720x576
Case Clear Blue Funtastic
Audio Device(s) 16-bit CD quality
Power Supply proprietary design
Mouse N64 mouse for use with N64DD
Keyboard N64 keyboard for use with N64DD
Upon opening the PSP it shows just how compact the thing is.

overview.jpeg

I was expecting to solder directly to the PCB somewhere. On older consoles I'm used to having test points or via's accessible to solder to. Not the case here.

The PSP's inputs are connected via three different FFC's. One for the DPad and left shoulder button, one for the bottom buttons and one for the right buttons and right shoulder button. This last one includes the power switch and LED functionality.

PCB.jpeg

This means connecting to these will involve using FFC's. Luckily I have a spare breakout board and some FFC's I can chop down to the right size.

FFC Breakout.jpeg

This will get me by. I can do a hello world just triggering a single button with this. In fact i should be able to get all the buttons of one of the three connectors working with this. However i will need two more when i come to try and control all the buttons at the same time.

Interestingly the PSP's buttons are setup differently to how I'm used to. Traditionally you have a Flexible PCB with carbon pads on. The button has a carbon pad on the bottom, when pressed it connects the circuit.

1649154298572.png

Trouble with this is the contacts get dirty over time and you end with with buttons that either don't work or you need to press really hard.

However the PSP these are all fully sealed units. There appears to be two layers, I assume with an insulator between the two and a domed section below the button keeping them separate. When the button is pressed it collapses this done and causes contact. When released the dome pushes back up and breaks the circuit.

1649160290054.png

Doesn't really affect the project but it was interesting.

The various FFC connections will cause a little headache further down the line. Ideally I will have both my Arduino and the original buttons hooked up to each connector. It's going to be slightly tricky to find a way to connect both and have it still fit within the case.

The buttons seem to sink to a common ground to trigger a button press. I *should* be able to manage this on the Arduino side my marking the pin as an input when i which to release the button and marking it as an output and setting it to low when i wish to trigger a button press. Using the Uno i could do this quite easily by setting the various `DDRX` registers. However the nano IOT uses a different processor which doesn't provide the same registers. I'm a little out my depth with such low level stuff so i will have to stick with the higher level `pinMode` and `digitalWrite` methods for now.
 
Joined
May 27, 2008
Messages
3,622 (0.70/day)
System Name Ultra 64
Processor NEC VR4300 (MIPS R4300i)
Motherboard proprietary design
Cooling Fanless aircooled
Memory 4.5MB 250 MHz RDRAM
Video Card(s) 62.5 MHz Reality Coprocessor
Storage 32 - 512 Mbit ROM Cartridge
Display(s) 720x576
Case Clear Blue Funtastic
Audio Device(s) 16-bit CD quality
Power Supply proprietary design
Mouse N64 mouse for use with N64DD
Keyboard N64 keyboard for use with N64DD
Joined
May 27, 2008
Messages
3,622 (0.70/day)
System Name Ultra 64
Processor NEC VR4300 (MIPS R4300i)
Motherboard proprietary design
Cooling Fanless aircooled
Memory 4.5MB 250 MHz RDRAM
Video Card(s) 62.5 MHz Reality Coprocessor
Storage 32 - 512 Mbit ROM Cartridge
Display(s) 720x576
Case Clear Blue Funtastic
Audio Device(s) 16-bit CD quality
Power Supply proprietary design
Mouse N64 mouse for use with N64DD
Keyboard N64 keyboard for use with N64DD
Not made a huge amount of progress, need to wait for the next pay day.

However I have finished mapping all the PSP buttons to their corresponding buttons on the controller.

Commit is here if interested: https://github.com/ste2425/PSP-Bluetooth-Controller/commit/620c6f9a6f8bd0b1b4dd4f34d9f630d7971d8cd1

I thought i could do it on the cheap and use a single 30 pin FFC breakout and connect multiple smaller FFC's to it. I also thought i could get a single 30 pin FFC and chop it up into the individual 10 pin cables needed. Yea not a chance. Far too fiddly and just a PITA seating the connectors properly.

So going to invest in the correct pin cables and more breakout boards to each connector has its own breakout.

I have tested controlling each set of buttons individually on the PSP (left side, right side and bottom) but need to wait before i can test them all together.

Here's a video of it working however.

 
Joined
May 27, 2008
Messages
3,622 (0.70/day)
System Name Ultra 64
Processor NEC VR4300 (MIPS R4300i)
Motherboard proprietary design
Cooling Fanless aircooled
Memory 4.5MB 250 MHz RDRAM
Video Card(s) 62.5 MHz Reality Coprocessor
Storage 32 - 512 Mbit ROM Cartridge
Display(s) 720x576
Case Clear Blue Funtastic
Audio Device(s) 16-bit CD quality
Power Supply proprietary design
Mouse N64 mouse for use with N64DD
Keyboard N64 keyboard for use with N64DD
Been a while since i posted any updates.

Been working on it but making slow progress, only get an hour or so every other evening managing it around child care.

Got all the face buttons hooked up and working now, and working with other controllers. More traditional layouts, like the Xbox, do feel much better than the Wii.


However there is still the thumb stick to sort. Finally got a MCP4251 digital potentiometer (ridiculously expensive) and hooked it up. Can read varying resistences with a multi meter so tonights task is to connect it to the PSP and see what happens.

Annoyingly they work on different ranges, the digi pot is 0 - 255 whilst the xbox controler is -511 - 512. Not difficult to scale but i suppose there will be some tweaking going on to get that scaling feeling right when actually playing.
 
Joined
May 27, 2008
Messages
3,622 (0.70/day)
System Name Ultra 64
Processor NEC VR4300 (MIPS R4300i)
Motherboard proprietary design
Cooling Fanless aircooled
Memory 4.5MB 250 MHz RDRAM
Video Card(s) 62.5 MHz Reality Coprocessor
Storage 32 - 512 Mbit ROM Cartridge
Display(s) 720x576
Case Clear Blue Funtastic
Audio Device(s) 16-bit CD quality
Power Supply proprietary design
Mouse N64 mouse for use with N64DD
Keyboard N64 keyboard for use with N64DD
So last night made some good progress. Can control the analog stick.

Got some more work to do around actual values, but it is controlling it!


Like i say the values are a bit wonky, the PSP thinks the stick has reached its end whilst the actual stick is about a 3rd away. This is only in one direction, the other is fine.

The controllers stick is read from a range of -511 - 512 whils the digital potentiometer is 10k controlled by steps in the range of 0 - 256. If you want 5k you dont say 'I want 5k pal' you set the step value of around 128.

Also the directions are inverted, up is down and down is up. However all that stuff can be corrected in software.

Connecting it to the PSP was a PITA. On the 2000 its a compression fit, the stick just butts up against the motherboard. I figured for development i could just solder to them. However it turns out the nice big pads are not actual nice big pags. But small metal squares soldered by the factory to two tiny pads either side of them. As soon as my iron went near they lifted.

Luckily with lots of flux and the wonders of surface tension managed to solder some jumper wires to them. I think the 3000 uses a ribbon cable, may look into that when i move on from protoboard.

pins.jpg


On a side note not too sure how else to share videos hence using Twitter links, sorry for the poor compression.
 
Last edited:
Joined
May 27, 2008
Messages
3,622 (0.70/day)
System Name Ultra 64
Processor NEC VR4300 (MIPS R4300i)
Motherboard proprietary design
Cooling Fanless aircooled
Memory 4.5MB 250 MHz RDRAM
Video Card(s) 62.5 MHz Reality Coprocessor
Storage 32 - 512 Mbit ROM Cartridge
Display(s) 720x576
Case Clear Blue Funtastic
Audio Device(s) 16-bit CD quality
Power Supply proprietary design
Mouse N64 mouse for use with N64DD
Keyboard N64 keyboard for use with N64DD
MAde some cracking progress.

i had control over the thumbstick previously, but it wasn't behaving correctly.

The Y-axis seemed to work however the X-axis only operated within its last 3rd of range. Even worse the Y-axis seemed to influence it.

I spent days (which for me around child care is weeks!) trying to figure it out.

Turns out i had the pinout wrong, i mixed +v and X-axis signal pins of the potentiometer. Only found out when i soldered jumper wires to the stick itself and dissconnected one at a time. I knew which was ground thanks to the multi meter, so discconnected one at a time. If both axis die then that pin is power, if a single axis died then that line is signal for that axis.

Got there in the end!


There does seem to be a little lag after watching that video back. When playing with it i never noticed any. I'll have to investigate. Most actions with the left stick are the les precice stuff like movement. I'm spamming the serial port with logs and got a few delays and things in there. The code can be optimised but at this stage the hardware is complete.
 
Joined
May 27, 2008
Messages
3,622 (0.70/day)
System Name Ultra 64
Processor NEC VR4300 (MIPS R4300i)
Motherboard proprietary design
Cooling Fanless aircooled
Memory 4.5MB 250 MHz RDRAM
Video Card(s) 62.5 MHz Reality Coprocessor
Storage 32 - 512 Mbit ROM Cartridge
Display(s) 720x576
Case Clear Blue Funtastic
Audio Device(s) 16-bit CD quality
Power Supply proprietary design
Mouse N64 mouse for use with N64DD
Keyboard N64 keyboard for use with N64DD
Made some really good progres the last few days.

The code is pretty much done for direct mappings. The analog stick fully mapped.

The digital pot goes from a range of 0 - 257. The PSP internally mappes to the same range for each axis. However interestingly both extremeties are maxed on the PSP when the digital potentiometer is at 50 and 200. It still feels great to play. Not too sure if my jumpers are causing issues or iv'e buggered the digi pot but it works so...

The link to my GitHub is in the OP if anyone is interested.

Other major milestone is moving on from protoboard.

proto.jpeg


It worked but was big and ugly. Decided to try my hand at designing a PCB. Never done it before. After a few days i created something im quite pleased with.

Lots of improvements that could be made, and its not exactly complicated, but im pleased with it!

Currently being made so should have them back in a week or so.

pcb1.jpeg
pcb2.jpeg


Whilst waiting on that working on a mappings feature.

Currently i have the buttons directly mapped to their equivilent Xbox controller butons.

default-mappings.png

But was thinking there are two more mappings i will want, one for FPS games where the right Triangle, Square etc buttons are used for movement.

FPS-mapping.png

and one for PS1 games where, by default, the left stick does R2 and L2.
ps1-mappings.png

So thats where we are at. Excited to get these PCB's in and see if they work.

This is all for a consolized PSP at this stage. If its all working ill work on reducing the PCB down more and fitting it inside the console itself.

Also left the Arduinos RX and TX pins accessible as ive just seen the PSP has a serial port. Its how it communicated with the multi media remote.
Looking at the PSP SDK https://github.com/pspdev/pspsdk there are examples on writing to this serial port. Would be cool if i could control the Arduino from within the PSP at a software level.

Maybe a plugin that can toggle mappings via a gui would be cool, or even create custom mappings on the fly.
 

phill

Moderator
Staff member
Joined
Jun 8, 2011
Messages
12,579 (3.12/day)
Location
Somerset, UK
System Name Not so complete or overkill
Processor Ryzen 3900X
Motherboard Asus Crosshair 8 Hero (Non Wi-Fi)
Cooling Air :(
Memory Patriot 3200MHz 64GB
Video Card(s) 2 x EVGA GTX 1080 Ti SC Black Edition
Storage 1 250GB Crucial SSD for OS/Programs, 2 500GB Crucial SSD for Steam and Epic stores
Display(s) 3 x 23" LG IPS panels (can't remember model!!)
Case 10mm thick MDF on plastic risers.. It's kinda a case??
Audio Device(s) Onboard
Power Supply EVGA P2 1200w
Mouse Corsair thingy
Keyboard Logitec K120......
Software Windows 10
Benchmark Scores I've actually never benched it!! Too busy with WCG and FAH and not gaming!! :( :(
Love it!! Amazing work!! Subbed to see the outcome!!
 
Joined
May 27, 2008
Messages
3,622 (0.70/day)
System Name Ultra 64
Processor NEC VR4300 (MIPS R4300i)
Motherboard proprietary design
Cooling Fanless aircooled
Memory 4.5MB 250 MHz RDRAM
Video Card(s) 62.5 MHz Reality Coprocessor
Storage 32 - 512 Mbit ROM Cartridge
Display(s) 720x576
Case Clear Blue Funtastic
Audio Device(s) 16-bit CD quality
Power Supply proprietary design
Mouse N64 mouse for use with N64DD
Keyboard N64 keyboard for use with N64DD
Love it!! Amazing work!! Subbed to see the outcome!!
Thanks :)

Made good progress since last post. Now have configurable mappings. (I say configurable it requires re-programming the arduino) but any controller button can be mapped to any PSP button.

That includes the analog stick, any cotnroller button can trigger the analog stick (good for PS1 games to handle L2/R2 etc) but also the controllers left or right analog stick can be mapped to the PSP's analog stick.

PCB's have just cleared customs so should be here soon.


Got a PS4 controller on way so i can test setting the onboard RGB LED, can also set player indicator LED (like on the Wii controller) so ill be using them to indicate which mapping is active. For XBox controllers you will have to settle with just a rumble when changing mappings.

Could do with a chat with anyone who has experience with the PSP SDK https://github.com/pspdev/pspsdk

Want to work on integrating the Arduino with the PSP on a software level using the PSP's Serial Port.
 

Mindweaver

Moderato®™
Staff member
Joined
Apr 16, 2009
Messages
8,016 (1.66/day)
Location
Charleston, SC
System Name Tower of Power / Sechs
Processor i7 12700K / i7 5820k @ 4.5ghz
Motherboard ASUS ROG Strix Z690-A Gaming WiFi D4 / X99S GAMING 7
Cooling CM MasterLiquid ML360 Mirror ARGB Close-Loop AIO / CORSAIR Hydro Series H100i Extreme
Memory CORSAIR Vengeance LPX 32GB (2 x 16GB) DDR4 3600 / G.Skill DDR4 2800 16GB 4x4GB
Video Card(s) EVGA RTX 2070 Black / PNY Quadro K2000
Storage 2x Samsung 980 1TB M.2, 2x Crucial 1TB SSD / Samsung 870 PRO 500GB M.2
Display(s) Samsung 32" Odyssy G5 Gaming 144hz 1440p, ViewSonic 32" 72hz 1440p / 2x ViewSonic 32" 72hz 1440p
Case Phantek "400A" / Phanteks “Enthoo Pro series”
Audio Device(s) Realtek ALC4080 / Azalia Realtek ALC1150
Power Supply Corsair RM Series RM750 / Corsair CXM CX600M
Mouse Razer DeathAdder / Razer DeathAdder Chroma
Keyboard Razer Blackwidow Chroma / Razer BlackWidow Ultimate
VR HMD Quest 2 + Rift S + HTC Vive + DK1
Software Windows 11 Pro x64 / Windows 10 Pro x64
Benchmark Scores Yes
This is very awesome, great job! I just found my 2x PSP2000 in an old storage box. I've been debating refurbing them with new shells from Aliexpress. Maybe buy some new screens and sticks as well. @ste2425 I was thinking about adding bluetooth to the audio jack to connect my galaxy+ buds but nothing to this extent. Just a cheap one to hang off the back.
 
Joined
May 27, 2008
Messages
3,622 (0.70/day)
System Name Ultra 64
Processor NEC VR4300 (MIPS R4300i)
Motherboard proprietary design
Cooling Fanless aircooled
Memory 4.5MB 250 MHz RDRAM
Video Card(s) 62.5 MHz Reality Coprocessor
Storage 32 - 512 Mbit ROM Cartridge
Display(s) 720x576
Case Clear Blue Funtastic
Audio Device(s) 16-bit CD quality
Power Supply proprietary design
Mouse N64 mouse for use with N64DD
Keyboard N64 keyboard for use with N64DD
This is very awesome, great job! I just found my 2x PSP2000 in an old storage box. I've been debating refurbing them with new shells from Aliexpress. Maybe buy some new screens and sticks as well. @ste2425 I was thinking about adding bluetooth to the audio jack to connect my galaxy+ buds but nothing to this extent. Just a cheap one to hang off the back.
Thanks.
Thanks sounds like a fun project. I remember having a little RF adapter when I was a kid. Maybe you could find one and retro fit Bluetooth in the case?

PCB’s arrived and assembled.
I made a couple of mistakes. Firstly one of the ffc connectors I wired backwards. So just flipped the connector.
I know I could have bought reversed cables but that would mean waiting for deliveries and I’m impatient!

not a bad Father’s Day!
FFE2C368-638C-4617-A497-54E094F04775.jpeg
011BAEB7-194A-4580-8D15-A94E9EA98C0F.jpeg
CB35A03A-BA0B-4CFD-9A53-634D2644F484.jpeg
 
Top