Die Programmlogik ist ziemlich einfach... Hier ist eine grobe Flussdiagramm (siehe oben), gefolgt von einer Textbeschreibung
Der Code, den Sie heruntergeladen haben, ist in C geschrieben, und das Projekt soll von Atmel Studio 6, geöffnet werden, die auch von mir empfohlen wird. ATMEL Studio 6 verwendet AVR GCC als seine Compiler, so dass selbst wenn Sie nicht imstande, Atmel Studio 6 (wenn Sie Windows nicht benutzten) zu verwenden sind, können Sie immer noch den Code mit AVR-GCC kompilieren.
Der Hardware-RTC-Timer (Timer 2 im asynchrone Modus) wird einen Überlauf Interrupt für jeden 256 * 128 Zecken des Kristalls 32,768 KHz ausgelöst. Dies bedeutet, dass der Interrupt ausgelöst wird, jede Sekunde. Dies wird zur Zeit den Überblick behalten. Beachten Sie, dass Interrupts den Prozessor aus dem Ruhezustand wecken können.
Es gibt eine PCINT (Pin Change Interrupt) mit der Taste verbundene. Hauptprogramm-Loop immer den Prozessor im Sleep-Modus, es sei denn, der Benutzer eine Taste drückt, um es aufwachen. Es wird entfernt bleiben, bis es fertig ist, Anzeigen der LEDs.
Die LEDs leuchten durch Logik 0 Pin verbunden mit dem gewünschten Kathode Ring fahren und fahren Logik 1, Pin Conencted der gewünschten Anode. Dies ist wie LED Matrizen arbeiten, eine wirklich grundlegende Technik. Dies leuchtet nur eine LED in einer Zeit, aber wir wollen Licht drei auf einmal, damit dies geschieht in einer Schleife, die Zyklen durch die drei LEDs wirklich schnell, schnell genug so dass der Betrachter nicht weiß, dass die LEDs tatsächlich ausschalten.
Es gibt einige nette Animationen, Darstellungslogik und Benutzeroberflächenlogik, wie im Video gezeigt.
Der Summer muss bei einer konstanten Frequenz von 4,1 KHz gefahren werden, um die lauteste erreichbare Ausgabe zu erzeugen. Dies geschieht mit zwei Timer-Interrupts, die Feuer auf 2,05 KHz Umschalten die Summer-Pin konfiguriert ist. Das gleichen Interrupt-Ereignis ist verantwortlich für Radfahren zwischen Stunde, Minute, und "gebrauchten" LEDs, so dass sie sogar Einschaltdauer.
Die zweite "Hand" und Motor wird nicht funktionieren, wenn die Batteriespannung zu niedrig ist, das ist es, Stromverbrauch (overdrained Lithium-Ionen-Batterien können dauerhaft beschädigt werden) und dem Benutzer mitteilen, dass die Batterie schwach ist.
Die Alarmeinstellungen werden gespeichert in EEPROM, das heißt, selbst wenn die Batterie komplett leer, werden die Einstellungen gespeichert werden. Die aktuelle Zeit ist eigentlich auch im EEPROM, wenn die Uhr wechselt in den Ruhezustand, aber deshalb, weil während der Entwicklung ich die Zeit möchte zu "interessant" (nicht immer ab 0) zwischen zurückgesetzt.