Hola chicos...
Aquí le damos un seguimiento para el proyecto reloj digital que he publicado hace un año. No he considerado la deriva del módulo RTC! He encontrado la deriva que más pasado 1 minuto RTC para cada 21 días, que es enorme. Esto es ya después de cambiar la orientación del xtal oscilador en el módulo de rotura del DS1307 para estar cerca del chip como sea posible, que se propuso junto con otras consideraciones, en la máxima aplicación Nota.
Opciones consideradas:
1. optimización de la RTC: mira para mejor xtal, coincidencia de capacitancias, etc, etc <--imposible
2. agregar el botón de decremento manual para el valor de los minutos <--esto significa cambios en el hardware. El camino fácil hacia fuera!!!!
3. calibración automática por el microcontrolador host
El algoritmo:
Lo que necesito es una rutina de calibración automática basada en software. Después de algunos ensayos (y realmente encontrar el tiempo para hacerlo!), se me ocurrió esto... Guardar el factor cal 21 (días por minuto) y el día se hizo la última cal en una ubicación permanente. Cada vez que el reloj se enciende (en mi caso es por las mañanas 7:05, excepto los fines de semana y festivos ;), el mcu lee estos valores y comparar con la fecha actual del RTC si múltiplos de 21 días ya ha pasado. Si sí, valor minuto decremento por la correspondiente cuenta entonces guarda actual día vuelve a la la ubicación de 'lastCalDay'. Hacer la misma comprobación en la próxima potencia...
La implementación:
Para la ubicación de cal, DS1307 tiene un 'propósito general con respaldo de batería ram con ilimitado escribe'. Necesitamos dos octetos de 8 bits para el calFactor y lastCalDay. Para contar la diferencia de días, convertimos la fecha RTC (números del mes y día) a un número entero a partir de una fecha de referencia. Para esto podemos utilizar el primer día del año en curso como la referencia, número de día 1. Esto significa que el número máximo de días entre la cal no debe exceder de 365. Número de día es conveniente para obtener la diferencia y también para guardar la fecha para ram. Sólo tiene que añadir provisión para año nuevo, cuando el conteo de días va detrás de 365 a 1. Una vez la diferencia de días se determina que entonces podemos disminuir el número de minutos. Para simplicidad de código, decidí saltar cal si el momento resultante diferencia rodará hacia atrás la cifra de horas. Attachmed para implementación de código completo, consulte.
Los resultados:
Los resultados de mi validación demostraron funcionamiento como diseñado. Por supuesto, el código y, de hecho el algoritmo todavía pueden ser optimizados para la precisión y elegancia, pero por ahora este funciona para mi proposito muy bien!
Por favor, hágamelo saber si usted necesita más detalles si desea hacer este proyecto... Sugerencias también son bienvenidas.
Gracias. ¡ Disfrute!