erstellt
12.02.2013 |
||
Tonausgabe |
||
Mit dem Bascom Befehl
"Sound" kann relativ einfach ein Ton oder eine Tonfolge an jeden
X beliebigen Ausgangspin ausgegeben werden. Im folgenden Beispiel wurde am Atmega 8 der Ausgangspin B.1 mit einem Piezo versehen. Wenn ich hier von Piezo spreche dann ist ein Piezo Lautsprecher gemeint , und kein Piezo Summer. Mir ist es in den letzten Jahren immer wieder mal passiert das der von mir bestellte Piezo Schallgeber ( Lautsprecher ) in Wahrheit als ein Piezo Summer geliefert wurde. Ein Piezo Schallgeber ist einfach nur ein kleiner Lautsprecher während eine Piezo Summer schon Elektronik beinhaltet und der schon im Gegensatz zu einem Lautsprecher einen Ton abgibt sobald eine Gleichspannung angelegt wird. Äußerlich besteht meist kein Unterschied so das ich mich bei einigen Schaltungen schon mal wundern mußte das der vom Mikroprozessor erzeugte Ton zwar vorhanden war, aber nicht in der von der Programmierung vorgesehenen Frequenz ausgegeben wurde. |
||
![]() |
||
![]() |
||
Um
Beispielsweise einen Ton von ca.. 1000 Herz und einer Länge von
ca.. 1 Sekunde zu erzeugen , muss wohl vorher ein wenig gerechnet werden weil die angegebenen Werte innerhalb der Programmierung zum einen abhängig sind von der Taktfrequenz des Atmega , und zum anderen sich die beide Werte Tonhöhe , Tonlänge in einem gewissen Verhältnis zueinander stehen. |
||
Die
Befehlseingabe sieht folgendermaßen aus: Sound Portd.1,1004,83 Der Befehl lautet also "Sound" anschließend wird der benutzte Ausgang angegeben hier mit Portd.1 dann folgt der Wert für die Tonlänge und anschließend der Wert für die Tonhöhe. Folgendermaßen berechnet sich die Tonfrequenz von 1000 Hz: Wert für Frequenz = Taktfrequenz / ( 12 * Soll-Frequenz) Wert für Frequenz = 1000 000 / ( 12 * 1000 Hz) Wert für Frequenz = 1000 000 / 12000 Wert für Frequenz = 83 Anschließend berechnen wir den
Wert für die Tonlänge von 1 Sekunde:
Wert für Tonlänge =Taktfrequenz * Tonlänge in Sekunde / (12 *
Wert für Frequenz)Wert für Tonlänge = 1000 000 * 1 /(12*83) Wert für Tonlänge = 1000 000 / 996 Wert für Tonlänge = 1004 |
||
|
||
Eine weitere Möglichkeit der Tonausgabe besteht darin mit Hilfe des Timer1 die benötigte Frequenz zu erzeugen und diese dann an zwei mögliche dafür vorgesehene Ausgänge des Atmegas aus zu geben. Die dafür vorgesehenen Ausgänge sind am Atmega 8 , Pin15 (OC1A) und Pin 16 ( OC1B) folgende Anweisungen sind dafür nötig: TCCR1A=&B01000000. ' Toggelt OC1A also Atmega Pin15 TCCR1B=&B00001010 ' Timer resetten bei Compare , Clock/8 Compare1A=200 ' Vergleichswert angeben damit wird der Vergleichswert 200 mit dem Wert verglichen der sich aus der Taktfrequenz geteilt durch 8 ergibt. Die dann ausgegebene Frequenz berechnet sich bei einer Taktfrequenz von 1 000 000 Hz wie folgt: ((Taktfrequenz / Teilerfaktor) / 16 Bit) * Vergleichswert = (( 1 000 000 HZ / 8 )/ 65535)* 200 Ergebnis ca. 381 Hz |
||
aktualisiert 07.12.2022 |
||
Copyright by Ms 2009 |