Ing. O. Richer Microprocesadores I Práctica #7 “Manejo de un Display” Trabajo en grupo. Conecte al microcontrolador 8051 un display formado por 5 dígitos a base de LED’s de siete segmentos, como se muestra en la siguiente figura. P1.0, ... P1.7 7 CONTADOR DECIMAL 5 0 6 RST EN2 EN3 La configuración que se presenta en la figura anterior, es para dígitos con ánodo común. El contador decimal que se utiliza para seleccionar uno de los cinco dígitos, pone un uno lógico solo en uno de los pines de salida del contador, manteniendo en cero el resto. La transición de cuenta que se genera del enable #2 (EN2) representa la señal de reloj al contador. Esta señal la generamos mediante el decoder contenido en la tarjeta de desarrollo. De acuerdo a esta configuración los siete segmentos de cada dígito estarán conectados al puerto 1 y es con el pin de enable del decoder (al funcionar como señal de reloj del contador), cómo la información que aparezca por el pin 1, será dirigida hacia alguno de los cinco dígitos. De esta forma, solo un dígito se mantendrá encendido a la vez. Para enviar información al siguiente dígito, deberemos de hacer que el pin EN2 vuelva a pulsar y deberemos de poner en el puerto 1 del microcontrolador la información correspondiente. El pin EN3 representa la siguiente salida del decoder de la tarjeta de desarrollo. Este pin se utiliza solo al inicio del programa para garantizar que el dígito direccionado sea el menos significativo (extrema derecha). Dado que al encender la circuitería, no sabemos en qué cuenta inicial caerá el contador decimal, es importante asegurarnos iniciar en la cuenta cero. El microcontrolador 8051, se deberá encargar de hacer desplegar la información de una manera ordenada y correcta. El programa deberá encender solo un dígito a la vez manteniendo el resto apagado. El dígito encendido en ese momento, deberá mantenerse así por un tiempo específico. Enseguida, deberá apagar el dígito y encender el dígito contiguo a la izquierda con su información correspondiente. Mantenga encendido este dígito por el mismo tiempo que mantuvo el dígito anterior. Proceda de esta manera con el resto de los dígitos. Repita el procedimiento anterior una y otra vez a fin de lograr la ilusión visual de que todos los dígitos están encendidos a la vez (realice pruebas). Construya en software una tabla que le permita decodificar de binario a siete segmentos cada uno de los caracteres numéricos (del 0 al 9) que se desea enviar a desplegar, según la figura que se presenta a continuación: Despliegue el arreglo de números contenidos dentro de un buffer que inicie en la dirección 30H de la memoria RAM residente. El programa deberá desplegar el primer caracter en el dígito menos significativo por tres segundos. Enseguida, deberá correr al siguiente dígito a la izquierda el primer caracter y colocar como dígito menos significativo el caracter que le siga en el buffer. Ambos caracteres se deberán desplegar por tres segundos. El proceso deberá repetirse de manera similar hasta que el caracter leído dentro del buffer sea el caracter nulo (NUL). Asuma que todos los caracteres que integran el buffer están representados bajo código ASCII. Mida el consumo de corriente durante la operación del programa. Verifique: •Cada parte de su programa por separado utilizando el simulador para comprobar el correcto funcionamiento de aquellas partes del software que convenga simular, antes de cargar al microcontrolador el software e interaccionar con el hardware. •El consumo de corriente de un dígito encendido todo el tiempo con el caracter “5” a una intensidad de brillo similar a la de su indicador digital. Precauciones: •La cantidad de corriente que estará solicitando cada dígito dependerá del número de segmentos encendido y del tamaño mismo del dígito. Es probable que la corriente que soporte el contador decimal no sea suficiente para manejar el display. En este caso, deberá de agregar un buffer entre los pines del decoder y el pin de ánodo común de cada dígito. Investigue sobre este punto antes de hacer pruebas, de lo contrario corre el riesgo de quemar el contador. •Si no se cuenta con dígitos de ánodo común, sino lo que se tiene disponible son dígitos de cátodo común, agregue a la salida del contador una compuerta NOT a cada pin de manera que ahora todas las salidas se mantengan en uno excepto aquella direccionada. Conecte estos pines al cátodo común de cada dígito. Pre-repote: 1. Entregue el listado del programa. 2. Una copia del hardware utilizado para la realización de la práctica. 3. Lista de material requerido. 4. Cálculo del consumo de corriente promedio estimado durante la operación del circuito asumiendo que solo un dígito estará siendo encendido a la vez siendo que se estuviera desplegando el caracter 5 en cada uno de estos dígitos. 5. Cálculo del consumo de corriente estimado durante el encendido en forma permanente que tendría un dígito si estuviera desplegando el número 5. Reporte: No olvide incluir como parte de su reporte los puntos siguientes: 1. Incluya en una hoja el tiempo de encendido por dígito que se utilizó, el consumo de corriente promedio registrado y el consumo de corriente registrado para un dígito encendido en forma permanente con el caracter “5”. 2. ¿Vale la pena encender solo un dígito a la vez para ahorrar energía o el resultado es el mismo que encender en forma permanente todos los dígitos? Precaución: Si se piensa en utilizar las instrucciones que se muestran a continuación para hacer que la salida EN2 del decoder contenido en el kit DTK-31 se vaya a cero y de esta forma generar una transición negativa en la entrada de reloj del contador, no va a funcionar. CLR P2.7 SETB P2.6 CLR P2.5 En la figura que aparece al inicio de este documento es necesario estar generando un pulso por el EN2 cada vez que deseamos encender el siguiente display. Si utilizamos las tres instrucciones presentadas el problema que tenemos es que éstas se encuentran almacenadas en memoria RAM externa. El valor que coloquemos en P2.7 se va a ver afectado cuando se haga el fetch de la instrucción SETB P2.6. Como esta instrucción se encuentra en la RAM externa, aparecerá por el puerto 0 y 2 completos la dirección donde se encuentra almacenada. Esto hará que se modifique el valor de cero que habíamos puesto en P2.7. Igual va a suceder cuando se ejecute la instrucción SETB P2.6. Se va a llevar a uno el pin 6 del puerto 2 pero al hacerse el fetch de la siguiente instrucción, este valor se va a ver modificado. Esta forma de tratar de hacer que el enable 2 del decoder se vaya a cero se podría lograr solo si no tuviéramos conectada memoria externa al microcontrolador. Solo de esta forma, podríamos asegurar que el microcontrolador no estará colocando direcciones por el puerto 0 y 2 cada vez que haga un fetch de una instrucción. La forma que podemos utilizar con seguridad es hacer una escritura o lectura a una dirección que se encuentre dentro del rango que hace habilitar el EN2 del decoder. Sabemos que la EPROM del DTK-31 es de 8k y se habilita con una dirección que se encuentra dentro del rango 0000H a 1FFFH. La RAM de 8K se habilita con el EN1 y su rango de direcciones va de la 2000H a la 3FFFH. El EN2 por lo tanto, queda habilitado al manejar una dirección dentro del rango 4000H a 5FFFH. Así que una lectura o escritura a cualquier dirección dentro de este rango de direcciones, producirá un pulso por el pin EN2. La secuencia de instrucciones sería: MOV DPTR, #4000H MOVX A,@DPTR Esto hará que al ejecutarse la instrucción MOVX, se produzca un pulso por el EN2 que durará una fracción del ciclo de memoria que es cuando se está ejecutando la instrucción. Otro enfoque diferente lo presenta la posibilidad de utilizar un latch externo de 8 bits para manejar los enables de los displays. El latch debe tener carga paralela. La carga la estaremos haciendo del puerto 0. La salida del match irá a cada uno de los ánodos de los displays. La siguiente figura ilustra el hardware externo que estaríamos utilizando bajo este nuevo enfoque. En este caso, ya no sería necesario utilizar un contador decimal como se propone al inicio de este documento. Note como es necesario que la señal de write del microcontrolador la amarremos con la señal de EN2 del decoder. Esto es necesario debido a que si solo utilizamos el pin EN2 lo que estaremos cargando al latch será la parte baja de la dirección de la instrucción MOVX. Es necesario esperar al micro que flote el puerto 0 y lo convierta en bus de datos para que ponga el contenido el acumulador y sea esta información la que se cargue al match. En software podremos estarle dando rotate al byte que tengamos en el acumulador para encender el siguiente display. De esta manera, no tendremos ue hacer uso de un contador sino que desde software a intervalos regulares de tiempo estaremos decidiendo qué display encender. Carga paralela 8 P0 Latch uProc. LOAD Decoder EN0 EN1 EN2 WR P2.7 P2.6 P2.5 Anodo 3 Anodo 2 Anodo 1