InicioInfoProyectos,Raspberry, Arduino Grabador de EPROM para Nintendo

Proyectos,Raspberry, Arduino Grabador de EPROM para Nintendo

Info•11/28/2016


Raspberry Pi.

La Raspberry Pi es una computadora de pequeño tamaño y bajo costo, ideada para promover el estudio de la informática en los niños. Pensando en lograr bajo consumo y bajo costo para llegar a muchas partes del mundo.

Ha tenido muy buena acogida por entusiastas de la robótica y la automatización, siendo esto lo que hace que encontremos una gran comunidad que puede dar soporte a nuestras dudas.

En la actualidad hay proyectos similares con mayores prestaciones a buenos precios pero es más difícil encontrar librerías de desarrollo y soporte, la comunidad de usuarios experimentados de Raspberry Pi es muy grande y por ello hay mucha documentación y soporte.


Raspberry Pi Modelo B:

Esta es la primera Raspberry Pi que conocí y aún conservo una.

Las he utilizado en proyectos múltiples, controlando temperaturas, pesos y controlando maquinas automáticas de llenado, aparte de múltiples pruebas que he realizado con sensores y dispositivos externos.




Cuenta con un conector de 26 pines con 17 Gpios, (P1), además de un conector adicional de 8 pines a la par(P5) con 4 gpios adicionales disponibles, tiene un conector para una cámara y un display que nunca he utilizado, además de 2 puertos USB 2.0, y 1 puerto LAN
El sistema operativo se inserta en una tarjeta SD, o bien una microSD con su respectivo adaptador.
De sistema operativo yo he utilizado 2 distribuciones de Raspian sin problemas.
2015-05-05-raspbian-wheezy.img algo grande y tarda varios segundos en cargar, pero muy completa, ideal para aprender.
Para desarrollo de aplicaciones con Python es mejor una versión del 2013 que es muy liviana y arranca bastante rápido: raspbian_wheezy_20130923.img
Para esta Raspberry es recomendable que la fuente de alimentación supere 1,2A (1200mA)


Raspberry Pi Modelo A:

Es la versión de menos consumo, puede consumir 200mA cuando la tipo B consume 500mA. pero solo tiene un conector USB 2.0 y no tiene el conector LAN, en lo demás es exactamente igual a la anterior tipo B.
Para dispositivos de automatización preconfigurados es una buena opción, aunque para experimentar y sacarle el máximo partido es preferible la tipo B para no sufrir configurándola.

Existen varios adaptadores USB a LAN compatibles, incluso inalámbricos, para conectarse durante la configuración inicial.

Algunas veces hay que leer bastante, no es algo para conectar y usar como una secadora de pelo u otro artículo de uso común.




Por lo general los accesorios se buscan en páginas en inglés, hay wi-fi miniatura que son compatibles, yo busco:

Miniature WiFi (802.11b/g/n) for Raspberry Pi

Tambien hay adaptadores de red LAN USB, yo utilizo: Plugable Ethernet USB 2.0 que es el que nunca me da problemas, probablemente otros funcionan bien, pero no los conozco.
Podemos ver que la tarjeta o circuito impreso es la misma en ambas versiones. En Gpios y conectores es exactamente igual
Se recomienda una fuente de alimentación superior a 700mA.


Raspberry Pi 1 Modelo B+

Esta Raspberry Pi mejora aspectos de la anterior, como mayor entrega de corriente por USB, el regulador de voltaje ya no es lineal, sino que utiliza tecnología switching que es mucho más eficiente.
En las condiciones que la tipo B consumía 500mA esta consume 330mA.
Ahora se utiliza directamente tarjeta microSD.
Además de que utiliza un conector de 40 pines con 26 Gpios, cuenta con 4 puertos USB 2.0 y puerto Lan

Tiene un tamaño bastante reducido:




Aunque es más económica que la B es recomendable que la fuente de alimentación supere 1,2A (1200mA).

Raspberry Pi 1 Modelo A+

