Manejo de Teclados


En la edicion número 217 de Saber Electrónica comenzamos a describir el uso de teclados en proyectos con microcontroladores, vimos el teclado matricial, eliminación de rebotes, rutinas de detección de teclados simples, prioridades de teclas y la rutina para teclados matriciales, entre otros temas. En esta edición continuando con el tema, explicaremos en qué consiste la visualización mediante displays de 7 segmentos, forma de conectar dichos displays, visualización mediante el uso de decodificadores y programas de aplicación.


Desarrollo


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.

 
TABLA 1
 
TABLA 2
 
Autor: Ing. Esteban Bosernitzan
FIGURA 1
 
 
FIGURA 2
 
 
FIGURA 3
 
FIGURA 4
 
FIGURA 5
 
FIGURA 6
 
FIGURA 7
 
FIGURA 8
 
FIGURA 9


Posicionado por < ProSEO >