Stap 8:
Ik gebruikte WinAVR te compileren en de USB Pocket programmeur van Sparkfun de code te downloaden in de AVR-chip, maar zou u AVR Studio en welke programmeur u bent gewend; enkel ben zeker dienovereenkomstig te wijzigen de makefile. De AVR fuse-bits zijn de standaardwaarden.
Programmawerking
Kortom, de uC wacht in slaapstand totdat het is gewekt door een hardware-interrupt van de touch sensor. Dan blijkt de LED's op in een lage toestand. Wanneer de sensor opnieuw geraakt is, is de modus gewijzigd van laag naar medium, en voorts aan hoge na een andere touch. Een finishing touch van de armatuur zal het uitschakelen van de lichten en laten de uC terug inslapen, te wachten om te worden gewekt door de touch sensor. Deze cyclus herhaalt zich voor onbepaalde tijd.
Twee headerbestanden zijn in gebruik. De eerste is mijn aangepaste AVR.h-bestand die bevat veel nuttige macro's, alsmede de andere vereiste headers bellen. De tweede is het sleep.h-bestand dat wordt geleverd met WinAVR.
Het programma begint met het initialiseren van de AVR-chip: het uitschakelen van ongebruikte mogelijkheden, stellen de I/O poorten, vermindering van de systeem klokfrequentie (voor meer energiebesparing), instellen van de Timer 0 voor een 122 Hz pulse, waardoor de pin wijzigen onderbreken voor de touch sensor, en de macht van de slaapstand inschakelen.
Wordt ingevuld dan een eeuwig lus die alleen een ding doet: controleren om te zien als de slaapstand is ingeschakeld. Als de slaapstand is ingeschakeld, is de uC laten inslapen om te wachten op de touch sensor van hardware-interrupt.
Slechts één interrupt handler wordt gebruikt: de pin wijzigen onderbreken voor de touch sensor. Deze routine controleert de status van de LEDs en besluit om hen op, Verhoog de helderheid (pulsbreedte), of uitschakelen hen dienovereenkomstig op elk gewenst moment de armatuur is aangeraakt. Het heeft ook het programma in een lus, totdat het armatuur is niet langer geraakt.
De LED-pols verloopt volledig via hardware-eigenschappen van de uC. Het enige dat gedaan moet worden in de code wil in- of uitschakelen van de Timer 0-uitgang aangesloten op de LED-driver.