Conserva las características positivas de la B+ pero solo tiene un USB y no tiene puerto LAN. Quedando como puntos positivos la eficiencia en el regulador consumiendo 180 mA sin accesorios, utiliza microSD, más Gpios, es la más pequeña de todas hasta el momento.



La fuente de alimentación recomendada debe de suplir un mínimo de 700mA, aunque yo prefiero mayores por seguridad y estabilidad.

Raspberry Pi 2 Model B

Las versiones anteriores utilizaban un procesador a 700Mhz

La nueva Rspberry Pi 2 (modelo B) tiene un procesador Quad Core de 900Mz y 1GB de memoria Ram

Las funciones de los pines son iguales, para algunos proyectos con Gpios es innecesaria tanta capacidad, pero si es para sacar partido al video y otras funciones ya es como una computadora o dispositivo inteligente de gama alta.

En apariencia es igual que la Raspberry Pi 1 modelo A+

La fuente de alimentación recomendada debe de superar 1,8A (1800mA).


Raspberry Pi Zero

A finales de Noviembre del año 2015 se anuncia la Raspberry pi zero, la computadora de $5.00.
Logrando reducir costos han podido producir esta, la más barata de las Raspberry pi, para los que tenemos proyectos donde no es necesario contar con varios periféricos juntos, como teclado, mouse y lan, es la opción ideal.

El procesador es algo superior al de las versiones anteriores de Rasperry pi 1 aumentando a 1 GHz, con 512 MB de memoria RAM (LPDDR2 SDRAM), utiliza un conector de 40 pines para los Gpios, conector de video mini-HDMI, conector Micro-USB, la salida de video compuesto (TV estándar ) en 2 pines en la tarjeta.




Arduino



Arduino. A poco que hayas navegado por internet te habrás encontrado esa palabra. Y es que ahora que es posible automatizar cualquier cosa, para hacer agentes autónomos (si queréis llamarles Robots también), controlar luces y dispositivos, o mil cosas que se os pueda ocurrir fabricar podéis optar por una solución basada en Arduino, una familia de placas y software que comparten nombre pero que son legión.



¿Qué es exactamente Arduino?

Arduino es una plataforma de electrónica "open-source" o de código abierto cuyos principios son contar con software y hardware fáciles de usar. Es decir, que promete ser una forma sencilla de realizar proyectos interactivos para cualquier persona. Y cuando digo cualquiera, es cualquiera, ya que internet está literalmente plagado de proyectos con Arduino, como veremos más adelante.

Como digo, Arduino es tanto software como hardware, y aquí viene la primera diferencia con otras placas y microcontroladores. Los entornos de desarrollo y lenguaje de programación de Arduino y las placas en las que se ejecutan han sido desarrollados de la mano, por lo que tenemos asegurada tanto la compatibilidad como la sencillez de desarrollo sobre ellas.




Software Arduino

Si nos centramos en el software, debéis saber que contamos con un IDE para casi todas las plataformas (Windows, Linux, Mac). ¿Y qué es un IDE? Bueno, son las siglas de Integrated Desktop Development Environment, o entorno de desarrollo integrado en cristiano. Un lugar donde podemos escribir nuestras aplicaciones, descargarlas al Arduino y ejecutarlas o depurarlas desde allí. El entorno de desarrollo es gratuito y descargable desde aquí. En resumen, el proceso pasa por descargarnos e instalar el IDE correspondiente a nuestra plataforma, trastear un poco siguiendo los tutoriales o simplemente hacer "corta y pega" del código que nos interese (aunque esto realmente es como desvelar el final de una buena película, es decir, que tiene poca gracia) y ya tenemos gran parte del trabajo hecho. O al menos en cuanto a software, porque la gracia de Arduino es precisamente la interacción del software con el hardware.

