Decode/break out SNES controller buttons

fibbef

Wizardry V Completer
.
Joined
Nov 10, 2016
Messages
578
Likes
1,530
Portables
3
Here's my situation: I have a project in mind that I want to build into a Super Nintendo shell and keep it looking as stock as possible. I would like to be able to plug any SNES controller into the front and break out the controls so that I can send individual button presses to other components inside the system. I found an Arduino blog about converting the SNES controller signal into a USB controller, but that only gets me half way there. I also found a Ben Heck thread where someone was trying to do the same as me, but I didn't see where they reached a resolution (and I can't seem to find that thread again).

Does anybody know a good way of doing this? I have an Arduino Uno and a couple of Raspberry Pis at my disposal, but I'm afraid I'm not very good at using either. Each time I get out the Arduino I pretty much have to reteach myself how to use the dang thing. I'm also not against delving into the world of Teeny dev boards.

My fallback plan is to replace the controller cable with a VGA cable and wire it up button for button, but that would mean modifying a perfectly good controller and it would ruin the stock appearance of the system. But I guess you gotta do what you gotta do.
 
Joined
Jun 7, 2016
Messages
156
Likes
228
Location
New Mexico
Sounds like a cool idea. This page has some good info on the SNES controller's communication protocol (see sections 5 and 6.) I'm not much of a programmer, but I imagine you could fairly easily program a microcontroller to interpret the serial signal the controller uses.
 

Aurelio

ᕕ( ᐛ )ᕗ
Staff member
.
.
.
.
.
.
Joined
Mar 3, 2016
Messages
2,043
Likes
2,705
Portables
2
The SNES controller is a simple shift register. Grab the data using SPI. 12 clock cycles and you've grabbed all the buttons. If you want to do it with an Arduino simply use the SPI.transfer16() function :)
 

fibbef

Wizardry V Completer
.
Joined
Nov 10, 2016
Messages
578
Likes
1,530
Portables
3
Thanks for the tips guys!
I imagine you could fairly easily program
What? Just because I have a degree in computer science you assume I can program?

use the SPI.transfer16() function
Sounds almost too easy. I'll start doing some homework tonight and learn more about this function.
 
Top