CIRCUITOS ELECTRÓNICOS DIGITALES ESCUELA POLITÉCNICA SUPERIOR - UNIVERSIDAD AUTÓNOMA DE MADRID Práctica 4 HARDWARE: Funciones complejas con EPROMs Controlador industrial con contador + EPROM E. Boemo, 2016 Observación: Lea ambos enunciados y podrá descubrir que con un solo fichero Hex puede tener en la EPROM los contenidos necesarios para ambos problemas. No monte cables por encima de la EPROM pues puede necesitar quitarla para reprogramarla. El Problema 2 puede hacerse reutilizando la mayoría de las conexiones del Problema 1. Problema 1 (60% de la nota de la sesión HW) Concepto de LUT (look-up table). Una memoria tipo ROM es ideal para construir circuitos combinacionales (tablas) que realicen funciones lógicas o aritméticas complejas de muchas variables de entradas (caben tantas como línea de address tenga la ROM). Cuando una ROM se utiliza con este fin y no para almacenar un programa, se le llama LUT (look-up table). En ese ejercicio se practica el concepto anterior. Se pide diseñar y construir un circuito que calcule algunos valores de funciones trigonométricas. Cada estudiante tiene asignado un rango de ángulos varía según el último número de su DNI. Además, el circuito incluye un modo TEST para probar los LEDs del equipo del lab. La entrada del circuito es un ángulo β (un número binario natural), que es diferente para cada estudiante. La salida del circuito es un número de 8 bits que indica - en formato BCD - las 2 primeras cifras después de la coma del valor de una función trigonométrica. Por ejemplo, si sen 30º = 0,500000, se pretende que en la dirección 30 de la memoria (dirección 0001 1110 en binario ó 1E en hexa) contenga el valor 50 en BCD (0101 0000). Para repartir el trabajo, cada estudiante es responsable de una función trigonométrica y de un determinado rango de ángulos. La función trigonométrica se especifica en la siguiente tabla: Turno Martes Jueves Viernes M Viernes T Responsabilidad Estudiante 1 del grupo sen β cos β tan β sec β Responsabilidad Estudiante 2 del grupo cos β sen β cotg β cosec β Se entenderá como Estudiante 1 al mayor (la persona de más edad). En lugar de almacenar todos los valores de una función trigonométrica como ocurre en circuitos de calculadoras, sintetizadores de onda, pianos electrónicos, etc., el rango de ángulos se reducirá a sólo 5 valores. De este modo se simplifica la práctica y puede ser realizada en el tiempo asignado. Los rangos son: Estudiante 1: Cinco valores a pasos de 1º, comenzando con el ángulo que se obtiene de sumar 10º al dígito menos significativo del DNI. Estudiante 2: Cinco valores a pasos de 1º, comenzando con el ángulo que se obtiene de sumar 30º al dígito menos significativo del DNI. (Lea bien lo anterior; es importante sumar 10º para que los ángulos no sean demasiado pequeños y se repitan valores. Y es importante sumar 30º para que las posiciones de memoria que requiere cada estudiante del grupo estén alejadas). En resumen, cada estudiante debe hacer su propio fichero Intel Hex. Después juntar los records en un solo fichero de texto. El Estudiante 1 aporta la primera línea, el Estudiante 2 aporta la segunda, y finalmente agregan juntos las líneas del Modo TEST (que se describe abajo) y una última línea de fin de fichero (:00000001FF). Con una sola grabación de la EEPROM se resuelven todos casos, pues los datos se grabarán en diferentes zonas (páginas) de la memoria. Incluso agregando una primera línea adicional al fichero HEX, puede grabar en la parte inicial de la EPROM los datos que utilizará para el segundo ejercicio (el semáforo). Se pide que, para verificar el circuito, las líneas A7 y A6 sirvan para cambiar de página del siguiente modo: Con A7A6 = 10 deben salir los valores calculados por el Estudiante 1. Con A7A6 = 11 deben salir los valores calculados por el Estudiante 2. Además, el circuito debe tener un Modo TEST para verificar los LEDs del tablero entrenador, que da lugar a dos líneas más en el fichero Intel Hex. Debe funcionar de la siguiente manera: Cuando A7A6 = 00 y A[5:0] = 111111, debe salir D[7:0] = 10101010. Cuando A7A6 = 01 y A[5:0] = 111111, debe salir D[7:0] = 01010101. Montaje HW: Las líneas de dirección A[5:0] se usan para introducir el valor del ángulo en binario y deben conectarse a interruptores. Las líneas A7 y A6 también se conectan a interruptores y se usan para paginar la memoria. Ese detalle debe ser tenido en cuenta por cada estudiante al escribir la dirección inicial en su parte del fichero Hex y también para el Modo TEST. Los LEDs del entrenador se utilizarán para mostrar cada resultado y se conectarán al bus de datos D[7:0] de la memoria Muy importante: El resto de las líneas de dirección deben conectarse a cero para evitar direcciones no previstas. Las señales de control OE, WR, CS, etc. deben fijarse a Vcc o GND tal como indica la hoja de datos de la EPROM. La pata 1 llamada NC, debe quedar NC (No Connect). Problema 2 (40% de la nota de la sesión HW): Sistema de Control basado en ROM (Concepto de Microprograma) Utilizar el contador 74HC163, puertas adicionales (para reiniciar el contador en el momento adecuado) y la memoria E2PROM para hacer el control de un semáforo simplificado (sin sensor de coches en Abascal) similar al de la Práctica 3 sobre FSMs. Turno Martes: 2 ciclos verde y un 3er ciclo verde-ámbar en cada sentido. Turno Jueves: 3 ciclos verde y un 4to ciclo verde-ámbar en cada sentido. Turno Viernes Mañana: 4 ciclos verde y un 5to ciclo verde-ámbar en cada sentido. Turno Viernes Tarde: 5 ciclos verde y un 6to ciclo verde-ámbar en cada sentido. Observaciones: No debe desmontar el circuito anterior; le vale casi todo. Aproveche para probar el semáforo que la tarjeta entrenadora tiene justamente LEDs verdes, amarillos y rojo. Antes de montar el contador, puede verificar su semáforo “contando” manualmente con los interruptores poniéndolos a 0000-0001-0010--etc. Apéndice A: FORMATO INTEL HEX El primer paso en la grabación de una memoria tipo EEPROM es escribir los datos que se desean introducir en un fichero de texto con un formato compatible con los grabadores de EPROMs que se disponen en el laboratorio. De todos ellos, uno de los más usados es el Intel HEX. Un archivo HEX típico tiene el siguiente aspecto: :10008000AF5F67F0602703E0322CFA92007780C3FD :1000900089001C6B7EA7CA9200FE10D2AA00477D81 :0B00A00080FA92006F3600C3A00076CB :00000001FF Los datos se dividen en campos (records), cada uno en una línea. Tomando como ejemplo la primera línea, el formato es: El primer carácter (:) indica el comienzo de un campo. Los dos caracteres siguientes indican la longitud (número de datos) en bytes del campo como un número hexadecimal de dos cifras. Por ejemplo, este valor es 10 (siempre en hexa) para el primer campo del ejemplo. Es decir, 16 (en decimal) bytes; (16 números de 8 bits). Usualmente, no se graban más de 16 datos por record pues esto facilita la visualización de los mismos. A continuación, los cuatro caracteres siguientes indican la posición inicial de memoria donde se cargarán los datos del campo representada como un número hexadecimal de cuatro cifras (0x0080 en hexa en el ejemplo; o sea, 128 decimal) Los dos caracteres siguientes indican el tipo de campo, 00 si se trata de datos, 01 para fin de fichero y 02 para dirección extendida (esta última opción escapa del contenido de la asignatura CED). A continuación vienen los datos (que internamente en la memoria son números binarios de 8 bits); cada uno de ellos representado en el formato Intel Hex como un número hexadecimal de dos cifras (dos caracteres por dato). Por último, los dos últimos caracteres son el checksum. Este checksum se calcula de manera que la suma de todos los bytes del campo más el propio checksum sea 0x00 (00 en hexadecimal). Sólo se considera el byte (8 bits o dos caracteres hexa) menos significativo de la suma. Si Ud. no ha entendido el párrafo anterior, lo más sencillo es proceder como se indica abajo. Por ejemplo, para la primera línea (record) el checksum vale FD y se ha obtenido así: Primer Paso: Se suman todos los bytes del record, con excepción del carácter correspondiente a los dos puntos. Es decir: 10+00+80+00+AF+5F+67+F0+60+27+03+E0+32+2C+FA+92+00+77+80+C3 = 803 Segundo Paso: Se trunca el resultado y se trabaja solo con el byte menos significativo. En este caso, 03. A este número se le halla el complemento a 2. Es decir, se deben cambiar los 1 por 0 y viceversa (complemento a 1) y después sumar 1. En el ejemplo sería: 03 = 0000 0011 Complemento a 1 de 03 = 1111 1100 Complemento a 2 de 03 = 1111 1100 + 1 = 1111 1101 En número resultante, que en hexa se expresa como FD, es justamente el checksum del record. Con una calculadora hexa, puede verificar que lo anterior es igual a hacer 100 menos el 03 de la suma: 100-03=FD. El último campo (la última línea) siempre tiene la misma forma, e indica el fin de archivo (campo de tipo 01).También lleva checksum. Apéndice B: Calculadora de utilidad para la Práctica 4 Si Ud. no se acostumbra a sumar a mano en hexa, puede utilizar la calculadora del Windows (en modo “programador”, hexa y byte). Si además usa Android, puede bajar una calculadora hexadecimal a su teléfono o tableta. Por ejemplo, una llamada Number System Converter + Calculator que está en: https://play.google.com/store/apps/details?id=com.somil.number&hl=es_419