Aprender el lenguaje de programación es sencillo, sobre todo si ya tienes experiencia en otros lenguajes de programación como C o Java ya que Wiring / Processing para su programación se basa en ellos. El microcontrolador en la placa Arduino se programa mediante el lenguaje de programación Arduino (basado en Wiring) y el entorno de desarrollo Arduino (basado en Processing). Tienes más información sobre el mismo aquí.


Hardware Arduino

Y ahora hablamos de hardware. Hay infinidad de placas basadas en Arduino. Como os decía, es hardware "Open-source", así que cualquiera que quiera hacer una placa puede hacerlo. Y por ello tenemos Arduino de todos los colores, tamaños y con funciones propietarias de lo más diverso, y también productos que sin ningún pudor están basados en Arduino para controlar a su vez distintos dispositivos, integrados en el producto o no.

Volvamos al principio. El hardware Arduino más sencillo consiste en una placa con un microcontrolador y una serie de puertos de entrada y salida. Los microcontroladores AVR más usados son el Atmega168, Atmega328, Atmega1280, y Atmega8 por su sencillez y bajo coste que permiten el desarrollo de múltiples diseños, aunque también nos encontramos microcontroladores CortexM3 de ARM de 32 bits,5 que coexistirán con las más limitadas, pero también económicas AVR de 8 bits. ARM y AVR son plataformas diferentes, pero gracias al IDE de Arduino los programas se compilan y luego se ejecutan sin cambios en cualquiera de las plataformas. Corrección: Nuestro Lector fr0gdev nos comenta que hay ciertos problemas de compatibilidad de librerías entre plataformas, así que habrá que tenerlo en cuenta a la hora de elegir placa Arduino.




La diferencia entre los distintos Arduino la encontraremos por un lado en la tensión utilizada en las placas. Generalmente las microcontroladoras con CortexM3 tienen un voltaje de 3,3 voltios, mientras que la mayor parte de las placas con AVR utilizan una tensión de 5 voltios. Esto luego es fundamental para utilizar lógica TTL (frente a lógica CMOS) por ejemplo, lo que abre la posibilidad de utilizar chips baratos y complementar el Arduino con alguna funcionalidad externa. También hay placas que pueden conmutar el voltaje, así que tampoco es un factor determinante para seleccionar una placa u otra. Y, por otra parte, el número de conexiones, procesador utilizado, memoria y, sobre todo, el número de entradas y salidas y la posibilidad de alimentar distintos elementos desde la propia placa Arduino.

Hay placas que incluso no necesitan drivers para Linux o para Mac, como las basadas en el chip ATmega8U2 (un ejemplo es el Tosduino Uno R3), siendo detectado por dichos ordenadores como un periférico más.


Vale, ¿para qué sirve Arduino?

Arduino se puede utilizar para desarrollar elementos autónomos, o bien conectarse a otros dispositivos o interactuar con otros programas, para interactuar tanto con el hardware como con el software. Nos sirve tanto para controlar un elemento, pongamos por ejemplo un motor que nos suba o baje una persiana basada en la luz que haya y gracias a un sensor conectado al Arduino, o bien para transformar la información de una fuente, como puede ser un teclado, y convertir la información a algo que entienda por ejemplo un ordenador.




Así, podemos catalogar los usos que podemos darle a Arduino en dos grandes grupos:

Aquellos en los que el Arduino es utilizado como microcontrolador, tiene un programa descargado desde un ordenador y funciona de forma independiente de éste, y controla y alimenta determinados dispositivos y toma decisiones de acuerdo al programa descargado e interactúa con el mundo físico gracias a sensores y actuadores. Un ejemplo sería este uso de Arduino para el control de este agente autónomo que sigue una línea:

La placa Arduino hace de interfaz entre un ordenador (como podría ser una Raspberry Pi) u otro dispositivo , que ejecuta una determinada tarea, para traducir dicha tarea en el mundo físico a una acción (actuadores). Y viceversa, gracias a sensores que están conectados a la placa Arduino podemos hacer que el ordenador ejecute determinada acción. Por ejemplo esta placa de Pimoroni para simplificar la creación de un cabinet de videojuegos:





