La lógica del programa es bastante simple... Aquí está un diagrama de flujo bruto (véase arriba), seguido por una descripción de texto
El código que has descargado está escrito en C, y el proyecto está destinado a ser abierto por Atmel Studio 6, que también es muy recomendado por mi. Atmel Studio 6 utiliza GCC AVR como su compilador por lo que incluso si no eres capaz de utilizar Atmel Studio 6 (si no se usa Windows), aún puede compilar el código utilizando GCC AVR.
El temporizador RTC hardware (temporizador 2 en el modo asincrónico) disparará una interrupción desbordamiento para cada 256 * 128 garrapatas del cristal de 32,768 KHz. Esto significa que la interrupción disparará cada un segundo. Se utiliza para realizar un seguimiento de tiempo. Recuerde que se interrumpe puede despertar al procesador del modo de espera.
Hay un PCINT (interrupción de cambio de pin) asociada a los botones. El bucle principal del programa siempre mantiene el procesador en modo de reposo, a menos que el usuario presiona un botón para despertarla. Quedo lejos hasta que ha terminado mostrando los LED.
Los LEDs se encienden por la conducción lógica 0 con el conector conectado al anillo de cátodo deseada y la conducción lógica 1 para el perno conencted al ánodo deseada. Se trata de cómo llevó trabajo de matrices, una técnica realmente fundamental. Esto sólo encenderá un LED a la vez, pero queremos a la luz tres a la vez, por lo que esto sucede en un bucle que ciclos a través de los tres LEDs realmente rápido, lo suficientemente rápido como tal que el espectador no sabe que los LED realmente apagar.
Hay algunas animaciones agradables, lógica de presentación y lógica de la interfaz de usuario, como se muestra en el video.
El zumbador debe ser conducido a una frecuencia constante de 4,1 KHz para producir la salida más viable. Esto se hace utilizando dos interrupciones de temporizador configurado para fuego a 2,05 KHz para cambiar el pin de zumbador. El mismo evento de interrupción es responsable de ciclismo entre la hora, minuto y segundo de la "mano" LED, que consiguen un ciclo de trabajo incluso.
La segunda "mano" y el motor no funcionarán si el voltaje de la batería es demasiado bajo, se trata de conservar la energía (pueden dañar permanentemente las baterías del ion del litio overdrained) y Dile al usuario que la batería está baja.
La configuración de la alarma se almacena en la EEPROM, lo cual significa que incluso si la batería se muere completamente, se almacenará la configuración. La hora actual es realmente también almacenados en EEPROM cuando el reloj se va a dormir, pero esto es porque durante el desarrollo deseo el momento de ser "interesante" (no siempre comienzo de 0) entre reinicios.