USB <-> NES controller adapter

USB <-> NES controller adapter

This project describe an adapter that allows to plug an original NES gamepad in a PC. This is mainly useful for emulators, but maybe it can be used with some modern games too.
Final prototype

Circuit

As with most purely digital projects the schematic is very simple. USB connector on one side, NES pad connector on the other, a few discrete component and one microcontroller to do all the work :
The schematicParts list:
  • 1x ATtiny45 or ATtiny85
  • 1x NES controller female connector
  • 1x 100nF capacitor
  • 2x 3.6V Zener diode
  • 2x 68Ω resistor
  • 1x 1.5kΩ resistor
As a prototype I hand-carved a small PCB. Here the PCB itself acts as the USB connector, however I don't recommend it as it adds a little too much stress to the port to my liking.
Prototype board, unfortunately wired wrongAdd a few layers of electrical tape on the back of the PCB to add some height. You can add some until there is enough, or do as I did and check the USB specification. The answer is that the tab should be 2.25mm high, so do that. Of course an actual plug has spring-loaded contacts so this won't be as good.
PCB as USB plug Add the µCActually I got the wiring wrong, I thought that the data lines could go anywhere and that it was just a matter of changing the configuration of V-USB, but it actually works only if D- is connected to INT0. Or at least I didn't manage to make it work with an interrupt-on-change pin. So I had to do a little point to point wiring. I also remade a proper layout using Eagle. You can download the project files below.

Code

The microcontroller firmware is based on V-USB. It relies on the internal oscillator calibration feature of the ATtiny45/85 to adjust the CPU frequency within tolerance of USB timings without the need to use a crystal, which allowed fo an even smaller PCB. Grab the project files below.
  • AVR GCC project files. Licensed under the GPL v3. To burn using avrdude you'll need to adjust the Makefile for your programmer, then type make program fuse. Alternatively, burn the .hex with your favorite software and set the fuses to 0xe1, 0xdd, 0xff (low, high and extended respectively).
I'm using USB HID class, so no driver is needed. Just plug it in and it will pop in the available game controllers. I've tested it with Windows 7 and Ubuntu. I'm pretty confident it will pose no problem under Mac OS.
Windows properties window Windows properties window

The Kit

A kit with a professionnally made PCB is available for purchase here.
Kit

Contents


  • 1x PCB
  • 1x ATtiny45 or ATtiny85
  • 1x DIP8 IC Socket
  • 1x USB Type A Male PCB plug
  • 1x NES controller female connector
  • 1x 100nF capacitor
  • 2x 3.6V Zener diode
  • 2x 68Ω resistor
  • 1x 1.5kΩ resistor

Assembly instructions


First make sure you have all the components. Refer the the parts list higher or to this picture. The DIL8 component socket is missing but you should have one in the kit.
Solder the components from the smallest to the biggest. Start by the 2 Zener diodes, then the resistors.
Place the USB plus and the IC socket. The socket serves to help avoid overheating the microcontroller, and makes replacing it easier. You don't have to use it if you wand to make the final circuit slimmer.
Now put the 100nF decoupling capacitor which is the highest component at this point.
Last component, the NES controller connector.
It has a 2mm pitch, which is slightly wider than the 1.6mm PCB, so you'll need to bend the pins on one side slightly.
Don't hesitate to put a large amount of solder to make sure it is well attached.
Put the microcontroller in the socket. The dot in one corner indicates which pin is pin 1. Place it in the socket so that pin 1 is next to the notch that is printed on the PCB.

And done !
Play some NES games now !
That's all there is to it. Plug it in your PC and it should show up as a standard game controller. Buy the kit if you like, and have fun!

Comments

Comment left by Ouistiti on 2019-05-27 20:17:45 :
Put1, la qualité de la gravure, du grand art/
Comment left by Ouistiti on 2019-05-27 19:46:14 :
Put1, la qualité de la gravure, du grand art/
Comment left by Ouistiti on 2019-05-27 18:43:22 :
Put1, la qualité de la gravure, du grand art/
Comment left by Bus on 2019-05-27 18:39:37 :
Je me souviens de min voisin qui diso : ça respire.
Comment left by John McLane on 2019-03-18 12:31:27 :
Demain, microjupe ou pas microjupe ?
Allez savoir, ça dépendra de l'autre...
Comment left by Danciger on 2019-03-03 08:47:13 :
Where is "La Reina de műsica disco" ?
Comment left by Alisha Pauwels on 2019-02-04 15:00:21 :
Demain microjupe...
Comment left by Minou on 2019-01-21 20:56:27 :
Et voilà, mon train s'est retrouvé bloqué entre Boulogne et Calais, je vais en parler à Monsieur LEMAIRE, Directeur Général de la SNCF.
Comment left by 1978 on 2019-01-14 18:56:50 :
I like dancing cocks.
Comment left by La grande girafe on 2017-07-06 20:07:12 :
Est-ce qu'on peut alimenter un frigo avec Ca ?
Comment left by Victor on 2017-03-17 19:42:12 :
Que pasa aqui ?
Comment left by Magnus Hydra on 2016-09-09 22:38:19 :
Buy the kit link is dead :(
Comment left by Brahim B. on 2015-03-02 10:17:16 :
Hi,

Very cool!! Its this adapter compatible with the Xbox Original (the first fat black)? Xbox has 4 USB 1.0 port, so
that will be nice to connect the old NES controller on it!!

BRAVO for your job;-)

