USB SNES Controller

166,024

78

56

Published

Introduction: USB SNES Controller

First instructable. Let me know what it needs and fixes.

I did not make the circuit or program. I am just making a guide that shows step by step assembly of how to make the USB SNES controller. The original page is here:
www.raphnet.net/electronique/snes_nes_usb/index_en.php

This guide will convert a regular snes controller into a usb gamepad. It is tested working on XP, Vista, 7, and PS3. It should work on mac and linux but I have not tested them. The device is recognized as a standard HID device.

-You do not need to program anything for this guide. The program is already compiled and ready to be flashed to your chip.
-You do need basic soldering skills.
-Basic schematic reading skills helps, but I will try to explain every step.

Step 1: Parts Needed

Parts List:
----------------------------------------
-Atmega8 DIP microcontroller
-AVR programmer (usb, parallell or serial. I use usb.)
-12MHz Crystal osscilator
-[2] 3.6 volt zener diode
-1.5K Resistor (anywhere from 1.3K to 1.7K should work)
-[2] 68ohm resistor (anywhere from 60 to 75 should work)
-USB male cable
-SNES controller (first party works better. wires colors match guide.)
-Small wire.
-PCB - www.radioshack.com/product/index.jsp - $2
-Breadboard. This makes it much easier to test before putting into a controller.
             www.radioshack.com/product/index.jsp - $9

