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