|
Lectura Mediante Interrupciones
Leer permanentemente el teclado en busca de una
tecla presionada y que ninguna haya sido presionada
es una pérdida de tiempo y de poca eficiencia.
Es mejor detectar cuando una tecla es presionada
mediante hardware y después activar automáticamente
una subrutina de detección de tecla. Para
ello el puerto B tiene implementado una interrupción
al cambio de valor en los pines RB<7:4> cuando
son entradas. Una vez activada la interrupción
y detectado un cambio en la parte alta del puerto
B, se activa la rutina de exploración de
teclado.
VISUALIZACION MEDIANTE DISPLAYS DE 7 SEGMENTOS
Características de los displays de 7
segmentos
El display de 7 segmentos es uno de los dispositivos
más utilizados para visualizar números
y otros caracteres. Cada segmento está conformado
por elementos que brillan o se oscurecen según
circule a través de ellos una corriente de
pequeña intensidad.
Los que se van a describir en esta sección
corresponden a los displays conformados por 7 leds,
los cuales tienen unidos los terminales en un punto
común. Si se unen todos los ánodos
es de tipo ánodo común, mientras que
si se unen los cátodos son del tipo cátodo
común. Su aplicación es indistinta
y depende de qué tipo de decodificados se
utilice.
El orden de las conexiones se muestran en la figura.
Los pines 3 y 8 están internamente conectados
y corresponden al terminal común. Los segmentos
se ordenan con letras desde la A hasta la G en forma
horaria, comenzando por el segmento superior. El
punto decimal está ubicado a la derecha del
número. Existen varios tamaños de
display, desde 0.54 pulgadas hasta grandes de 10
pulgadas. Por lo general, en los display de pequeño
tamaño, los segmentos están conformados
por un solo led, pero los grandes pueden ser de
tipo compuesto.
Los displays son funcionales y pueden generar números,
caracteres alfabéticos y efectos especiales,
siendo muy práctica su aplicación.
Hay que tener en cuenta que no todas las letras
del alfabeto pueden ser representadas con este tipo
de display. En la figura se muestran algunos caracteres
posibles.
Forma de conectar los displays de 7 segmentos
Existen dos formas de conectar los displays de
siete segmentos a los microcontroladores. La primera
es utilizar siete líneas que controlen cada
segmento del display y la otra es utilizando un
decodificador BCD a 7 segmentos.
Cada una de estas alternativas tiene sus pro y sus
contras, explicadas en detalle en la tabla 1. Para
la conexión a través del decodificador,
éste se encarga de transformar el valor BCD
en el código para encender correctamente
los segmentos. En el caso de tener una conexión
directa, la decodificación debemos hacerla
mediante software.
Para ello implementamos una subrutina con la lectura
de una tabla, de manera de tener el valor en BCD
y retornar de la subrutina el valor decodificado
de los segmentos.
En la tabla 2 se muestran los valores a decodificar
para displays cátodo común y ánodo
común.
Esta tabla se aplica solamente si cada pin del puerto
se conecta como se indica en la figura 6. Si por
alguna razón, es más sencillo hacer
otra conexión debido al diseño de
la placa, la tabla deberá cambiarse por los
códigos correspondientes.
Visualización mediante el uso de decodificador
Este programa lo que se hace es tomar el valor
a mostrar y colocarlo en el puerto. Si el decodificador
está ubicado en las líneas RB<3:0>
el programa queda
movf VALOR,w ;carga el número en W
movwf PORTB ;saca el número por el
;puerto
Si vamos a utilizar el punto decimal, debemos comprobar
su estado en el momento de sacar el número
por el puerto B. La variable PDECIMAL contiene el
valor 0 si éste está apagado y 0x80
si el punto está encendido. Si el punto decimal
está conectado al pin RB7, el programa queda:
movf VALOR,w ;carga el número en W
iorwf PDECIMAL,w ;Or entre PDECIMAL y el
;número almacenado en W
movwf PORTB ;saca el número y el
;punto decimal por
;el puerto
Visualización sin Uso de Decodificador
El programa es similar al sistema con decodificador,
sólo que se intercala una instrucción
de llamada a la subrutina decodificadora. Esta decodifica
el valor y devuelve el código para mostrarlo
en el display.
Multiplexación de Displays
Cuando se utiliza un solo display mediante un decodificador,
se utilizan 4 líneas que salen del microcontrolador
al decodificador, pero cuando una aplicación
necesita 4 displays no es posible conectarlos a
todos mediante sus correspondientes líneas,
ya que necesitaríamos 12 líneas de
salida. Una forma de conectar los 4 displays con
menor cantidad de líneas es mediante una
multiplexación de displays. En este tipo
de conexión los displays comparten las mismas
líneas de datos, pero tienen habilitadores
por separado. De esta manera se utilizan solamente
8 líneas para manejar los cuatro displays.
Observe la figura 7 y 8.
Para utilizar este tipo de conexión se debe
dividir el tiempo entre cuatro y mostrar durante
unos pocos milisegundos el dígito correspondiente.
Si queremos mostrar el número 1234
debemos habilitar el primer display poniendo un
0 en la línea RA3 y enviando el valor 1
al decodificador conectado al puerto B. Después
de un tiempo se coloca un 1 en RA3 y se selecciona
el segundo dislpay colocando un 0 en la línea
RA2 y enviando un 2 al decodificador.
Pasado el tiempo se coloca la línea RA2 en
1 y se continúa con los mismos pasos para
los otros dígitos.
El tiempo que permanece encendido cada display está
determinado por el tiempo de refresco del ojo humano.
Este no reconoce más de 25 cuadros por segundo,
por lo que el tiempo de refresco de cada display
es el valor del tiempo total, dividido la cantidad
de displays
0,04 seg
= 0,01seg
4 displays
Este tiempo es teórico y debe ajustarse
experimentalmente. Los mejores resultados se obtienen
con una frecuencia de muestreo superior a 25Hz,
pero al incrementar la frecuencia total se desperdicia
mucho tiempo en el refresco y pueden aparecer algunos
efectos no deseados, como el encendido débil
de algunos segmentos que corresponden al dígito
anteriormente mostrado.
Multiplexación Mediante Interrupciones
de TIMER0
En el caso anterior, el retardo de tiempo requerido
para la multiplexación de displays es tiempo
perdido, ya que no se realiza ninguna otra función.
Una forma de aprovechar el tiempo de retardo es
utilizando la interrupción del TIMER0. Cuando
el TIMER0 rebasa de la cuenta de 0xFF a 00 genera
una interrupción, la cual es empleada para
generar una base de tiempo. Cada vez que se atienda
a la interrupción TIMER0 se alternan rotativamente
los dígitos a mostrar por el puerto B.
En la figura 8 se muestra un diagrama de funcionamiento
del programa. Los cuatro dígitos a mostrar
en cada display están en cuatro registros
llamados DIG0, DIG1, DIG2 y DIG3. Cada vez que se
atienda la interrupción un contador incrementa
en 1 y se coloca el registro DIGx en el puerto B
según corresponda el valor del contador.
Para obtener 10 ms de retardo de tiempo, se debe
programar al prescaler de TIMER0 con el valor de
256 y al registro TMR0 con 217, que es el valor
que incrementa en 39 unidades para llegar a rebasar
y generar una interrupción. Observe la figura
9.
|