LED-Weihnachtsbäumchen mit Jingle Bells
von Michael Gaus
Kann
man mit den Bauteilen des Adventskalenders passend zur Weihnachtszeit
auch ein LED-Weihnachtsbäumchen bauen, das zusätzlich noch
das Lied Jingle Bells abspielen kann? Wenn man noch einen kleinen
AVR-Mikrocontroller ATtiny13V als zusätzliches Bauteil spendiert,
dann geht das. Die Generierung der Spannung für den
Mikrocontroller aus der original 9V Batterie sowie die Ansteuerung des
Piezos über den als eine Art "Verstärker" beschalteten NE556
wird jedoch ausschließlich über die Bauteile des
Adventskalenders realisiert. Ein Video, auf dem man das ganze in Aktion
sehen kann, gibt es hier:
http://youtu.be/lnNa1MQSo_k
Der
ATtiny13V kann mit einer Spannung im Bereich von 1,8 bis max. 5 V
versorgt werden, somit muss zunächst aus der 9-V-Batteriespannung
eine entsprechende Anpassung vorgenommen werden. Über den
1-k-Vorwiderstand R3 werden zwei grüne LEDs in Serie betrieben,
sodass sich über den beiden LEDs eine Gesamtspannung von ca.
4-V einstellt. Da der ATtiny13V bei der gewählten
Taktfrequenz von 1,2 MHz eine relativ geringe Stromaufnahme von
ca. 1-mA hat, kann mit diesem "Spannungsregler" der Mikrocontroller
versorgt werden. Am Pin PB4 (Pin 3) des ATtiny13 wird die abzuspielende
Tonfolge ausgegeben. An diesen Pin werden die beiden Pins Trigger und
Threshold des NE556 angeschlossen, der hier als eine Art
"Verstärker" arbeitet.
Die am Pin Control angeschlossene
rote LED 2 bewirkt eine Spannung von ca. 1,8 V am negativen
Komparatoreingang des Threshold Pins. Durch den an Control
angeschlossenen internen Widerstand fließt ein Strom über
die LED nach GND und bringt diese zum Leuchten. Wenn die Spannung an
Threshold größer ist als 1,8 V (z.B. bei High-Pegel von PB4
des ATtiny13), dann wird der Reset-Pin des im NE556 integrierten
Flipflops getriggert und der Ausgang (Pin 5) geht auf GND-Pegel. Die
Triggerschwelle für den positiven Komparatoreingang des
Trigger-Pins des NE556 liegt aufgrund der Innenbeschaltung bei
ungefähr der halben Threshold-Triggerschwelle, also bei ca. 0,9 V.
Wenn die Spannung an Trigger kleiner ist als 0,9 V (z.B. bei Low-Pegel
von PB4 des ATtiny13), dann wird der Set-Pin des im NE556 integrierten
Flipflops getriggert und der Ausgang (Pin 5) geht auf VCC-Pegel. Somit
wird praktisch ein invertierender Verstärker gebildet.
Die
rote LED1 blinkt passend zum Takt: während eines Tons leuchtet sie
scheinbar ständig, da die Tonfrequenz für das menschliche
Auge nicht sichtbar ist, und bei jeder kurzen Pause nach jedem Ton geht
sie kurz aus.
Firmware für den ATtiny13: JingleBells_attiny13.zip
Die
Firmware wurde mit dem C-Compiler CodeVisonAVR erstellt. Im
Unterverzeichnis "firmware_attiny13" der zip-Datei ist der Quellcode
sowie das fertige Hexfile "ton.hex" enthalten. Da für die
Tonerzeugung nur Warteschleifen benutzt werden, sollte der Code auch
problemlos auf andere Programmiersprachen portierbar sein. Die Dauer
eines Tons wurde auf 30 ms für eine 1/32-Note (siehe Define
DELAY_NOTE_32) eingestellt und beträgt dann entsprechend das
doppelte für eine 1/16-Note, das vierfache für eine 1/8-Note
usw. Nach jedem Ton gibt es eine kurze Pause von 10 ms (siehe Define
TON_PAUSE), bevor der nächste Ton erzeugt wird. Die abzuspielende
Tonfolge wird im Array "jingleBells" angegeben: pro Note wird hier die
Periodendauer in Mikrosekunden des entsprechenden Tons (z.B. der Define
TON_E1 für das eingestrichene "e'") sowie die Notenlänge
(z.B. der Define NOTE_4 für eine 1/4-Note) eingetragen. In der
Hauptschleife des Programms wird dieses Array durchlaufen und über
die Funktion playTone jeweils der entsprechende Ton erzeugt. Dazu wird
der Ausgangspin PB4 des ATtiny13 über Warteschleifen jeweils eine
halbe Periondauer auf High und eine halbe Periodendauer auf Low
geschaltet und zwar solange, bis ungefähr die Notenlänge
erreicht wurde.
Als
Taktquelle wird der interne 9,6 MHz Oszillator mit Teiler durch 8
verwendet, sodass die Prozessorfrequenz 1,2 MHz beträgt. Bei den
Fusebits des ATtiny13 muss deshalb CKDIV8 programmiert werden.
Außerdem sollte der Brown-Out Reset bei 1,8V aktiviert werden
(siehe Screenshot fusebits.jpg).