Otro proyecto para que podáis comprobar una posibilidad interesante para ser usado en un vehículo como ordenador de a bordo y con sensores de aparcamiento.






Id Huellas Dactilares ZFM20 a PC o Raspberry pi

ZFM20 conectado a la PC a través del puerto serial.

Llamo módulo ZFM20 a cualquiera de la serie, aunque puede ser ZFM-201SA o ZFM-206SA

Esta es la experiencia utilizando el módulo de la serie ZFM20, debido a la necesidad de un compañero de conectar dicho módulo a su Raspberry Pi utilizando el lenguaje Python, como no tenía una conecté el ZFM20 a mi computadora personal (PC)
No soy experto en programación, pero conozco algo de lenguajes como C y ensamblador, esta fué mi primera experiencia con Python.

El módulo ZFM20 funciona mejor con 5 Voltios, para alimentarlo utilizo un transformador de 9 voltios AC y un regulador 7805, además aprovecho para tomar un voltaje negativo necesario para el puerto RS-232 de la PC.




En la alimentación negativa utilizo un diodo zener de 5.6 voltios para conservar voltajes parecidos entre positivo y negativo, aunque no es un valor indispensable porque el 1 lógico de RS232 puede ser de -3 a -12 voltios.

Para adaptar el módulo con la computadora construí un adaptador de TTL a RS232 simple, con dos transistores y me funcionó perfectamente:




Además recordar que en Linux este puerto de la Raspberry pi es: /dev/ttyAMA0.

Protocolo de comunicación serial del ZFM20.

El modulo de identificación de huellas dactilares ZFM20 utiliza comunicación serial asincrónica, semiduplex.
La velocidad de comunicación por defecto es de 57600bps, siendo ajustable de 9600 a 115200bps, aunque al principio es algo dificil, y podemos hacer nuestras pruebas a 57600bps.
El formato de la trama es de 10 bits, 1 bit de inicio, 8 bits de datos y un bit de parada (no bit de verificación)




Header
Es el encabezado propio de este módulo, siempre será: 0xEF01H (EF01H)
Enviando primero el Byte 0xEF y de segundo el byte 0x01.

Address
Es la identificación de cada módulo, por defecto tiene 0xFFFFFFFF, puede ser cambiado con una instrucción pero si solo vamos a utilizar uno podemos dejar esa misma.
Son 4 bytes y es enviado primero el byte más significativo.

Package identifier
El identificador del paquete indica si es una cadena de instrucciones (0x01), paquete de respuesta del módulo(0x07).
Paquete de datos(0x02): vienen solo después de algun paquete que previamente lo indique, y el paquete final de una serie de paquetes de datos(0x08).

Package length
Indica el tamaño del paquete de datos que se envía, incluyendo solamente el contenido de Package contents y checksum, como en el contenido debe ir por lo menos una instrucción y checksum son dos bytes el mínimo es 3.

Package contents
En el contenido pueden ir comandos, resultados, comandos con datos, parámetros,etc.

Checksum
Es la suma del contenido de todos los datos en Package contents, package identifier y package length byte por byte.
Si el resultado supera el tamaño en los 2 bytes (0xFFFF) serán ignorados los bytes más significativos del resultado (overflow).

Ejemplo de comunicación con Python

Para verificar que hay comunicación utilizamos la instrucción llamada handshake (0x17)

Donde Instruction code y Control code conforman Package contents
Y asumimos que Address utiliza el valor por defecto 0xFFFFFFFF.




Confirmation code es 0x00 cuando la comunicación es correcta,
y es 0x01 cuando hubo error en el paquete o 0x1D cuando hay error del puerto.
Puede devolver 0x21 cuando se ha utilizado la instrucción SetPwd (0x12) y no se ha verificado el password (VfyPwd 0x13).

Aunque por lo general si el error es por Address erroneo o puerto no accesible lo que ocurre es que no obtenemos respuesta alguna.




Grabador de EPROM para Nintendo

