2 Weeks ago I came across a PS1 controller bluetooth mod by /u/Dementat_Deus on Reddit. The mod was very clean and I knew right away I wanted to give it a go too. In fact I ordered the parts 15 minutes after I read the post. There is one major issue with this build though that I wanted to address. The Bluefruit EZ-Key Bluetooth module used in this build only has 12 inputs for buttons, but the PS1 controller has 14 buttons. Because of that 2 of the buttons are not working. /u/Dementat_Deus used those buttons as power switch and to trigger pairing mode. The big advantage of that is that you don’t need to add additional buttons for pairing and power and get a very clean look. In my build I wanted to be able to use all the buttons though because all of the games I like to play utilize the full set of buttons.
I went ahead and the final result with 2 additional buttons looks like this:
The full BOM for this implementation:
- PS1 Controller
- Bluefruit EZ-Key
- Adafruit Lipo Micro USB Charger
- 500mA 3.7V Lipo Battery
- Toggle Switch
- Momentary Switch
- ATTiny 85
- 2 x 10k 1206 resistors
- 8 pin DIP socket (optional)
- old floppy drive cable
Besides wiring the buttons of the controller directly to the Bluefruit EZ-Key, the module also supports receiving button presses via serial from an external micro-controller. This makes it possible to add support for the 2 remaining buttons. What I ended up doing was to hook up “Start” and “Select” to an ATTiny85, which then in turn uses a software serial implementation (the ATTiny85 doesn’t support UART natively) to send the button presses to the Bluefruit EZ-Key.
You can see the full schematic here:
The ATTiny85 in all its tiny glory:
The firmware for the AVR is available on GitHub. The AVR is basically in a permanent sleep mode and level changes on Pin 3 & 4 trigger interrupts that briefly wake the AVR, send the button press to the EZ-Key and go back to sleep again. I measured the power draw of the AVR in sleep mode and it was around 0.1uA (with peaks of 5mA, when transmitting). I decided to use the AVR for “Start” and “Select” because these are the least utilized buttons and so the AVR would hardly ever wake up. Initially I wasn’t sure if there would be some kind of lag, for buttons that are not hooked up directly to the EZ-Key, which would have been the least problematic with those 2 keys. This is not the case though. According to the datasheet the EZ-Key draws 25-27mA, so the entire setup should draw less than 30mA, which should give us 16 hours of usage on a single charge. Enough to cover a long distance flight for sure.
I started the build with removing the original cable, the cable plug and the capacitor from the original board. These parts are not needed anymore and just take up valuable space. Even though the additional parts are fairly small, at the end they pretty much filled up the entire free space in the controller. After that I epoxied the charger circuit and the power switch to the board. I had to remove a bit of plastic to create an opening for the USB socket. I also had to dremel off quite a bit of the charger circuit PCB to fit it next to the power switch. Next I drilled some more holes into the controller PCB to make it possible to fit the ribbon cable through. I made the mistake to make the longer of the 2 holes too big and separated the left and right ground plane that way. I had to solder on an additional wire to fix the mistake. Not a big deal but something to keep in mind when attempting this build.
Once this was completed I mapped out where to connect the wires on the EZ-key and the ATTiny85 to the PCB. The next image shows the solder joints (yellow), the pin on the EZ-Key and the Attiny85 (red) as well as how to route the wires from the back side of the PCB (blue). It is important to wire the cables in a way that they don’t interfere with the button pads.
Next I added the button for pairing mode and removed some plastic from the casing to make sure the case still closes. With this build its not necessary to remove much of the plastic. I marked the sections where I removed some in the next picture (blue). To remove the plastic I used a Dremel and an Exacto knife. I think with a bit patience it should be possible to do it all with just a knife. I accidentally removed more plastic than needed and marked these areas in the image in red.
This is how everything looks hooked up and connected:
And the final result after assembly:
I tested the controller with ePSXe, My OldBoy! and on my PC for about 3 hours so far. It works flawlessly! There is no lag, and all buttons work fine in all games. Because the Bluefruit EZ-Key connects as a regular keyboard it should work fine with any Emulator/Game that supports regular keyboards and allows to map the buttons to any key. On my tablet when the controller is connected the regular on screen keyboard gets disabled which prevents you from typing anything. This hasn’t been a problem so far.
A quick Mario demo: