México D.F. a 17 de Abril de 1995
Taller de Microprocesadores
Profesor:
Antonio Mondragón
Anteproyecto
Programador de EPROM´S
Integrantes:
César Villarreal
Mauricio Ordóñez
Víctor Iniestra
Objetivo:
-Desarrollar un circuito útil compatible con el kit desarrollado en clase.
-Comprender y emplear los métodos de programación de los EPROM´S.
-Proveernos de una manera fácil y económica de un programador de EPROM´S.
Alcances y Limitaciones:
Se podrán grabar EPROM´S de la familia 27XX excepto:
-2704, 2708 ya que estos requieren de tres fuentes de alimentación independientes.
-Todos aquellos cuyo voltaje de programación rebase los 12.5V. Esto último porque nuestra fuente de VPP será el DAC que no da voltajes demasiado elevados.
Nuestro programador de EPROM´S podrá grabar el contenido de la memoria del microprocesador. Como la memoria del micro es relativamente pequeña, podrán ser necesarios varios pasos de programación para llenar completamente una EPROM grande.
Asi mismo se podrán grabar EPROM´S de 24 o 28 pines. Esto cubre una rango de 2KB (2716) a 64KB (27512).
El programador comprobará el buen funcionamiento del EPROM verificando cada localidad conforme ésta se vaya escribiendo.
Diagrama a Bloques:
Analizando un 2716 y comparándolo con un 2732 nos damos cuenta que son, para fines de programación, idénticos:
Tienen las mismas patas de datos y de direcciones, excepto porque el 2732 tiene una más. Se necesitará, eso sí, redireccionar la señal VPP, podría ser a mano con un JUMPER, o con algún dispositivo no TTL que funcione como lo haría un MUX a "grandes" voltajes.
Veamos los demás:
Nos damos cuenta de que el bus de datos es el mismo para los cuatro casos. Además el bus de direcciones es el mismo, sólo se van agragando patas de direccionamiento al chip.
Proponemos:
Del micro pondremos un GAL, este gal activará cuando sea debido los siguientes componentes. Podría estar conectado a cs_extra del gal que ya se tenía para hacer cambios mínimos al kit.
Un registro de 8 FF, llamado datOut, aquí el micro pondrá los datos que deberán ser programados en el EPROM. Este registro será visto por el programa como una localidad de memoria más.
Dos registros de 8 FF c/u, dir0 y dir1. Dos localidades de memoria más para el micro. Aqui se pondrá la dirección en la que se deberá programar el dato dentro del EPROM.
datIn será como datOut, pero alrevés. Es decir, se habilitará el EPROM para lectura y el dato que de él salga se guardará en este registro de 8 FF para que se pueda verificar la programación.
Para la selección adecuada de todos estos circuitos tendremos un registro de 4 FF, llamado oe (output enable). Habilitará o no las salidas de los anteriores circuitos con la siguiente lógica:
0000: Nada se habilita.
0001: Se habilita la salida del EPROM.
0010: Se habilitan las salidas de los registros dir0 y dir1.
0100: Se habilita la salida de datOut.
1000: Se habilita datIn.
Obviamente las combinaciones activarían las salidas de más de un registro o EPROM a la vez.
Ahora veremos las conexiones al conector zif de 28 patas (donde se pondrá el EPROM).
Núm. pata 24: Núm. pata 28: 2716 2732 2764 27128 27256 27512 N/A 1 N/A N/A VPP VPP VPP A15 N/A 2 N/A N/A A12 A12 A12 A12 1 3 A7 A7 A7 A7 A7 A7 2 4 A6 A6 A6 A6 A6 A6 3 5 A5 A5 A5 A5 A5 A5 4 6 A4 A4 A4 A4 A4 A4 5 7 A3 A3 A3 A3 A3 A3 6 8 A2 A2 A2 A2 A2 A2 7 9 A1 A1 A1 A1 A1 A1 8 10 A0 A0 A0 A0 A0 A0 9 11 D0 D0 D0 D0 D0 D0 10 12 D1 D1 D1 D1 D1 D1 11 13 D2 D2 D2 D2 D2 D2 12 14 GND GND GND GND GND GND 13 15 D3 D3 D3 D3 D3 D3 14 16 D4 D4 D4 D4 D4 D4 15 17 D5 D5 D5 D5 D5 D5 16 18 D6 D6 D6 D6 D6 D6 17 19 D7 D7 D7 D7 D7 D7 18 20 E/P CE CE CE CE CE 19 21 A10 A10 A10 A10 A10 A10 20 22 OE VPP OE OE OE OE 21 23 VPP A11 A11 A11 A11 A11 22 24 A9 A9 A9 A9 A9 A9 23 25 A8 A8 A8 A8 A8 A8 24 26 VCC VCC ? A13 A13 A13 N/A 27 N/A N/A PGM PGM A14 A14 N/A 28 N/A N/A VCC VCC VCC VCC Se ve que se necesitará una decodificación en: N/A 1 N/A N/A VPP VPP VPP A15 20 22 OE VPP OE OE OE OE 21 23 VPP A11 A11 A11 A11 A11 24 26 VCC VCC ? A13 A13 A13
Otras líneas como la 27 no representa problema ya que el valor de PGM puede ser fijado por el programa obligando a A14 a tener un valor especifico.
La decodificación de VCC y de VPP proponemos hacerla mediante JUMPERS, para así asegurar el correcto acceso de la corriente al EPROM. El programa deberá avisar al usuario el cambio que se necesite hacer a los JUMPERS.
Pseudocódigo de la organización global del software:
El programa será a base de menus. Un primer menú será dedicado a la gestión de la memoria del micro. Éste será necesario para la verificación de los datos que serán programados en el EPROM.
Una segunda opción pedirá el tipo de EPROM. La tercera opción programará y verificará al EPROM. La programación y verificación será más o menos así:
datOut, datIn, dir0, dir1 y oe se definirán como apuntadores de caracteres y se les asignará el valor de la localidad de memoria donde los gal´s los mapean.
El programa pedirá la dirección de inicio en donde se encuentran los datos a programar (esto en el micro). Luego pedirá el número de datos a programar, y por último pedirá la dirección dentro del EPROM a partir de la cual se programará.
1.-Pone la dirección de programación del EPROM en dir0 y en dir1. 2.-Pone los datos en datOut. 3.-Activa datOut y datIn con OE. 4.-Dale al DAC la instrucción para que empiece a dar los 12.5V 5.-Aplica el CE del EPROM durante, al menos, 50ms. 6.-Desactiva CE del EPROM. 7.-Baja la salida del DAC a 0V. 8.-Desactiva datOut y activa datIn (Todo con OE) 9.-Activa CE del EPROM 10.-Carga datIn y comprueba lo anteriormente programado. 11.-Repite el ciclo hasta que se acaben los datos.
/*Programa que convierte archivos de tipo BINARIO a hexadecimal*/ #include#include void main (void) { FILE *archivo, *salida; int ch; archivo=fopen("binary.","r"); salida=fopen("com1:","w"); clrscr (); while (!feof(archivo)==1) { ch=(getc(archivo)); if (ch<=9) { fprintf(salida,"0"); } fprintf(salida,"%x",ch); } fclose (archivo); fclose (salida); }
/*Programa que convierte archivos de tipo BINARIO a hexadecimal*/ #include#include void main (void) { FILE *archivo, *salida; archivo=fopen("binary.","r"); salida=fopen("con","w"); clrscr (); while (!feof(archivo)==1) { fprintf(salida,"%02x",getc(archivo)); } fclose (archivo); fclose (salida); }