La tendencia actual en muchos equipos electrónicos es que estos se asemejan cada día mas a las ordenadores, pues televisores de última generación (LCD’s, retroproyectores, etc.),televisores, equipos de audio, DVD, cámaras digitales, reproductores de mp3 ,teléfonos,etc incorporan en su electronica , memorias con el software grabado en su interior..Es así como en los electrodomésticos actuales se incluye unos circuitos de memoria del tipo EEPROM los cuales en su gran mayoría manejan la serie 24XX , 93Cxx pero también memorias clásicas memorias como son las estándar 27C64 y 27C128.

Muchas de los fallos que presentan los equipos electrónicos, donde también incluimos casi todos los antiguos juegos en formato cartucho, se deben a problemas en las memorias EEPROM que utilizan.

En efecto, una memoria puede resultar dañada y dejar de funcionar correctamente, pero en la mayoría de los casos, el problema es que se ha alterado o perdido su contenido o información binaria, es decir, los datos que tenía grabados en su interior. Eso es lo que mayormente provoca fallos de funcionamiento en el equipo que la utiliza.

Lo interesante es que reescribiendo el contenido original de la memoria, ya sea en la misma o en una nueva, el mal funcionamiento del equipo desaparece y la avería queda resuelta.Ademas no solo nos podemos limitar a copiar el contenido origina, pues adelantándonos un paso más incluso podemos incluso cambiar el contenido original por otro que nos interese.

El autor del programador que vamos ver, Robson Couto, tomó la decisión de fabricarse su propio cartucho cuando se compró una consola SNES, descubriendo al poco tiempo que la mayoría de los cartuchos que se venden actualmente para esta consola supuestamente “originales” en realidad no lo son pues tienen la ROM cambiada y los vendedores pretenden cobrarlo a precio original sin por supuesto carecer de los derechos del software original .




Couto , molesto con esta actitud ,entendió que se no deberia sobrevalorar algo que en esencia no es demasiado licito pues no se puede vender software del que no se posee licencia, por muy antiguo que sea, así que decidió crear sus propios cartuchos usando para ello su Arduino Mega para programar la memoria EEPROM, que es realmente la memoria donde se almacena el juego dentro de cada cartucho.

Para gestionar la grabación de la EEPROM con su Arduino, eligió el lenguage Python para hacer el programa de grabación de las memorias EEPROM , las cuales, por cierto se pueden encontrar por un módico precio en ebay.

Robson ha necesitado hacer bastante trabajo de programación e ingeniería inversa para conseguirlo, pero finalmente lo consiguió y ha decidido compartirlos con toda la comunidad tanto los esquemas del circuito como sobre todo el software que permite hacerlo funcionar.

¿Cómo se fabrican los cartuchos de repro (normalmente) que hay disponibles en el mercado?

Se busca un cartucho de juego aburrido (deportes especialmente);
Se graba una EPROM con el archivo ROM deseado;
Se cambia la ROM del cartucho con la ROM programada.
Bien, pero entonces ¿por qué no todos están haciendo sus propias repros ?

Pues por el precio , dado que un programador no es tan barato,ya que incluso los chinos tampoco lo son ( ademas dependiendo del lugar habra que pagar impuestos,etc)

Todo tiene una relación costo-beneficio y los fabricantes / hackers están siempre creando herramientas super útiles con materiales baratos. En 2014, se fijo el cartucho de Mega Drive utilizando chips BIOS que se encuentran en la chatarra. Escribir memoria flash no es trivial, hay un cierto algoritmo, pero sigue siendo un proceso relativamente simple, asi que escribir en una memoria EPROM no debería ser mas complicado.

El programador

Una EPROM también es una memoria,y en realidad es aún más fácil de programar que las memorias flash. Para escribir un byte en EPROM tenemos que seguir lo siguientes pasos:

