Reloj digital, utilizando displays de 7 segmentos para mostrar la hora. Cuenta con la opción de editar la hora utilizando botones, y con segundero para mejor visualización.
Características:
- Reloj de 12 horas.
- Se entra al "modo de edición" al presionar dicho botón.
- El segundero se reinicia al entrar al modo edición,
- Se aumenta la hora al presionar el botón hora, y los minutos al presionar el botón minuto.
- Para salir del modo edición, se presionan el botón de nuevo..
- Protoboard
- PIC16F628A
- Decodificador BCD a 7 Segmentos(74LS47)
- 6 Displays de 7 Segmentos de ánodo común
- 3 Push buttons
- 1 Led
- 3 Resistencias de 220 Ohms
- Batería de 9V
- Porta Pila
- Cable para conexiones
Diagrama de Conexiones
Nota: En el diagrama se omiten las conexiones a tierra y corriente del PIC y el decodificador por simplicidad, puedes ver el diagrama del PIC AQUÍ, y el decodificador AQUÍ, para ver en que pin conectarlos.
Funcionamiento
El microcontrolador PIC es el responsable de todas las funciones del circuito. El circuito proveerá las salidas en binario para poder mostrar los diferentes números en los displays mediante el puerto B.
Ejemplo: Si desearamos mostrar el número 7 en los display, daríamos el valor binario 0111, al puerto B, lo que el decodificador 74LS47 pasaría a las salidas para poder mostrar un 7 en los displays.
Ejemplo: Si desearamos mostrar el número 7 en los display, daríamos el valor binario 0111, al puerto B, lo que el decodificador 74LS47 pasaría a las salidas para poder mostrar un 7 en los displays.
De esta forma podemos mostrar el número que deseemos en los displays, pero debido a que las conexiones de los displays están multiplexadas, normalmente se mostraría el mismo número en todos los displays(algo que no nos conviene ya que queremos un reloj). Esto lo arreglará el PIC, prendiendo y apagando los displays en cuestión de segundos para poder dar la apariencia al ojo humano de que no están parpadeando, y muestran diferentes números. Si deseas saber más sobre multiplexación, puedes leer este post que realice con un ejemplo más sencillo.
Obviamente nosotros no queremos mostrar cualquier número en los displays, queremos mostrar la hora, usando un timer. Esto significa que los displays cambiarán con el tiempo, cada uno dependiendo de los demás. Por ejemplo cuando las unidades del segundero lleguen a un número mayor a 10, estos se deben reiniciar a 0, y sumar uno a la decena del segundero. Entonces cuando el segundero llegue a 6 (que serían 60 segundos), se debe reiniciar también, y aumentar 1 a los minutos, y así sucesivamente.
El PIC se encargara de toda esta lógica.
Pero medir los segundos no es tarea fácil, agregando además que tenemos que dar retrasos entre el código para poder visualizar correctamente los displays multiplexados, por esto me fue difícil ajustar el reloj lo más posible a los segundos, ya que no pude determinar cuanto tiempo tarda en ejecutar código, para compensarlo y ajustar el segundero lo mejor posible.
Ahora, el reloj sería inservible si solo se reiniciara al apagarlo y no nos diera la opción de editarlo. Por lo tanto se da la opción de editar las horas y minutos mediante dos push buttons. Al presionar el botán de editar, el reloj se detendrá y se pondrá a las 12:00, reiniciando los segundos a 0. Entonces presionando el botón hora, el PIC detectará el alto voltaje y aumentará en 1 las horas (que pasará a ser la 1, ya que es un reloj de 12 horas). Lo mismo con el botón de minutos.
Al desconectar el circuito, el reloj se reiniciará, y la próxima vez que se conecte estará en las 12 en punto.
Código
Pruebas
Las siguientes pruebas fueron hechas poniendo a funcionar el reloj, al mismo tiempo que el reloj de una computadora. Cabe destacar que estas pruebas no son perfectas, ya que existe el error humano de si en realidad empezaron los dos relojes al mismo tiempo(cosa que obviamente no sucedió). En la primera medición, hubo un total de 9 segundos de retraso en 1 hora, lo cual no es nada eficiente, y no sería aceptable en un reloj. En la segunda medición, después de algunas modificaciones a la programación del PIC, el retraso se redujo a poco menos de 1 segundo por hora, lo que sigue siendo ineficiente, pero fue lo más preciso a lo que pude llegar, sin utilizar un oscilador externo.
Las siguientes pruebas fueron hechas poniendo a funcionar el reloj, al mismo tiempo que el reloj de una computadora. Cabe destacar que estas pruebas no son perfectas, ya que existe el error humano de si en realidad empezaron los dos relojes al mismo tiempo(cosa que obviamente no sucedió). En la primera medición, hubo un total de 9 segundos de retraso en 1 hora, lo cual no es nada eficiente, y no sería aceptable en un reloj. En la segunda medición, después de algunas modificaciones a la programación del PIC, el retraso se redujo a poco menos de 1 segundo por hora, lo que sigue siendo ineficiente, pero fue lo más preciso a lo que pude llegar, sin utilizar un oscilador externo.
Medición 1 | Medición 2 | ||
Hora | Retraso | Hora | Retraso |
01:05 | Ninguno | 5:49 | Ninguno |
01:11 | 1 Segundo | 6:07 | Ninguno |
01:14 | 1 Segundo | 6:11 | Ninguno |
01:16 | 2 Segundos | 6:15 | Ninguno |
01:20 | 2 Segundos | 6:18 | Ninguno |
01:25 | 3 Segundos | 6:23 | Ninguno |
01:35 | 4 Segundos | 6:26 | Ninguno |
01:44 | 6 Segundos | 6:31 | Ninguno |
01:52 | 7 Segundos | 6:35 | Ninguno |
2:05 | 9 Segundos | 6:42 | Casi un segundo |
Fotos del Circuito: