Legend
.
So I'm in the process of designing a PS2 portable (worklog coming soon enough) and I was stuck deliberating which type of controller I wanted to use in it. Upon doing some research I found a few good options:
- Original Dualshock 2
- Aftermarket Controllers
- PS2+
- Those little boards with the epoxy chip on them that a user here sells on aliexpress
After scouring some worklogs, I first realized that there is not nearly enough PS2 worklogs lol, but the conclusion I came to was this:
The first thing I looked at was the PS2+ and it was the first runner up, however I remember there being talk back in the day of it not working with some games and it was never made clear (or maybe I didn't look hard enough) that those issues were fixed and if they weren't, I don't necessarily have the tools or know-how to fix them, so I scratched that idea but still wanted something that I could implement cleanly into a custom board.
After doing some more research, I ended up finding out that the PS2 had analog buttons (or pressure sensitive buttons) and started looking into that as well as the few games that support them. There's a lot of folks who used aftermarket controllers in their portables but they didn't have pressure sensitive buttons and I couldn't implement one in a clean manner so I scratched that idea. I then looked into those little boards that a user here sells on Ali, and while I could implement it half cleanly (if that makes sense lol) by soldering it in the same manner as the GC+ with its castellated pads, it to did not support pressure sensitive buttons.
So with the limited information I had on the original DS2, I set out to figure it out so I could have absolute full functionality (aside from rumble) as well as try to implement pressure sensitive buttons in a fully custom build. Now I knew this would be difficult as I think there's a total of 2 worklogs pre 2018 (pre the development of the PS2+) that used the original DS2 and there's not a lot of information on BB about using them, however I did remember there being talk about having to use resistors for each button etc.
I started by peeling open the 4 Controllers I had as there's a stupid amount of different controller revisions to look for the best one to work with and I landed on the one that uses the SD731A chip as it seemed like it'd be the easiest to reverse engineer, so started poking, probing and Sanding to see what everything connected to
Without sharing the billion photos I took of the process, I ended up with a really bad compendium style photo that I did on my phone so here it is lol. I was also looking into the button film to see how it worked and I asked on the discord what this "extra random button was" and couldn't get an answer so when doing my pinout, it was labeled as random. Little did I know how important it would be (I'll get into this later)
I figured out that the little black film between the contacts had a high resistance (varies between buttons) but the resistance was lowered to pretty much 0 depending on how hard you pressed. With this information, I set out to find something similar and ended up finding what is called velostat. Velostat is pretty much the same stuff they used in the button film and I was able to source a sheet of it to try out.
After finishing the pinout of the SD731A, I designed a quick and dirty test board that had different types of contacts (clicky and membrane) all for the X button so I could test it. I also included connections for the switch style joysticks that were converted to analog sticks to try them out.
I had made a few mistakes that I'll get into after but this is why we make test boards lol. I have the big contact for testing membrane buttons and the 2 smaller contacts to test dome switches similar to the 3DS or Switch.
So i ordered everything and waited, and when it all finally came in, I assembled the board and had a chance to test it this past weekend. JLC also did a really good job with the logos as I've heard they can be a hit or miss
After assembling the board, I was excited to test it out but upon plugging it in, the gamepad tester on the PS2 was showing it freaking out so I hit my first roadblock.
After messing with it for a bit I was concerned that maybe the decoupling Caps were causing my issue, namely the fact that I replaced the electrolytic cap with a ceramic, so I put the original one on and was still having the same issue. After some more head scratching for a bit, I thought that I had maybe fried the chip with heat when taking it off the original board. I searched around and found out that the "extra random button" on the original button film was actually a (7k - 10k) resistor that needed to be connected to 3v3, so I bodged a 10k resistor and that calmed the inputs down. I was once again excited but upon trying my button connections, I wasn't getting any input at all.
I spent a few more hours scratching my head and searching around. I went as far back as modretro and even the benheck forums as I figured the resistor on every button thing was my issue. I found some info that said each button needs a 20k - 27k resistor on it so I hooked up a 20k resistor in many different orientations and still got nothing, so it was back to searching.
A few more hours later I was doing some laundry and thinking about my issue and it dawned on me. I had designed my board without the resistor I was missing in mind because of the way everything was connected. I thought that the buttons common was 3v3 with the way everything was connected on the original board, and I was confused at some of the button diagrams online as Start, Select, and Analog had a different common than the rest of the buttons but to me it looked like everything was connected to 3v3 (not having that resistor in mind initially).
I ended up figuring it out. Start, Select, and Analog use regular ol 3v3 as their common, and the rest of the buttons use the resistor (or pin 11 on the SD731A) as their common. My issue was that I had everything connected to 3v3. So I bodged a wire between the resistor and pin 11 of the chip and got some input finally!
My boards contacts seemed to have been noisy and was registering random button presses as I was trying things so I initially put a small piece of velostat between 2 wires instead of using the pads and was getting the pressure sensitive inputs I was looking for.
After this, I really wanted to try the pads as I wasn't getting a consistent output without noise using the bare wires, so I connected one of my other boards to the input wires and was able to try it without the noise and everything worked perfectly! I was getting no noise and perfect input from 0 to 255 depending on how hard it pressed.
I also figured out that the sensitivity of the button presses can be adjusted via the value of the resistor connected between pin 11 of the chip and 3v3 but everything seemed to have worked great so I don't think I'll need adjustment. I'm also realizing that the noise was present because I was using my bare finger, so I didn't need to use my separate board but I'll still have a gnd plane in the final revision etc.
Later last night I also tested my joysticks and they work great! My only issue is that I need to invert the right stick as I need the physical orientation to be a certain way, but I think it's as easy as swapping vcc and gnd on the potentiometers to achieve that but I'll test it after. The only other thing I need to test is it in games as I've heard that if there isn't a resistor on every button, that it will register as a DS1, but with the velostat acting as a resistor, I'm not sure ill need resistors on every button but that's still to be tested.
In conclusion, I'm super proud of achieving pressure sensitivity and am excited to be one of the first to implement it into a custom board for a absolute fully functional PS2 controller In a portable!
If you've made it this far, thanks for reading this long winded post! I'll be coming out with the worklog for the portable soon enough!
- Original Dualshock 2
- Aftermarket Controllers
- PS2+
- Those little boards with the epoxy chip on them that a user here sells on aliexpress
After scouring some worklogs, I first realized that there is not nearly enough PS2 worklogs lol, but the conclusion I came to was this:
The first thing I looked at was the PS2+ and it was the first runner up, however I remember there being talk back in the day of it not working with some games and it was never made clear (or maybe I didn't look hard enough) that those issues were fixed and if they weren't, I don't necessarily have the tools or know-how to fix them, so I scratched that idea but still wanted something that I could implement cleanly into a custom board.
After doing some more research, I ended up finding out that the PS2 had analog buttons (or pressure sensitive buttons) and started looking into that as well as the few games that support them. There's a lot of folks who used aftermarket controllers in their portables but they didn't have pressure sensitive buttons and I couldn't implement one in a clean manner so I scratched that idea. I then looked into those little boards that a user here sells on Ali, and while I could implement it half cleanly (if that makes sense lol) by soldering it in the same manner as the GC+ with its castellated pads, it to did not support pressure sensitive buttons.
So with the limited information I had on the original DS2, I set out to figure it out so I could have absolute full functionality (aside from rumble) as well as try to implement pressure sensitive buttons in a fully custom build. Now I knew this would be difficult as I think there's a total of 2 worklogs pre 2018 (pre the development of the PS2+) that used the original DS2 and there's not a lot of information on BB about using them, however I did remember there being talk about having to use resistors for each button etc.
I started by peeling open the 4 Controllers I had as there's a stupid amount of different controller revisions to look for the best one to work with and I landed on the one that uses the SD731A chip as it seemed like it'd be the easiest to reverse engineer, so started poking, probing and Sanding to see what everything connected to
Without sharing the billion photos I took of the process, I ended up with a really bad compendium style photo that I did on my phone so here it is lol. I was also looking into the button film to see how it worked and I asked on the discord what this "extra random button was" and couldn't get an answer so when doing my pinout, it was labeled as random. Little did I know how important it would be (I'll get into this later)
I figured out that the little black film between the contacts had a high resistance (varies between buttons) but the resistance was lowered to pretty much 0 depending on how hard you pressed. With this information, I set out to find something similar and ended up finding what is called velostat. Velostat is pretty much the same stuff they used in the button film and I was able to source a sheet of it to try out.
After finishing the pinout of the SD731A, I designed a quick and dirty test board that had different types of contacts (clicky and membrane) all for the X button so I could test it. I also included connections for the switch style joysticks that were converted to analog sticks to try them out.
I had made a few mistakes that I'll get into after but this is why we make test boards lol. I have the big contact for testing membrane buttons and the 2 smaller contacts to test dome switches similar to the 3DS or Switch.
So i ordered everything and waited, and when it all finally came in, I assembled the board and had a chance to test it this past weekend. JLC also did a really good job with the logos as I've heard they can be a hit or miss
After assembling the board, I was excited to test it out but upon plugging it in, the gamepad tester on the PS2 was showing it freaking out so I hit my first roadblock.
After messing with it for a bit I was concerned that maybe the decoupling Caps were causing my issue, namely the fact that I replaced the electrolytic cap with a ceramic, so I put the original one on and was still having the same issue. After some more head scratching for a bit, I thought that I had maybe fried the chip with heat when taking it off the original board. I searched around and found out that the "extra random button" on the original button film was actually a (7k - 10k) resistor that needed to be connected to 3v3, so I bodged a 10k resistor and that calmed the inputs down. I was once again excited but upon trying my button connections, I wasn't getting any input at all.
I spent a few more hours scratching my head and searching around. I went as far back as modretro and even the benheck forums as I figured the resistor on every button thing was my issue. I found some info that said each button needs a 20k - 27k resistor on it so I hooked up a 20k resistor in many different orientations and still got nothing, so it was back to searching.
A few more hours later I was doing some laundry and thinking about my issue and it dawned on me. I had designed my board without the resistor I was missing in mind because of the way everything was connected. I thought that the buttons common was 3v3 with the way everything was connected on the original board, and I was confused at some of the button diagrams online as Start, Select, and Analog had a different common than the rest of the buttons but to me it looked like everything was connected to 3v3 (not having that resistor in mind initially).
I ended up figuring it out. Start, Select, and Analog use regular ol 3v3 as their common, and the rest of the buttons use the resistor (or pin 11 on the SD731A) as their common. My issue was that I had everything connected to 3v3. So I bodged a wire between the resistor and pin 11 of the chip and got some input finally!
My boards contacts seemed to have been noisy and was registering random button presses as I was trying things so I initially put a small piece of velostat between 2 wires instead of using the pads and was getting the pressure sensitive inputs I was looking for.
After this, I really wanted to try the pads as I wasn't getting a consistent output without noise using the bare wires, so I connected one of my other boards to the input wires and was able to try it without the noise and everything worked perfectly! I was getting no noise and perfect input from 0 to 255 depending on how hard it pressed.
I also figured out that the sensitivity of the button presses can be adjusted via the value of the resistor connected between pin 11 of the chip and 3v3 but everything seemed to have worked great so I don't think I'll need adjustment. I'm also realizing that the noise was present because I was using my bare finger, so I didn't need to use my separate board but I'll still have a gnd plane in the final revision etc.
Later last night I also tested my joysticks and they work great! My only issue is that I need to invert the right stick as I need the physical orientation to be a certain way, but I think it's as easy as swapping vcc and gnd on the potentiometers to achieve that but I'll test it after. The only other thing I need to test is it in games as I've heard that if there isn't a resistor on every button, that it will register as a DS1, but with the velostat acting as a resistor, I'm not sure ill need resistors on every button but that's still to be tested.
In conclusion, I'm super proud of achieving pressure sensitivity and am excited to be one of the first to implement it into a custom board for a absolute fully functional PS2 controller In a portable!
If you've made it this far, thanks for reading this long winded post! I'll be coming out with the worklog for the portable soon enough!