LED-Weihnachtsbäumchen mit Jingle Bells           

von Michael Gaus                     
      
Elektronik-Labor  Literatur  Projekte  Lernpakete  Kalender  Schaltungswettbewerb



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).