NOTA: este articulo ha sido extraído del original proveniente del sitio web varper-tech.com en la dirección http://varper-tech.com/articulo.php?idart=80. Allí podrás conseguir informacion mas detallada sobre la descarga de los archivos de código del microcontrolador y los archivos de simulación.
Resumen
Como ya en artículos anteriores se vio el manejo de un display digital de siete segmentos. En esta practica se muestra un circuito de ejemplo para el manejo de dos o mas displays. Los displays digitales, aunque han sido un poco desplazados por las nuevas tecnologías como LCD, no dejan de ser útiles sobre todo en ambientes con baja iluminación ya que estos tienen luz propia y son muy resaltantes. El método de control es bastante sencillo y solamente requiere de conocimientos básicos de microcontroladores. En esta practica se vera como manejar varios displays digitales mediante un teclado de 3x4 en el que al presionar cada tecla se visualizara en el display y cuando se presiona asterisco se decrementa el contador mientras que al presionar el numeral se incrementa. La diferencia de este articulo con respecto a los anteriores radica en que el contador es de dos dígitos y no de uno solo. Se puede hacer de varios dígitos solamente variando unas pocas líneas de código para hacer los cambios.
Materiales utilizados
- Microcontrolador PIC18F2550
- Cristal de 4MHz
- 7 Resistencias de 300ohm
- 3 Resistencias de 10K
- 2 Display digital ánodo común
Herramientas utilizadas
- MPLAB IDE
- Compilador C18
- PICKIT (o cualquier otro programador de microcontroladores PIC)
- Proteus 7.4 SP3 (o superior)
Descripción
El circuito consta de un microcontrolador que es quien se encarga de realizar la decodificación para convertir un valor numérico en formato binario a un valor numérico en formato 7 segmentos, dicha rutina se puede conseguir en la parte inferior de este articulo en la sección de archivos adjuntos. El circuito es bastante sencillo solamente se tienen que conectar directamente los displays a las salidas del microcontrolador con sus respectivas resistencias limitadoras. En la rutina de decodificación se puede elegir entre display de ánodo común y cátodo común para que el usuario pueda hacer cambios con solo ajustar los valores dentro del código fácilmente y no tener que modificar el hardware para ello.
Por otro lado la conexión del teclado matricial es bastante sencilla, como se puede apreciar en el siguiente diagrama las columnas están dispuestas como entradas mientras que las filas están dispuestas como salidas, esto es para hacer un muestreo constante de cada una de las columnas del teclado en busca de alguna tecla pulsada por el usuario, cuando esta halla sido pulsada, la rutina de control se encarga de verificar cual de todas fue la que se pulso y realizar la acción pertinente.
El código del programa ha sido implementado de la manera mas modular posible, se han hecho dos rutinas, una para descodificar el display y otra para descodificar el teclado, cada una con sus respectivos archivos de encabezado.
Gráfico 1. Circuito para el manejo de dos displays digitales.
Como se puede apreciar el circuito tiene mucho parecido al articulo con nombre Manejo de display 7 segmentos y teclado matricial, la diferencia radica en la disposición de dos displays en lugar de uno y la forma de manejar dos o mas displays digitales consiste en alimentar todos los pines correspondientes a los leds de los displays de forma común mientras que sus terminales comunes son conmutadas sincronizadamente de modo de poder "engañar" al ojo humano, en términos sencillos, mientras el displays de las decenas esta mostrando un numero, el otro esta apagado porque el terminal común esta desactivado y no circula ninguna corriente, luego este estado se invierte, se muestra el valor que deseamos para las unidades y activamos el terminal común de las unidades, esto sucede tan rápido (a razón de 100 veces por segundo) que el ojo humano logra percibir esto como si estuvieran encendidos todos los displays a la vez). Para manejar mas de dos displays se sigue la misma secuencia en la que se mostrara un dígito por vez pero de manera muy rápida.
Algoritmo implementado
Gráfico 2. Diagrama de flujo del cuerpo principal del microcontrolador
En este primer diagrama se puede apreciar que simplemente se realizan constantemente unas validaciones de las teclas que se han presionado, esto es, para verificar si se presiono la tecla numeral o asterisco e incrementar y decrementar respectivamente el contador que mostrara el valor en los displays. Además de esto se hace una validación para asignar el valor de la tecla presionada (diferente de numeral o asterisco) al contador.
Inicialmente se puede notar que se configura el timer 0 en modo de interrupciones para generar la secuencia de cambios de los displays, esta rutina de interrupciones esta descrita en el siguiente gráfico.
Gráfico 3. Diagrama de bloques de la rutina de servicio de interrupciones.
En este gráfico lo primero que se hace es una conversión del contador en un formato de cadena (String) de este modo podremos tener 01 en lugar de 1, 02 en lugar de 2 y así sucesivamente, debido a que debemos rellenar el otro display con algún valor, sin embargo si el usuario lo desea se pueden hacer validaciones para que el cero no sea mostrado del lado derecho y así utilizaremos solamente un display.
En este caso debido a que manejamos solamente dos displays, haremos la validación con una sola variable indicando dos posibles estados que son, esta es la variable unidades, (obviamente si unidades es off quiere decir que se esta trabajando con las decenas) en el caso de que esta este en off entonces pondremos en el puerto el valor de la decena correspondiente y pondremos unidades en el puerto indicado en este caso (Puerto D) y viceversa.
Para trabajar con mas de dos dígitos, es conveniente utilizar una variable contador, donde el valor de esta indicaría en que dígito se encuentra, y esta a su vez mostraría el dígito correspondiente en la cadena obtenida en la conversión de un entero a string de la variable contador. Esto puede ser hecho con una instrucción switch que se encargue de la selección de los dígitos.
Algunos cambios
En el caso de querer hacer una rutina para manejo de multiples displays, es recomendable hacer uso del circuito integrado ULN2003, el cual tiene internamente 7 transistores. Este es muy util para este tipo de aplicaciones ya que nos permite ahorrarnos espacio y hacer el circuito mucho mas simple.
No hay comentarios:
Publicar un comentario