[Aporte] Reloj digital controlado por Infrarrojo.

Buenas tardes!
este es un aporte y pedido al mismo tiempo, e estado trabajando en una alarma casera para encender las luces de mi casa a una hora por decir a las 9pm y que se apaguen a las 6am pues bien hice un reloj con 4 alarmas programables, pero tiene un pequeño detalle se atrasa la hora después de unas horas funcionando, pregunte respecto a esto a D@arkbytes!, y me respondió acerca del uso de un crystal externo de 32khz el cual no e conseguido, si alguien lo pudiera probar y decirme si funciona con el crystal y de acuerdo al programa que hice se los agradecería, la otra opción es comentando las lineas que involucran al timer1 y des comentando las lineas que están comentadas así es como esta funcionando actualmente pero después de unas horas se atrasa el reloj.

el reloj funciona con un PIC16F887 el cual usa el puerto b para manejar 4 display de 7 segmentos , usa 5 botones para seleccionar la hora, y al presionar 2 veces rápido el botón central entra a la configuración de las alarmas, el micro trabaja con el reloj interno.

Alarmas:
1.- hora de encendido de las luces.
2.-hora de apagado de las luces.
3.-hora de encendido de las luces habitación 2.
4.- hora de apagado de las luces habitación 2.

esa es la configuración, se establece una hora y se presiona en el botón central para fijarla.

Control IR.
1.-botón central saca del menú de selección de hora y alarma.
2.-botón izquierdo configuración de alarma.
3.-botón derecho configuración de horas.

al entrar al menú se utiliza para desplazar el derecho y el izquierdo, y pues arriba y abajo cambias las horas, espero y les guste y me puedan ayudar a checar lo del cristal.

cabe mencionar que soy novato y mi código es un despapa lle pero funciona, por si lo optimizan!

Diagramas y programación en rar.

Saludos!!
 

Adjuntos

  • alarma.rar
    90.9 KB · Visitas: 44
Otra opción es que cuentes los Hz de la línea (50 o 60) para el relój (no hablo del clock del pic sino del programado)
 
entiendo que dices que cuente los pulsos que son 60c/s en mi pais, pero de donde los contaría no entiendo muy bien eso ??

con interrupciones por medio del voltaje que provee la fuente?
 
entonces tendría que hacer una adaptación de voltaje para no quemar el micro no?, al poner el diodo eliminaría la onda negativa del ciclo y tomaría como 1 transcurrido al inicio del segundo ciclo de subida así hasta contar los 60hz?
 
Ponés un díodo + una resistencia limitadora serie y un zener a masa , entonces te queda una onda "cuadrada" del voltaje que a vos te guste
 
Te quedó espectacular el relój :aplauso:

Animate y programale que si el primer dígito de las horas es cero , se apague para facilitar la lectura :D !

Además , para hacerlo distinto , los dos puntos del medio en vez de titilar al son de los segundos , podría hacer de a tres parpadeadas juntas (al compás de los segundos )

Saludos !
 
Última edición:
Lamento ser yo quien les diga que este reloj No funciona :cry:, y baso mi suposicion en que usa muchisimos delays y tiempos que no creo que se esten considerando para que no se "desajuste" el reloj, claro que sin dejar de mencionar que como proyecto de practicas es bueno :)

lo mejor es usar un DS1307.
 
Lamento ser yo quien les diga que este reloj No funciona :cry:, y baso mi suposicion en que usa muchisimos delays y tiempos que no creo que se esten considerando para que no se "desajuste" el reloj, claro que sin dejar de mencionar que como proyecto de practicas es bueno :)

lo mejor es usar un DS1307.

Pues si lees con atención puse que el reloj se adelantaba un minuto pasando varias horas en marcha, mas sin embargo me dijeron que lo podría compensar con un reloj de 32khz, para compensar la perdida de segundos que si bien al paso del tiempo se incrementan es debido al margen de error del datasheet, si usa delays de 32us que no creo que le afecten tanto ya que el conteo de segundos lo hace por medio de interrupciones, bueno no soy un pro como muchos de uds pero tengo entendido que el uso de interrupciones son prioridad para el micro?, al seleccionar la hora se usan delays que ya fueron eliminados en el programa que uso ahora, pero no los toma en cuenta el micro ya que al presionar enter reinicia la cuenta de los segundos a 0 de ahí empieza a contar los segundos si hay un atraso seria mínimo por parte de los delays?
 
Pues si lees con atención puse que el reloj se adelantaba un minuto pasando varias horas en marcha

ese tipo de relojes no solo se adelantan, tambien se atrasan con cualquier proceso, lectura de puerto serial,infrarojos y o lo que sea , cada instruccion toma un tiempo, que aunque es minimo "ES ACUMULABLE", incluso las que estan dentro de las interrupciones toman tiempo.

como te digo si quieres un reloj lo mas preciso posible usa un DS1307 son faciles de usar y economicos. maneja incluso calendario.
 
ese tipo de relojs no solo se adelantan, tambien se atrasan con cualquier proceso, lectura de puerto serial,infrarojos y o lo que sea , cada instruccion toma un tiempo, que aunque es minimo "ES ACUMULABLE", incluso las que estan dentro de las interrupciones toman tiempo.

como te digo si quieres un reloj lo mas preciso posible usa un DS1307 son faciles de usar y economicos. maneja incluso calendario.

si leei un poco es por i2c no ?, ahora lo estoy haciendo por medio de interrupciones por cambio de estado con la linea directa de un transformador y funciona muy bien no lo e dejado toda la noche encendido!, umm igual se podría hacer con ese integrado que comentas pero para la aplicación que le daré creo que es aceptable ese retardo que tiene basta con desconectar el micro y fijar la hora de nuevo cuando se desajuste que no es tan seguido!
 
si leei un poco es por i2c no ?
si es por I2C y existe una libreria para CCS, con un par de instrucciones ajustas el tiempo y tomas la informacion.

para hacerlo alarma solo comparas la informacion.

pero para la aplicación que le daré creo que es aceptable ese retardo que tiene basta con desconectar el micro y fijar la hora de nuevo cuando se desajuste que no es tan seguido!
si no requieres de presicion has de cuenta que no dije nada XD. (y)
 
si es por I2C y existe una libreria para CCS, con un par de instrucciones ajustas el tiempo y tomas la informacion.

para hacerlo alarma solo comparas la informacion.


si no requieres de presicion has de cuenta que no dije nada XD. (y)

si igual investigare ese integrado puesto que no esta demás dejar las cosas como deberían de ser, igual el código lo estoy mejorando un poco para ver si le saco mas provecho, ya que si es un reloj debe ser preciso, investigare y si logro conseguir el integrado publicare mas avances saludos!!

PD: me retiro que esta jugando Mexico :p!
 
Atrás
Arriba