Tools:
-----------------------------------------
-Wire Stripper
-Wire Cutter
-Soldering Iron
-Solder
-Needle nose pliers (makes it alot easier to place and move wires on breadboard)
-Dremmel or cutting tool. (chip will not fit into unmodified controller.

Step 2: Prepare Wires

-Take a usb cable and cut off the non male end. You only need the cable and male usb.
-Strip the USB cable and all 4 connections inside. (some usb cables have 5 wires. This guide does not need the 5th wire, so it can be cut off.

-Open the SNES controller. Cut the connection wires close to the board, but leave enough wire so they can be solderd to a pcb. Better to leave too much wire and cut it off if you don't need it.


Step 3: Flashing the Hex File to the Atmega8

I used a usb programmer to flash my chip. This means that a compiled hex file is sent from the computer to the chip. No actual programming needs to be done. Serial and parallel will work to, but the programmer software will be a little different from mine.

The HEX file be downloaded here: (right click save target as...)
www.raphnet.net/electronique/snes_nes_usb/releases/nes_snes_db9_usb-1.7.hex
This is a firmware that will tell the chip how to handle all signals.

All Atmega chips need fuse bytes. Don't worry about what they do, just know that this design needs:
high byte = 0xc9
low byte = 0x9f

Your chip flashing program should have an option to set these fuses. I used ProgISP on my system.

When you have it flashed, you are ready to start bread boarding.

Step 4: Breadboarding

I will assume you know the basics of using a breadboard. If not, there are many guides for that.
I will also assume that you know how to solder wires.

If you can not read the picture, go here:
www.raphnet.net/electronique/snes_nes_usb/sch-revD.png

Start by solding each of the 4 usb wires and each of the 5 snes wires. Solder the ends so that they can be plugged into the breadboard.

Attach the programmed microcontroller and start to wire the components.


Step 5: Oscillator + SNES

The oscillator connects to pins 9 and 10. It can be rotated either way and work.
SNES Clock connects to pin 28.
SNES Latch connects to pin 27.
SNES Data connects to pin 26.
SNES 5V power connects to both 5V on the chip and usb 5V.
SNES ground connects to both grounds on chip and usb ground.

Step 6: USB Data and Power

This part is very tricky to wire correctly. Pay close attention to the schematic.
USB 5V goes to both 5V pins and SNES 5V
USB Ground goes to both ground pins and SNES ground
USB2 is data - . It goes:
     through a 3.6v zener diode to ground
     through a 68ohm resistor to pin 2 and 3
     to usb 5V through a 1.5k resistor.
USB3 is data +. it goes:
     through a 3.6v zener diode  to ground
     through a 68ohm resistor to pin 4

Step 7: Testing the Controller

With all parts in place, plug in the usb port into your computer and it should come up with found new hardware. You can test all the buttons in the control panel under game controllers.

If it works, you are ready to transfer it to a pcb and put it in the controller.

Step 8: Breadboard to PCB

I used the board below to make my design. I put the chip in place and used a dremmel to cut all unneeded areas off the board. You need to make it as small as possible to fit in the controller.

Note that all the solder spots near the pins connect 3 holes. This allows 2 wires per pin to be used on this board.

Note. The solder must be on the bottom of the board. Put it on the wrong side and the pins won't make any connections.

Step 9: Modifying the Controller

I had to cut the casing a little to fit everything inside. I put my circuit under the abxy buttons. The picture shows what I did. Fit it in anyway you want as long as it closes.

Step 10: Final Testing + Notes

Test it and see if it works. If it does, you're done. If not check common errors.

Common Errors:
--------------------------
Check that power and ground are connected properly
Check the direction on the zener diodes. They do not work both ways.
Is the oscillator connected?
Did you program the right program and the fuse bytes?
Are snes data, latch, and clock hooked up to the right pins?
Do you have a solder bridge anywhere?

NOTES:
---------------------------
This controller does work on a PS3, but the buttons do not map very nicely. The start and select buttons do not map to ps3 start and select. This can be usable on some fighter games that allow you to remap the buttons.

Let me know what I can do to improve this Instructable.

Share

    Recommendations

    • Casting Contest

      Casting Contest
    • Clocks Contest

      Clocks Contest
    • Planter Challenge

      Planter Challenge
    user

    We have a be nice policy.
    Please be positive and constructive.

    Tips

    Questions

    56 Comments

    Hello, on windows 10 I have the message: Unknown USB Device (Device Descriptor Request Failed)

    Any idea?

    1 reply

    Have the same problem :(

    Version 1.9 of the hex is available now :-)

    http://www.raphnet.net/electronique/atari_usb/releases/nes_snes_db9_usb-1.9.hex

    Hi,

    Everything seems to work fine, but my Windows7 64Bit detects the Controller as "Unknown Device" (Driver installation seems ok, though...) and pushing buttons on the controller has no effect :(

    Any idea what's happening here? I'm using the 1.9 version of your code.

    Thanks!

    1 reply

    Got it... swapped D+ and D- ... too easy :->

    Hi I'm trying to build this as a christmas present for someone but I've hit a hurdle on two boards.

    My Teensy 2.0 shows up as "Virtua Stick High Grade" for a second then becomes "USB Input Device"

    My Pololu A-Star 32U4 Micro also shows up as "Virtua Stick High Grade" but constantly disconnects and re-connects.

    Can anyone offer a solution to either of these problems?

    I've tried this and failed. Maybe it's my connections, but everytime i plug it in, all it says is that the device malfunctioned. I'm just gonna go ahead and buy a USB SNES controller because this shouldn't be this hard. it could be because the materials are all cheap as crap and all the wires are flimsy so that could ruin some of my contacts. IDK but it sucks that I couldn't get this to work. I wanted to implement it into my senior design but oh well. Im not gonna spend weeks on a controller.

    Unless you just have the materials lying around, Isn't it just cheaper to get a snes controller to USB adaptor?

    The coding explanation is BOGUS! How is a person supposed to learn how to program the chip and all you say is "welp, program the chip, NEXT step is everything else" like come on dude! seriously?

    7 replies

    Sorry I didn't explain better. I did not modify any source code for this project. I should have used the term Flashed in Step 3.
    Download the hex file from the link in Step 3. It is the compiled source code that is ready to be transferred to the chip.

    This is a usb programmer that can be used for it:
    https://www.sparkfun.com/products/9825

    These 3 together make it easier to wire the programmer to the microcontroller:
    https://www.sparkfun.com/products/8508
    https://www.sparkfun.com/products/8506
    https://www.sparkfun.com/products/116

    The 5x2 ribbon wire from the programmer plugs into the AVR Programming Adapter. From there, the 6 pins plug into an open spot on the breadboard.
    Then wire each of the 6: GND, 5V, MISO, SCK, RESET, and MOSI to the corresponding pins on the chip. Open your chip flashing program of choice (I used ProISP) and flash the Hex file to the chip. After that, set the high and low fuse bytes. The 12MHz oscillator must be connected to flash and set fuse bytes.

    After doing this successfully, the programmer and adapter can be removed from the breadboard.

    I can post more pictures if they would help.

    Is there another way I can program this chip. like using another arduino instead? buying parts seems extra.

    I don't like how he uses an imitation Arduino.
    Found this pic on google that might be easier to follow. Pin1 is at the top right of this picture.

    arduino_avr.jpg

    The first picture shows how I have the chip wired. The second shows the full usb avr programmer attached.

    pic1.jpgpic2.jpg

    Oh you're totally fine dude, haha I was being a jerk that day because I was rushing to finish it. But this is a great instructable nonetheless, just be careful of your wording because some people might miss the SMALL details.

    Can you please help i am trying to build this i bread boarded it and when i connect it to my computer i get unknown device please help

    user

    Here's where I run into a dead end. Only thing that Windows detects in its Devices is a "Prolific USB-to-Serial Comm Port." Any tips on where to start trouble shooting?

    2 replies

    Prolific USB-to-Serial Comm Port is the usb micro controller programmer, not the controller.

    Basic overview of steps:
    1. Program microchip with programmer on computer.
    2. assemble circuit with programmed microchip on breadboard,
    the usb microcontroller can be disconnected and is no longer needed.
    3. plug cutoff usb wire into breadboard as illustrated in Step 4.

    There should be a driver for Human Interface Device if all is well.
    If not, the zenor diodes might be backwards.
    Also check that all pins are in the right locations.
    Did the programmer program say chip flashed successfully?

    Speaking of programs, would it work if I used AVRdude to program the ATmega8? Also, I tried to create a sketch of a NES controller with the USB conversion circuit built in(picture below). Would it work?

    NES-USB-controller.png