Weihnachtslieder (last Minute)

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Weihnachtslieder (last Minute)

      Als Last-Minute-Projekt zur Weihnachtszeit hier nun ein Vorschlag: Baut Euch doch schnell noch einen kleinen Pieper für Adventslieder zusammen.
      Ein ATmega8, ATmega88 oder ein anderer vorhandener Mikrocontroller und ein Piezo-Buzzer und schon geht es los.
      Die Grundidee stammt von dieser Application Note auf der Herstellerseite.

      Der Charme des Programms ist, dass Lieder als "Noten" eingegeben werden. Dadurch kann man auch relativ leicht, eigene Lieder eingeben und abspielen lassen. Vielleicht für die Kinder ...
      Drei weihnachtliche Beispiele habe ich eingefügt.
      Im Programm wird für jeden abzuspielenden Ton ein SOUND-Befehl zusamengebaut.

      BASCOM-Quellcode

      1. ' BASCOM-Programm
      2. ' stefanhamburg in bascomforum.de
      3. ' Musik nach Noten: Weihnachtslieder
      4. ' Tonerzeugung mit SOUND-Befehl
      5. ' In: Taster an D.2, D.3 und D.4 fuer Melodienwahl
      6. ' Out: PortB.1 fuer Speaker
      7. '
      8. '$regfile = "M8def.dat"
      9. '$regfile = "M88def.dat"
      10. $regfile = "m8adef.dat" 'Chip festlegen
      11. $crystal = 1000000
      12. Const Crystal_in_khz = 1000 'Crystal in kHz
      13. $hwstack = 40
      14. $swstack = 40
      15. $framesize = 60
      16. Config Portd = Input 'Eingaben: Taster
      17. Portd = &B11111111 'Pullups
      18. Taster1 Alias Pind.2
      19. Taster2 Alias Pind.3
      20. Taster3 Alias Pind.4
      21. Config Pinb.1 = Output 'Buzzer ohne Elektronik an B.1
      22. Speaker Alias Portb.1
      23. Dim Duration As Word
      24. Dim Pulses As Word
      25. Dim Lied As String * 254
      26. Dim Laenge As Byte
      27. Dim Position As Byte
      28. Dim Zeichen As String * 1
      29. Dim Note As String * 5
      30. Dim Noten_laenge_str As String * 2
      31. Dim Noten_laenge As Byte
      32. Dim T_dauer As Long
      33. Dim Temp As Single
      34. Gosub Oh_du_froehliche
      35. Do
      36. If Taster1 = 0 Then Gosub Stille_nacht
      37. If Taster2 = 0 Then Gosub Jingle_bells
      38. If Taster3 = 0 Then Gosub Oh_du_froehliche
      39. Loop
      40. End
      41. 'Die Noten als Strings eingeben:
      42. 'Ein Lied kann beliebig auf mehrere Strings aufgeteilt werden.
      43. 'Ein String darf die Laenge 254 nicht ueberschreiten!!
      44. 'Hilfsskala um sicherzustellen, dass ein String nicht zu lang wird:
      45. ' 12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234
      46. ' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 x <-Maximum
      47. Stille_nacht:
      48. Lied = "G2(1/4) G2(1/8) A2(1/8) G2(1/4) E2(1/2) E2(1/4) G2(1/4) G2(1/8) A2(1/8) G2(1/4) E2(1/2) E2(1/4)"
      49. Gosub Abspielen
      50. Lied = "D3(1/2) D3(1/4) H2(1/2) H2(1/4) C3(1/2) C3(1/4) G2(1/2) G2(1/4)"
      51. Gosub Abspielen
      52. '2. Zeile:
      53. Lied = "A2(1/2) A2(1/4) C3(1/4) C3(1/8) H2(1/8) A2(1/4) G2(1/4) G2(1/8) A2(1/8) G2(1/4) E2(1/2) E2(1/4)"
      54. Gosub Abspielen
      55. Lied = "A2(1/2) A2(1/4) C3(1/4) C3(1/8) H2(1/8) A2(1/4) G2(1/4) G2(1/8) A2(1/8) G2(1/4) E2(1/2) P(1/8)"
      56. Gosub Abspielen
      57. '3. Zeile:
      58. Lied = "D3(1/2) D3(1/4) F3(1/4) F3(1/8) D3(1/8) H2(1/4) C3(1/2) C3(1/4) E3(1/2) P(1/8)"
      59. Gosub Abspielen
      60. Lied = "C3(1/4) C3(1/8) G2(1/8) E2(1/4) G2(1/4) G2(1/8) F2(1/8) D2(1/4) C2(1/2) C2(1/4) C2(1/2)"
      61. Gosub Abspielen
      62. Return
      63. Jingle_bells:
      64. Lied = "E2(1/4) E2(1/4) E2(1/2) P(1/16) E2(1/4) E2(1/4) E2(1/2) P(1/16) E2(1/4) G2(1/4) C2(1/4) D2(1/4) E2(1/1)"
      65. Gosub Abspielen
      66. Lied = "F2(1/4) F2(1/4) F2(1/4) F2(1/4) P(1/16) F2(1/4) E2(1/4) E2(1/4) E2(1/8) E2(1/8) P(1/16) E(1/4) D2(1/4) D2(1/4) E2(1/4) P(1/16) D2(1/2) G2(1/2)"
      67. Gosub Abspielen
      68. Lied = "E2(1/4) E2(1/4) E2(1/2) P(1/16) E2(1/4) E2(1/4) E2(1/2) P(1/16) E2(1/4) G2(1/4) C2(1/4) D2(1/4) E2(1/1)"
      69. Gosub Abspielen
      70. Lied = "F2(1/4) F2(1/4) F2(1/4) F2(1/4) P(1/16) F2(1/4) E2(1/4) E2(1/4) E2(1/8) E2(1/8) P(1/16) G2(1/4) G2(1/4) F2(1/4) D2(1/4) C2(1/1)"
      71. Gosub Abspielen
      72. Return
      73. Oh_du_froehliche:
      74. Lied = "G2(1/2) A2(1/2) G2(1/4) G2(1/8) F2(1/8) E2(1/4) F2(1/4) G2(1/2) A2(1/2) G2(1/4) G2(1/8) F2(1/8) E2(1/4) F2(1/4)"
      75. Gosub Abspielen
      76. Lied = "G2(1/2) G2(1/2) A2(1/2) H2(1/4) C3(1/4) H2(1/2) A2(1/2) G2(1/1) D2(1/4) D2(1/8) E2(1/8) D(1/4) E(1/4)"
      77. Gosub Abspielen
      78. Lied = "F2(1/4) F2(1/8) G2(1/8) F2(1/2) E2(1/4) E2(1/8) F2(1/8) E2(1/4) F2(1/4) G2(1/4) G2(1/8) A2(1/8) G2(1/2)"
      79. Gosub Abspielen
      80. Lied = "C3(1/4) H2(1/4) A2(1/4) G2(1/4) C3(1/4) A2(1/4) G2(1/4) F2(1/4) E2(1/2) D2(1/2) C2(1/2)"
      81. Gosub Abspielen
      82. Return
      83. '----------------------------------------------------
      84. Abspielen:
      85. Laenge = Len(lied)
      86. Position = 1
      87. Do
      88. Note = "" 'Notenhoehe einlesen
      89. Zeichen = Mid(lied , Position , 1)
      90. While Zeichen <> "("
      91. Note = Note + Zeichen
      92. Incr Position
      93. Zeichen = Mid(lied , Position , 1)
      94. Wend
      95. Position = Position + 3 'bis '/' vorruecken 'and position <laenge
      96. Noten_laenge_str = "" 'Notenlaenge einlesen
      97. Zeichen = Mid(lied , Position , 1)
      98. While Zeichen <> ")"
      99. Noten_laenge_str = Noten_laenge_str + Zeichen
      100. Incr Position
      101. Zeichen = Mid(lied , Position , 1)
      102. Wend
      103. Position = Position + 2 ' ) und Leerzeichen ueberspringen
      104. 'SOUND_Befehl zusammenbauen
      105. Select Case Note
      106. Case "C2" : Pulses = 159
      107. Case "Cis2" : Pulses = 150
      108. Case "D2" : Pulses = 141
      109. Case "Dis2" : Pulses = 133
      110. Case "E2" : Pulses = 126
      111. Case "F2" : Pulses = 119
      112. Case "Fis2" : Pulses = 112
      113. Case "G2" : Pulses = 106
      114. Case "Gis2" : Pulses = 100
      115. Case "A2" : Pulses = 94
      116. Case "Ais2" : Pulses = 89
      117. Case "B2" : Pulses = 84
      118. Case "H2" : Pulses = 84
      119. Case "C3" : Pulses = 79
      120. Case "Cis3" : Pulses = 75
      121. Case "D3" : Pulses = 70
      122. Case "Dis3" : Pulses = 66
      123. Case "E3" : Pulses = 63
      124. Case "F3" : Pulses = 59
      125. End Select
      126. Noten_laenge = Val(noten_laenge_str)
      127. Select Case Noten_laenge
      128. Case 32 : T_dauer = 63
      129. Case 16 : T_dauer = 125
      130. Case 8 : T_dauer = 250
      131. Case 4 : T_dauer = 500
      132. Case 2 : T_dauer = 1000
      133. Case 1 : T_dauer = 2000
      134. End Select
      135. T_dauer = T_dauer * Crystal_in_khz
      136. Temp = 12 * Pulses
      137. Temp = T_dauer / Temp
      138. Duration = Temp
      139. If Note = "P" Then
      140. Select Case Noten_laenge
      141. Case 32 : Waitms 63 'Pause oder ..
      142. Case 16 : Waitms 125
      143. Case 8 : Waitms 250
      144. Case 4 : Waitms 500
      145. Case 2 : Wait 1
      146. Case 1 : Wait 2
      147. End Select
      148. Else
      149. Sound Speaker , Duration , Pulses '..Ton abspielen
      150. End If
      151. Loop Until Position >= Laenge 'bis ein String zu Ende
      152. Return
      153. '---------------------------------------------------------------------------------------
      Alles anzeigen

      Viel Spaß!