Gerade noch rechtzeitig zum 4. Advent fertig geworden: das AVR-Adventslicht.
Die Idee stammt hierher ThinkerlogGeeky Advent. Wie man sehen kann,
ist der mechanische Aufbau ziemlich identisch:
und
so mit Beleuchtung:
Der Rest ist Eigenbau. Das Gerät besitzt einen Taster, mit dem man die Anzahl der blinkenden LEDs
von null bis vier durchschalten kann. Bei null geht die CPU in den Sleep-Modus und verbraucht nahezu
keinen Strom (µA-Bereich). Das Ganze sieht dann so aus:
(rechte Maustaste öffnet
Menü)
Die Taste wird per PIN-Change-Interrupt ausgewertet. Dieser Interrupt weckt die CPU auch im
Sleep-Modus auf.
Die Helligkeit der LED ändert sich kontinuierlich. Sowohl die Helligkeit als auch die Geschwindigkeit,
mit der die neue Helligkeit eingestellt wird, wird per Zufallszahl ermittelt. Immer dann, wenn
die Ziel-Helligkeit erreicht wird, werden neue Werte für beide Parameter ermittelt. Mit der ermittelten
Geschwindigkeit wird dann die neue Helligkeit angefahren. Die Regelung erfolgt für jede LED separat.
Man könnte bereits vorher ermittelte Zufallszahlen im Programm vorgeben. Da die avr-gcc-Bibliothek
einen Zufallszahlen-Generator enthält und genügend Speicherplatz vorhanden ist, habe ich einfach
die vorhandene Funktion genutzt.
Helligkeit und Geschwindigkeit werden nicht direkt aus den Zufallszahlen abgeleitet. Vielmehr
sind mögliche Werte für beide Parameter in einem Array hinterlegt. Per Zufallszahl wird ein Array-Index
ermittelt. Das hat den Vorteil, dass man über die Array-Einträge die Verteilung der Helligkeitswerte
beeinflussen kann. Ohne diesen Trick hätte man im Wesentlichen gleichverteilte Werte. Bei den
von mir bevorzugten Werten sind die LEDs häufiger auf max. Helligkeit eingestellt. Analoges gilt
für die Änderungsgeschwindigkeit.
Die Helligkeit wird durch PWM per Timer-Interrupt gesteuert.
Die Steuerung, wie viele und welche LEDs (1..4) leuchten sollen, geschieht einfach durch Maskierung
der entsprechenden Pins. Auch die Werte der LEDs, die nicht leuchten sollen, werden permanent
berechnet. Diejenigen, die nicht leuchten sollen, werden zum Schluss einfach auf null gesetzt.
Das erspart eine längere Abfragekette.
Der Bauplan ist so überschaubar, dass es sich nicht lohnt, ihn zu zeichnen. Die LEDs werden mit
den Anoden an PB1..PB4 gelegt. Die Kathoden werden an Masse angeschlossen. Der Taster wird an PB0
und ebenfalls an Masse angeschlossen. Das war's.