De programmalogica is vrij simpel... Hier is een ruwe stroomschema (zie hierboven), gevolgd door een tekstbeschrijving
De code die u hebt gedownload is geschreven in C en het project is bedoeld om te worden geopend door Atmel Studio 6, dat ook sterk door me aanbevolen is. Atmel Studio 6 gebruikt AVR GCC als haar compiler, dus zelfs als u niet kundig voor toepassing van Atmel Studio 6 (als u niet met behulp van Windows), kunt u nog steeds het compileren van de code met behulp van AVR GCC.
De hardware RTC timer (timer 2 in asynchroon modus) zal een overflow interrupt voor elke 256 * 128 teken van het 32.768 KHz kristal brand. Dit betekent dat de interrupt zal brand elke één seconde. Dit wordt gebruikt voor het bijhouden van de tijd. Vergeet niet dat onderbreekt de processor uit de slaapstand kunnen wakker.
Er is een PCINT (pin wijzigen interrupt) die zijn gekoppeld aan de knoppen. De belangrijkste programma lus houdt altijd de processor in de slaapmodus staat, tenzij de gebruiker op een knop drukt om het wakker te worden. Het blijf weg totdat het klaar is met de LED's weer te geven.
De LEDs worden verlicht door het rijden van logica 0 tot en met de pin verbonden met de gewenste kathode ring, en logica 1 rijden naar de pin via naar de gewenste anode. Dit is hoe LED matrices werk, een werkelijk fundamentele techniek. Dit zal alleen licht een LED op een moment, maar we willen drie tegelijk licht, zodat dit gebeurt in een lus die doorloopt naar de drie LED's echt snel, snel genoeg zodat de kijker niet weten dat de LEDs daadwerkelijk uit te schakelen.
Er zijn enkele leuke animaties, presentatie logica en gebruikersinterfacelogica, zoals aangetoond in de video.
De zoemer moet worden gereden met een constante frequentie van 4.1 KHz tot de luidste output haalbaar. Dit wordt gedaan met behulp van twee timer interrupts die is geconfigureerd voor het vuur op 2.05 KHz tot de pin van de zoemer in-/ uitschakelen. Dezelfde interrupt gebeurtenis is verantwoordelijk voor het fietsen tussen uur, minuut en tweede "hand" LEDs, zodat zij een zelfs duty cycle krijgen.
De tweede "hand" en de motor zal niet werken als de accuspanning te laag is, dat dit is om te sparen (overdrained lithium-ion batterijen kunnen permanent beschadigd raken), en om te vertellen van de gebruiker dat de batterij laag is.
De alarminstellingen worden opgeslagen in EEPROM, wat betekent dat zelfs als de batterij volledig sterft, de instellingen zullen bewaard worden. De huidige tijd is eigenlijk ook opgeslagen in EEPROM wanneer het horloge gaat slapen, maar dit is omdat tijdens de ontwikkeling wil ik de tijd om te worden "interessante" (niet altijd start from 0) tussen opnieuw ingesteld.