Microprocesadores I Práctica #7 “Manejo de un Display” Trabajo en

Anuncio
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
Descargar