Programador para EPROM en Arduino

Al estudiar y reparar computadoras que son más antiguas que yo, era necesario flashear las ROM. Pruebas de RAM y periféricos para realizar. No tenía un programador normal en ese momento.


Por supuesto, es posible compilar la lógica para el puerto LPT, pero esta opción se descartó, ya que para su uso sería necesario incluir algún otro anciano. En las computadoras modernas, esta interfaz todavía se encuentra (aunque no es un conector completo, sino en el peine) y comprar una tarjeta en una ranura PCI tampoco es un problema, pero ya hay dificultades con el software. Fue escrito hace mucho tiempo cuando el trabajo con puertos de entrada / salida en sistemas operativos se realizaba de manera diferente. En consecuencia, en las versiones modernas del software de Windows no funcionará.


Vale la pena mencionar de inmediato que sé sobre la existencia de TL866. E incluso durante el proceso de desarrollo, lo compró para sí mismo, pero no puede flashear chips que requieren un alto voltaje de programación. Máximo 18 voltios (TL866 + o 21 para la versión anterior).


Una búsqueda rápida en Google me llevó a este repositorio . Una vez reunido el programador, pude deshacerme de un par de chips de interés. Pero con el firmware todo resultó ser mucho más complicado ... El software simplemente no sabe cómo ... Por supuesto, puede engañarlo exponiendo el chip incorrecto, pero esto no funciona en todos los casos y claramente no es nuestro método


Estaba muy decepcionado con la interfaz de usuario, que, en lugar de la versión clásica con el derecho de seleccionar el puerto para el usuario, pasó por todas las interfaces seriales disponibles. En consecuencia, todos los dispositivos se reinician. Es especialmente ofensivo, probablemente, cuando tiene una impresora 3D durante 10 horas imprimiendo una pieza desde una unidad flash USB, y aquí esta configuración ...


El mundo de OpenSource es hermoso porque puedes tomar el proyecto y agregarlo a tu tarea. En este caso, no hay códigos fuente para la interfaz gráfica. Al menos no los encontré, aunque podía escribir al desarrollador. Se volvió interesante y había una pequeña razón para estudiar Qt. Entonces el software será multiplataforma.


Tomamos como base el esquema del proyecto anterior y modificamos el dispositivo a la funcionalidad requerida. Decidí sacrificar el soporte EEPROM en software. Puede que esta no sea una buena solución, pero los chips que se pueden borrar eléctricamente ya no necesitan un voltaje tan alto. Al finalizar, confié en el microcircuito más voluminoso (27C512 para DIP28) y eliminé toda la confusión con respecto a las patas de la dirección. La dirección completa se establecerá exclusivamente utilizando registros de desplazamiento (74HC595). Esto libera las patas adicionales del microcontrolador, que serán necesarias para controlar el suministro de voltaje de programación. Y todas las señales necesarias (PRG) se pueden obtener modificando la dirección antes de cargarla en los registros.


El principio de aplicar programación de voltaje permaneció igual. Cambios solo en el campo de protección de pines de microcontroladores y registros de desplazamiento. Reemplacé las resistencias (1 KOhm) con diodos con un pull-up al registro. 0. Esta es una opción menos agresiva. Aunque, para ser justos, y las resistencias funcionan.


Después de estudiar la documentación de todos los chips de interés, determiné que se requieren tres puntos de alimentación Vpp:

  1. 27C16 Circuitos integrados de 21 pies (zócalo DIP28 de 23 pies)
  2. 27C32 y 27C512 por señal #OE (Salida habilitada)
  3. 27C64, 27C128, 27C256 en 1 pata de microcircuitos


Los microcircuitos 27C16 y 27C32 difieren de los demás en el caso, por lo que deben suministrar energía a la pata 26 del zócalo. Este es el tramo de dirección A13 para hermanos más espaciosos. La corriente de la salida del registro de desplazamiento debería ser suficiente para funcionar, pero al momento de cargar los datos, sus salidas pasan al estado Z. Se permite un modo similar, pero la inclusión en la lectura o escritura de una celda no es la norma. Por lo tanto, se instala un transistor adicional bajo el control de potencia. Y se requería otro para el 27C16, que, para el momento de la lectura, necesita suministrar 5 voltios a la entrada Vpp. Por supuesto, puede establecer el voltaje de programación en 5 voltios mientras lee, pero cambiar entre 25 y 5 voltios es inconveniente.


Si hay patas libres de ADC, ¿por qué no medir el voltaje de programación? La junta está divorciada bajo el Arduino Nano. Hay dos entradas adicionales en él, que no se pueden usar excepto el ADC. Esta es en realidad una característica de muchos microcontroladores AVR en una carcasa de montaje en superficie. En el chino Arduino UNO, a menudo hay entradas A6 y A7. Dado el hecho de que el voltaje puede ser de hasta 30 voltios (parece que, sobre todo, quieren RF5 doméstico, 25 voltios), calculamos el divisor de lo que está disponible. Una precisión de 0,5 voltios es suficiente para esta tarea. Esta función es infalible, no un voltímetro.


Era posible, por supuesto, confundirse y actuar como un controlador WID (control de ancho de pulso), pero no había patas libres. Por lo tanto, en la placa de circuito impreso hay un asiento para el convertidor DC-DC Step Up en el chip MT3608, que están disponibles por un centavo en Ali.


Según el esquema, eso es todo.




El algoritmo para trabajar con estos microcircuitos es muy simple. Puedes leerlo en un video corto.




Los esquemas y el software están disponibles en el repositorio en GitHub: https://github.com/walhi/arduino_eprom27_programmer . Durante el montaje, puede cambiar de forma segura los valores de las resistencias. Es cierto que con el divisor, debe corregir ligeramente el código del boceto.



Source: https://habr.com/ru/post/462433/


All Articles