miércoles, 18 de abril de 2012

Proyecto PIC - Reloj Digital


Descripción:


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..
Materiales:

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.

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.

Medición 1 Medición 2
HoraRetrasoHoraRetraso
01:05Ninguno5:49Ninguno
01:111 Segundo6:07Ninguno
01:141 Segundo6:11Ninguno
01:162 Segundos6:15Ninguno
01:202 Segundos6:18Ninguno
01:253 Segundos6:23Ninguno
01:354 Segundos6:26Ninguno
01:446 Segundos6:31Ninguno
01:527 Segundos6:35Ninguno
2:059 Segundos6:42Casi un segundo


Fotos del Circuito:



Referencias:

16 comentarios:

  1. Hola de casualidad no tienes el hex? me da error al compilar en la linea 18 : syntaxs error. o que programa usaste para compilar el soft, seria el pic basic? Saludos

    ResponderEliminar
  2. Hola, para compilarlo utilicé Mikrobasic PRO, que seguramente compila diferente a pic basic y por eso el error. De todas formas aquí puedes descargar todos los archivos del proyecto, incluyendo el .hex.

    https://docs.google.com/open?id=0BwRjSZDe85-IU0c5aXdIMGRiMU0

    Saludos :)

    ResponderEliminar
  3. Buenas Tardes

    Por favor podrias revisar el link del proyecto ya que no esta cargando bien, de todas formas te agradezco mucho por compartir este proyecto que me hacido de grana ayuda.

    ResponderEliminar
  4. holaa oie me podrias pasar el circuito para poder armarlo en el protooo
    necesitoo ayudaa

    ResponderEliminar
  5. Hola que tal... serias tan amable de pasar el diagrama en proteus, ya que tiene cortada algunas cosas.. desde ya muchas gracias, mi correo es luchorios2009@hotmail.com

    ResponderEliminar
  6. hola emmanuel, una consulta, donde van las tres resistencias que citaste en la lista de materiales.
    muchas gracias.

    ResponderEliminar
  7. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  8. mi correo es este jhoncm_2310@hotmail.com GRASIAS

    ResponderEliminar
  9. oye si me podrías pasar la imagen completa en proteus por favor abusando de tu generosidad, mi correo es lucro_mafalda@hotmail.com

    ResponderEliminar
  10. Me podrias pasar la imagen completa porfa, planeo implementarlo esta semana, te lo agradeceria mucho, mi correo es: claudia.lorena.95@gmail.com :)

    ResponderEliminar
  11. hola emmanuel si me podrias pasar la imagen completa del circuito espero aun la tengas xfas mi correo es carlos hernadez811@gmail.com

    ResponderEliminar
  12. Hola emmanuel me puedes apoyar con el digrama del circuito amigo estoy armando el mio en breve publicare las fotos
    montesdeoca.erik@gmail.com

    ResponderEliminar
  13. Hola alguien podrías ayudarme con unas cuantas dudas ??? mi correo es tommasjurado17@gmail.com

    ResponderEliminar
  14. buen dia, necesito el codigo y este es el mejor que encontre, pero me marca errores que no se como solucionar, ya incluso instale el mikrobasic pro para poder hacerlo pero ni asi

    me marca error 301 y 304 en la columna de symbol select6 =PORTB

    ResponderEliminar
  15. Hola parte de la falta del diagrama quiero suponer que va a VDD es decir 5 volts, positivo ya lo arme en el proto y de mas pero no funciona correctamente con el hexadecimal que problema pudiera tener podrias compartirme el diagrama divinetsop@gmail.com

    ResponderEliminar