Greetings from Electronic Guy in Switzerland!
Comment left by a nonny moose on 2014-05-16 19:39:13 :
Links aren`t working ...
Comment left by Willy on 2014-03-19 22:03:02 :
Hey mate. Great project. Would you happen to have the source as a arduino sketch. I'm using an arduino as a programmer for the attiny and was wondering if you already had this and if not. I hope you don't mind me trying to make it compatible with IDE and maybe posting it if anyone is interested on it. Thank very much for such a great project/product
Comment left by Pedro on 2014-03-17 00:09:36 :
amigo necesito sabes la programacion del microcontrolador muchas gracias espero su respuesta
Comment left by Arthur on 2013-10-20 20:18:27 :
Thanks for the kit, finally got round to soldering it : arthur.lutz.im/blog/2013/10/manette-nes-adaptateur-usb/
Comment left by Dave on 2013-08-17 20:33:58 :
Hi I was trying to buy this kit but the store is no longer available. Can someone email me more specifics on the parts involved. The actual part numbers or something would be great when I enter 68Ω resistors or 3.6V Zener diode in mouser.com search it list all sorts of stuff not sure what I am looking at. I am not an electronics guy still trying to learn. Thanks for your help.

Daruble@att.net
Comment left by Adam on 2013-05-12 20:51:44 :
I keep trying to load the code with Arduino as ISP and keep getting the error main.c:36: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'usbFunctionSetup'

Any suggestions?
Comment left by Sean on 2012-10-31 18:42:22 :
Are there going to be more stock? I went to purchase the kit but it is out of stock. :( Or at least the atTiny pre programed?
Comment left by Mike on 2012-08-06 21:57:05 :
Any possibility of one for the SNES?
Comment left by Mike on 2012-08-05 16:51:53 :
Any possibility of one for the SNES?
Comment left by John on 2012-08-04 22:45:32 :
I just got the missing capacitors from you in the mail today! Thanks! I finished the kit and it works great!
Comment left by John on 2012-08-04 15:19:00 :
I purchased two of the kits and neither had the 100nF capacior. Was forced to order them from local supplier.
Will have to wait another 5 days to complete!
Comment left by vic on 2012-07-21 04:42:07 :
@Kuy: Thanks for your advice. I tried it already but it didn't seem to work. I must have something else conflicting.

I know that the comment system needs improvement (lots of), I'm confident I'll allocate some time to work on it eventually ;-)
Comment left by Kuy on 2012-07-20 21:55:26 :
(one more attempt)

#define USB_CFG_DMINUS_BIT 3 //PB4, pin 3, pulled up to Vcc by 1.5k
#define USB_CFG_DPLUS_BIT 4 //PB3, pin 2, PCINT3 (note: not INT0!)
#define USB_INTR_CFG GIMSK
#define USB_INTR_CFG_SET _BV(PCIE)
#define USB_INTR_ENABLE PCMSK
#define USB_INTR_ENABLE_BIT PCINT4
#define USB_INTR_PENDING_BIT PCIF
#define USB_INTR_VECTOR PCINT0_vect

note: your comments system does not correctly HTML-sanitize input.
Comment left by Kuy on 2012-07-20 21:53:54 :
(continued)
#define USB_INTR_CFG_SET (1
Comment left by Kuy on 2012-07-20 21:53:12 :
V-USB can be made to work with pins other than INT0 - simply update the following #defines in your usbconfig.h (example for D+ on PB4 and D- on PB3):

#define USB_CFG_DMINUS_BIT 3 //PB4, pin 3, pulled up to Vcc by 1.5k
#define USB_CFG_DPLUS_BIT 4 //PB3, pin 2, PCINT3 (note: not INT0!)
#define USB_INTR_CFG GIMSK
#define USB_INTR_CFG_SET (1
SHARE

Oscar perez

Arquitecto especialista en gestion de proyectos si necesitas desarrollar algun proyecto en Bogota contactame en el 3006825874 o visita mi pagina en www.arquitectobogota.tk

  • Image
  • Image
  • Image
  • Image
  • Image
    Blogger Comment
    Facebook Comment

0 comentarios:

Publicar un comentario