Stap 7: De MCU Program
Het volgende is een voorbeeld van een van de LED helderheid controles in de lus van het hoofdprogramma. Ten eerste, de "richting" is checed. Een 1 betekent toenemende helderheid; een 0 middelen afnemende helderheid. Vervolgens is het niveau gestegen/gedaald aan een tarief gebaseerd op het huidige niveau. Om te houden van de LED op een dimmer staat langer (het is veel heldere gedurende het grootste deel van zijn werking) het niveau verandert langzaam op het eerste. Zodra het wordt helderder toe, is het niveau sneller verandert. Als u wilt dat de LEDs anders gedraagt, is dit de plek wijzigingen aan te brengen.
if(stat_flag & DIRECTION0) {/ / indien LED 0 in helderheid stijgen moet
Als (brightness0 < 25) brightness0 ++; Langzaam verhogen tijdens dim Staten
else if (brightness0 < 40) brightness0 += 5; Iets sneller stijgen
else if (brightness0 < 100) brightness0 += 10; Snel toenemen
anders CLEAR_BIT (stat_flag, DIRECTION0); Tijd om verandering van richting
}
else {/ / als LED 0 moet in helderheid afnemen
Als (brightness0 > 40) brightness0-= 10; Snel verkleinen
anders als (brightness0 > 25) brightness0-= 5; Daling lichtjes langzamer
anders als brightness0 (brightness0 > 1)--; Langzaam afnemen tijdens dim Staten
anders SET_BIT (stat_flag, DIRECTION0); Tijd om verandering van richting
}
In het volgende voorbeeld is het deel van de 100ns interrupt die de LEDs in- en uitschakelen draait. Een teller voor elke LED telt 100, waarna hij draait de LED op en wordt de teller opnieuw ingesteld. Als de teller niet op 100, wordt gecontroleerd om te zien als het huidige helderheidsniveau heeft bereikt. Op dit moment, de LED is uitgeschakeld en blijft uitgeschakeld totdat de teller op 100. Dit heet PWM (puls breedte modulatie) en het effectief regelt de helderheid van de LED.
Als (++ cnt0 == 100) {/ / 100 * 100ns = 10ms (100Hz)
LED_ON(0); LED 0 inschakelen
cnt0 = 0; Teller reset
}
else if (cnt0 == brightness0) LED_OFF(0); Als de gewenste helderheid bereikt, zwenking vandoor LED 0
Ik heb het hoofdbestand (valentine.c) bijgevoegd evenals de noodzakelijke makefile voor gebruik met WinAVR. Het Hex bestand is ook beschikbaar als je gewoon wilt program van de chip en het helemaal niet wijzigen. Ook opgenomen in dit zip-bestand is het schema voor gebruik in Cadsoft Eagle.