Seleccione la dirección a través de los pines A0, A1, A2 … y así sucesivamente
Poner el byte de datos para ser escrito en Q0 pines, Q1, Q2 … etc,
Dar un pulso de al menos 50ms con una tensión de 13V en el pin Vpp
Repetir el proceso para toda la memoria ( en caso de de la eprom 27C801 son 8 * 1024 * 1024 = 8388608 direcciones)
También, debe ser observado que el Eprom necesita ser alimentado 6V cuando está programado(motivo por el que se ha incluido un interruptor en el esquema de mas abajo aunque se puede utilizar en su lugar un simple puente simple y cambiar manualmente Vcc cuando era necesario).

Para continuar es sumamente interesante comprender el pinout de una memoria típica con las típicas señales de control : VSS,Enable y GVPP




Los 13 voltios son proporcionados por un módulo de refuerzo ( boost) que puede conseguirse ya montado el cual básicamente es un convertidor DC-DC de 5V a 12V, pero claramente se puede usar una simple fuente de 12 voltios,aunque esto hará necesario conexiones externas al montaje

De la salida de 13V del modulo Boost , gracias a un regulador LM317 y dos resistencias de 1K ajustable y una de 220 ohmios , podemos obtener los 6V para alimentar el circuito en modo programación ,aunque claramente también se podría haber optado por un simple LM 7806 , regulador que como sabemos no necesita ajustes.

Por ultimo ,para conmutar la señal de programación G/VPP que conectaremos al pin 24 del zocalo ZIF necesitamos dos circuitos de conmutación cuyas salidas conectaremos a dicho pin. Ambos circuitos están basados en dos transistores de pequeña señal NPN y PNP (por ejemplo BC557 para el PNP y un BC547pra NPN) alimentandos por 13v y 5V respectivamente usando como señales de control las señales 3(13V) y 5(5v) del Arduino Uno

A continuación se muestra el esquema final del programador:




Como vemos el circuito gira alrededor de un zocalo ZIF de inserción nula para que no dañe las patas de la EPROM , y se conectan 30 pines del Arduino UNO al bus de direcciones de 20 bits (son los pines numerados con A0 ,A1,,..A19) y el bus de datos de 8 bits (son los pines numerados con q0,q1,..q7) de la EEPROM.

Las conexiones que se usan en este circuito son casi todas las salidas binarias del bus de expansión del Arduino Mega:




Las conexiones entre el zocalo ZIF y el arduino Mega utilizadas son las siguientes:



El montaje podemos soldarlo directamente en un escudo de prototipos para un Arduino Mega que enchufaremos encima del propio Arduino

Como comentábamoses muy interesante usar un zócalo ZIF, lo cual hará mas facil conectar y quitar la Eprom.

Software

Obviamente el circuito montado sin sw no podemos hacer nada , así que el autor ha escrito tanto un script ,como un sketch para ayudar a la lectura o grabacion de la Eeprom usando para ello un script en Python que lee los datos de un archivo y los nvía estos al Arduino Mega, que recibe los datos y los escribe en la memoria

Python 3 y pyserial son necesarios para cargar datos a la eprom pues como vemos el sw en realidad se compone de dos partes:

El script en python para leer el fichero y enviarlo al Arduino por el puerto serie y también para leer el contenido de la EEPROM via peticion al Arduinoi
Un sketch para Arduino para permitir leer y escribir en la Eeprom, donde como hemos comentado ,para la programación, se debe aplicar un vpp de 12V y un vcc de 6V a la eprom
Los archivos del proyecto están disponibles en el repositorio de github del autor.

Ahora usted ya sabe que puede programar EPROMS con sólo un Arduino Mega y algunos componentes adicionales( y no se preocupe si se equivoca,!pues puede borrarlos simplemnte liberando la ventanita y exponiendo esta con luz UV ! )

Datos archivados del Taringa! original
251puntos
735visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
4visitas
0comentarios
Dar puntos:

Dejá tu comentario

0/2000

Autor del Post

M
Miyata1987🇦🇷
Usuario
Puntos0
Posts1,056
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.