Sparrow-Anwendung: Tonausgabe für Weihnachtskrippe

von Hermann Nieder
Tonausgabe für die Weihnachtskrippe
Die abgebildete Weihnachtskrippe erhält in diesem Jahr eine „verborgene“ elektronische Schaltung, die eine bekannte Weihnachtsmelodie erklingen lässt, wenn die Enkelkinder (oder auch die Erwachsenen) eine bestimmte Taste am Rand er Krippe betätigen. Im Dezember des vergangenen Jahres wurde auf diesen Seiten bereits ein Beitrag von H. Fritzsch über ein Sparrow-Projekt mit „Weihnachtsmusik“ veröffentlicht. Ich konnte also für das Krippenprojekt einen Teil des ursprünglichen Programmlistings verwenden und das aktuelle Programm ebenfalls in Bascom AVR gestalten.
'************************************************************************
'* Weihnachtsmelodie in Anlehnung an Version 2.0 H. Fritzsch  12 / 2014*
'* PortB.1 --> Piezo
'* geaendert fuer Melodie von "Ihr Kinderlein kommet.."                                                   *
'* PortB.3 wird waehrend des Abspielens ein- und danach ausgeschaltet
'* Nur wenn Taste S2 gedrueckt wird, wird die Melodie gespielt.        *
'************************************************************************


$regfile "attiny13.dat"
$crystal = 9600000
$hwstack = 16
$swstack = 8
$framesize = 16

Config Portb = &B00011010                                   'PB1, PB3 und PB4 Ausgaenge

Config Timer0 = Timer , Compare B = Toggle , Prescale = 8 , Clear Timer = 1       'CTC Mode aktiv

Portb.2 = 1                                                 'Pullup fuer Taste S2
' Tondefinitionen
Const C = 70
Const D = 63
Const E = 55
Const F = 52
Const G = 47
Const A = 42
Const H = 38
Const C# = 34

Const D# = 29
Const E# = 27
Const F# = 25
Const G# = 23
Const A# = 20
Const H# = 18
Const C## = 35
Const H## = 38
Const Ruhe = 0

' Tonlaengen
Dim Achtel As Byte
Dim Viertel As Byte
Dim Halb As Byte

Achtel = 25
Viertel = 50
Halb = 100


Do
'Piezo-Schallgeber an PORTB.1
'Taster an PORTB.2
Pwm0a = 0
If Pinb.2 = 0 Then
Portb.3 = 1
' Melodieteil "Kinderlein" 2 x
' hintereinander abspielen
Gosub Kinderlein
Gosub Kinderlein
'"Rest" der Melodie abspielen
Gosub Weiter
Portb.3 = 0
Pwm0a = 0
End If
Loop

Kinderlein:
'Ihr     bzw. Zur
 Pwm0a = G
 Waitms Achtel
 Pwm0a = 0                                                  
 Waitms Achtel                                              
 'Kin    bzw. Krip
 Pwm0a = G
 Waitms Viertel
 Pwm0a = 0
 Waitms 12
 'der    bzw: pe
 Pwm0a = E
 Waitms Achtel
 Pwm0a = 0
 'lein   bzw. her
 Pwm0a = G
 Waitms Achtel
 Pwm0a = 0
 Waitms 12                                                  
 'kom         kom
 Pwm0a = G                                                  
 Waitms Viertel
 Pwm0a = 0
 Waitms 12
 'met         met
 Pwm0a = E
 Waitms Achtel
 'o      bzw. in
 Pwm0a = G
 Waitms Achtel
 'kom    bzw. Beth
 Pwm0a = F
 Waitms Viertel
 'met    bzw. le
 Pwm0a = D
 Waitms Achtel
 'doch   bzw. hems
 Pwm0a = F
 Waitms Achtel
 'all    bzw. Stall
 Pwm0a = E
 Waitms Viertel
 Pwm0a = 0
 Waitms 12
 Return


 Weiter:
 'Und
 Pwm0a = E
 Waitms Achtel
 'seht,
 Pwm0a = D
 Waitms Viertel
 Pwm0a = 0
 Waitms 12
 'was
 Pwm0a = D
 Waitms Achtel
 Pwm0a = 0
 Waitms 12
 'in
 Pwm0a = D
 Waitms Achtel
 'die
 Pwm0a = F
 Waitms Viertel
 Pwm0a = 0
 Waitms 12
 'ser
 Pwm0a = F
 Waitms Achtel
 Pwm0a = 0
 Waitms 12
 'hoch
 Pwm0a = F
 Waitms Achtel
 Pwm0a = 0
 Waitms 12
 'hei
 Pwm0a = E
 Waitms Viertel
 Pwm0a = 0
 Waitms 12
 'li
Pwm0a = E
 Waitms Achtel
 Pwm0a = 0
 Waitms 12
 'gen
Pwm0a = E
 Waitms Achtel
 Pwm0a = 0
 Waitms 12
 'Nacht
 Pwm0a = A
 Waitms 75
 Pwm0a = 0
 Waitms 12
 'der
Pwm0a = A
 Waitms Achtel
 Pwm0a = 0
 'Va
Pwm0a = G
 Waitms Viertel
 Pwm0a = 0
 Waitms 12
 'ter
Pwm0a = G
 Waitms Achtel
 Pwm0a = 0
 Waitms 12
 'im
 Pwm0a = G
 Waitms Achtel
 Pwm0a = 0
 'Waitms 12
 'Him
 Pwm0a = C#
 Waitms Viertel
 Pwm0a = 0
 'mel
 Pwm0a = G
 Waitms Achtel
 Pwm0a = 0
 Waitms 12
 'für
Pwm0a = E
 Waitms Achtel
 'Freu
Pwm0a = G
 Waitms Viertel
 Pwm0a = 0
'de
Pwm0a = F
 Waitms Achtel
 Pwm0a = 0
 'uns
 Pwm0a = D
 Waitms Achtel
 Pwm0a = 0
 Waitms 12
'macht
 Pwm0a = C
 Waitms Viertel
 Pwm0a = 0
 Return

Die HEX-Datei belegt 76 % des Attiny13-Programmspeichers.
Der Sparrow als Tongenerator
Nachdem die Tonausgabe mit dem Mikrocontroller auf einer Sparrow-Platine zur Zufriedenheit funktionierte,
Beschaltung
konnte die abgebildtete Schaltung mit einem ATtiny13 schließlich auf einer Lochrasterplatine aufgebaut und in die oben abgebildete Weihnachtskrippe integriert werden, damit die Sparrow-Platine wieder für andere kleine Projekte zur Verfügung steht.
Download und Referenzen: