sábado, 7 de julio de 2012

Control NES USB PIC18F2455/2550/4455/4550

C360_2012-07-07-18-21-21
Hace aproximadamente un mes que no escribía para este blog, pero hoy regreso con un bonito proyecto gamer y con el cual se puede aprender a usar el USB en modo HID (Dispositivo de Interfaz Humana) con un PIC18F2455/2550/4455/4550
Desde hace tiempo ya había visto este proyecto de convertir controles NES a USB, pero la mayoría de tutoriales solo están para Arduino o chips ATMEL, muy pocos en chips de la familia de Microchip, pero sobretodo mas difícil de encontrar en lenguaje CCS (Mejor conocido en el ITA como “PIC-C”) que es el lenguaje en que mas programo.
Gracias a San Google encontré una bonita pagina llamada www.zero-soft.com que tiene un código en CCS para hacer uno de estos bonitos controles NES, pero el código ahí descrito es código para versiones 3.xxx del compilador y en las nuevas versiones no compilaba bien Triste, aun en versiones 3.xxx no pude hace que compilara.
Así que me puse a trabajar para mejorar el código, hacer que funcionara y esto fue lo que logre
Control NES USB

Mandos de NINTENDO   WikiNES 77
Circuito Interno del Control NES
Zero Soft   Converting an NES controller into a USB Controller
Diagrama
HID
Como aparece el control para Windows
emu
Configuración en el emulador de los botones

Material Usado por mi en tarjeta de pruebas:
  • PIC18F4550 (44-Pin TQFP)
  • Cristal de 12Mhz
  • Capacitor 47uF
  • Conector USB Tipo B

Actualización 25/07/2012:
Bueno hace poco continúe con la construcción del control NES para colocar todo el circuito dentro del control y no dejarlo en mi tarjeta de pruebas
La primera modificación que tuve que hacer fue cambiar el PIC18F4550 por el 18F2550 ya que el primero es demasiado grande para estar dentro del control. El 2550 tiene menos patas y como se puede observar en la fotos hasta mas delgado.
Además:
  • Cristal de 12Mhz o 4Mhz superficial
  • Capacitor de 1uF para el Vusb (el datasheet sugiere que sea de 220nF hasta 1uF)
  • Capacitor de 220nF para la fuente
C360_2012-07-21-23-34-39
Lo primero fue abrir el control y cortar los cables a un tamaño adecuado para soldar al microcontrolador, como se observa en la foto el control solo cuenta con un IC4021 antes descrito.
C360_2012-07-21-23-34-30
Después de modificar el programa original con la librería del 18F2550 hay que programar el microcontrolador y doblar las patas de la siguiente forma
C360_2012-07-21-23-50-24
Hay que soldar todo a sus correspondiente pata basándose en los diagrama antes mencionados en este post y de las fuentes, debo confesar que al terminar las primeras pruebas del control después de tiempo se inhibía o se desconectaba, cambie el capacitor de 47uF del original circuito por uno de 1uf pensando que era eso y tratando de ahorrar espacio pero no se soluciono el problema.
La solución fue conectar el capacitor de 220nF sin polaridad en paralelo con la fuente como esta en el diagrama original de zero-soft.com, con eso se soluciono el problema.
C360_2012-07-21-23-50-08

Les dejo el código, el emulador y las paginas (fuentes al final del post) donde viene toda la información por si quieren saber mas de como realizar este proyecto, sino simplemente programen su PIC y a jugar se a dicho.
Recuerden no se necesita instalar drivers, es lo bonito del HID
Código en CCS
En bitbucket

En rar

Emulador “JNES”

Agradecimientos
A Drew Hall de zero-soft.com por compartir este proyecto en su primera versión y responder mis correos para mis primeras dudas.
Al Ing. Gustavo Sosa por su colaboración en detectar los primeros errores en el código original.
Y a mi novia Mónica por inspirarme a hacer este proyecto, gracias por tu gran apoyo.

Fuentes:
http://www.zero-soft.com/HW/USB_NES_old/
http://www.retrones.net/Articulos/Pads/Pads.htm
http://www.kaiserland77.com/wikines77/index.php/Mandos_de_NINTENDO
http://www.aquihayapuntes.com/indice-practicas-pic-en-c/comunicacion-usb-pic-con-hid.html

5 comentarios:

Anónimo dijo...

Excelente! lo voy a probar gracias

Kiranova dijo...

Me sirvio bastante tu circuito, ahora estoy intentando conectar dos controles al mismo pic

Sabas dijo...

Excelente, espero pronto compartas como te fue, saludos

Diego Hernan Pinto J. dijo...
Este comentario ha sido eliminado por el autor.
Diego Hernan Pinto J. dijo...

Excelente proyecto, seria posible utilizar el 18f2550 para usar controles de SNES?, es mas complicado de programar? es posible en un mismo código permitir dos entradas para dos controles de SNES o de NES?