Existen varias configuraciones para manipular los displays de 7 segmentos cuando se desea realizar proyectos. En esta ocasión, estaremos mostrando algunas de estas configuraciones indicando las ventajas y desventajas de cada configuración y se diseñará un reloj digital con la más adecuada (según los criterios del autor).
Se asume que los displays 7 segmentos están controlados por un microcontrolador que se encuentra en el módulo Arduino.
1. Conexión directa
Aquí se conecta el display directamente a los pines del microcontrolador. Este display puede ser de ánodo común o de cátodo común. En la figura 1 se muestra la conexión del display de cátodo común.
Figura 1. Conexión directa |
En esta conexión se consumen 7 pines del uC por display. Para el reloj digital necesitamos 6 displays, entonces estaríamos requiriendo un uC de 6 x 7 = 42 pines. Esto sería un desperdicio de pines y de potencia, ya que cada pin maneja entre 20 a 30 mA entonces para 42 pines la potencia media consumida sería 25mA X 42 = 1.05 A. (lo cual es bastante para un uC).
Solo se podría usar 1 ó 2 displays con esta configuración, pero la programación sería más sencilla.
2. Multiplexión en paralelo
Aquí se conectan varios displays en paralelo en un mismo puerto que puede ser el A0 - A7 y la tierra o alimentación de los displays se conectan a transistores bipolares que funcionan como interruptores, activando sólo un display por un periodo de tiempo pequeño. Este periodo tiene que ser menor a la persistencia visual tp < 100ms. La configuración se muestra en la figura 2.
Figura 2. Conexión directa en paralelo. |
Figura 3. Conexión en cascada. |
Figura 4. Reloj completo |
Comentarios acerca del programa:
- En la función setup, además de configurar los pines de entrada y salida usados también se configura el Timer1 para que cuente cada segundo. El timer1 es de 16 bits y comienza a contar en 0. Cuando el contador llega al valor de OCR1A, la cuenta se reinicia a 0 y se produce una interrupción interna. El valor de OCR1A se determina de acuerdo a la siguiente fórmula:
El prescalador divide esta frecuencia haciendo que el temporizador cuente más lento. En este caso particular el prescalador se configura con 1024.
Tp es el tiempo deseado en segundos.
- Cuando se produce la interrupción interna el programa salta a la función de interrupción ISR(TIMER1_COMPA_vect) y ejecuta lo que esta dentro de la función. Dentro de esta función se incrementa la cuenta de segundos, minutos y horas. Cuando termina la ejecución de la función, el vector del programa vuelve donde se quedó, en algún punto del programa principal (void loop()).
Los resultados de la simulación del proyecto se pueden apreciar en el siguiente video. Para mayores detalles también pueden revisar los vídeos relacionados en las sugerencias al final del vídeo. Estos vídeos tratan acerca del desarrollo del proyecto paso a paso y acerca de la utilización del software.