Hi,
eigentlich brauchs du nur einen kleinen Speaker (z.B.von Reichelt) und dann kannst du mit einem Timer das Signal erzeugen.
Ich möchte mit einem AtMega8 Töne erzeugen, die zwischen 1060 und 2600Hz liegen.
Es handelt sich um eine Folge von 5 unterschiedlichen Tönen, wobei jeder Ton gerade mal 70mS lang ist.
http://de.wikipedia.org/wiki/5-Ton-Folge
Wie kann ich ohne möglichst zusätzliche Hardware diese Töne aus dem Mega8 herraus zaubern?
Hi,
eigentlich brauchs du nur einen kleinen Speaker (z.B.von Reichelt) und dann kannst du mit einem Timer das Signal erzeugen.
MfG Christopher \/
Danke für deine Antwort.
Mit dem Timer bekomme ich doch nur einen Ton herraus, oder?
Ich brauche aber verschiedene Töne, die hintereinander abgespielt werden sollen.
Hallo Halvar!Zitat von Halvar
Gestatten, Halvar mein Name. :-)
Mit Buzzer (Piezo) oder Lautsprecher und Transistor (laut): http://halvar.at/elektronik/kleiner_...er0_als_timer/
Mit Lautsprecher aber ohne Transistor (leise): http://www.mcselec.com/index.php?opt...=175&Itemid=41
Dieser Beitrag http://www.loetstelle.net/forum/view...?p=11781#11781 und die folgenden Beiträge dürften auch noch interessant sein.
Wenn du mit dem Timer1 arbeitest, dann brauchst du nur zuerst den Überlaufwert in das Pseudo-Register Compare1a schreiben. Danach schaltest du den Timer1 so lange ein, so lange der Ton dauern soll. Danach schaltest du den Timer einfach wieder aus.
Es gibt auch noch den SOUND-Befehl, den ich hier nicht verschweigen möchte. Der ist dann interessant, wenn es nicht so genau auf die Frequenz ankommt und das Programm in der Zwischenzeit sowiso nichts zu tun hat.Code:STOP TIMER1 START TIMER1
mfg
Gerold
:-)
Ein 8Ohm Lautsprecher aus einem PC direkt am Kontroller-Pin macht auch viel Krach:
http://www.youtube.com/watch?v=Yw3iHIym58k
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Danke euch beiden.
Die Lautstärke ist Nebensache, da der Ton hinterher direkt auf die NF-Eingangsstufe der Funkgerätes gehen soll.
Das mit dem Timer leuchtet ein, wie ändere ich ganz schnell die Tonhöhe?
Ich möchte jeder Ziffer einen Ton zu ordnen. Diese Ziffer möchte ich vorher eingeben, und auf Knopfdruck die eingestellte 5Ton-Folge abbspielen.
Wenn ich den Timer configuriert habe, lässt er sich doch nicht ganz fix um stellen?
Hallo Halvar!Zitat von Halvar
mfgCode:$regfile = "M8def.dat" $crystal = 8000000 $hwstack = 100 $swstack = 100 $framesize = 100 Config Portb.1 = Output 'OC1A Config Timer1 = Timer , Prescale = 1 , Compare A = Toggle , Clear Timer = 1 Stop Timer1 Declare Sub Frequency_set(byval Frequency As Word) Declare Sub Frequency_output_on() Declare Sub Frequency_output_off() Do Call Frequency_set(1060) Call Frequency_output_on() Waitms 70 Call Frequency_set(1500) Waitms 70 Call Frequency_set(2600) Waitms 70 Call Frequency_output_off() Wait 3 Loop End Sub Frequency_set(byval Frequency As Word) 'Voreinstellung = 8000000 / (Hz * 2) '1060 Hz: 8000000 / (1060 * 2) = 3773,5849 = 3774 'Test: 8000000 / 3774 / 2 = 1059,88 Hz '1500 Hz: 8000000 / (1500 * 2) = 2666,66 = 2667 'Test: 8000000 / 2667 / 2 = 1499,81 Hz '2600 Hz: 8000000 / (2600 * 2) = 1538,46 = 1538 'Test: 8000000 / 1538 / 2 = 2600,78 Hz Local Tmp_single As Single Local Tmp_word As Word Tmp_single = Frequency * 2 Tmp_single = 8000000 / Tmp_single Tmp_word = Tmp_single Compare1a = Tmp_word End Sub Sub Frequency_output_on() Start Timer1 End Sub Sub Frequency_output_off() Stop Timer1 End Sub
Gerold
:-)
EDIT: Code ausgebessert
Hallo Halvar!
Ich habe das jetzt nachgemessen. Statt 1060 Hz hatte ich am Ausgang ca. 1090 Hz. Du brauchst unbedingt einen Quarz, wenn du eine genaue Frequenz ausgeben möchtest. Mit dem internen RC-Oscillator kommst du nicht weit. ;-)
mfg
Gerold
:-)
Hallo Gerold - Halver,
Hey, das ist ja schon ein fertiges Programm!
Ausgang ist OC1A, also PinD1 ? Kann ich den auch erstmal mit einem Lautsprecher und Widerstand belasten, oder arbeitet der Pin als OC anders?
Natürlich habe ich keinen 8Mhz Quarz rum liegen, aber funktioniert doch auch mit jeder anderen Frequenz bis 16Mhz? Einen mit 10,24 Mhz hätte ich liegen.
Danke dir !
Gerade nen Fehler entdeckt: OC1A ist PinB1 , nicht PinD1.
Hallo Halvar!
Schaltpläne findest du hier:Zitat von Halvar
- http://www.mcselec.com/index.php?opt...=175&Itemid=41
- http://halvar.at/elektronik/kleiner_...er0_als_timer/
Die Frequenz des Quarz ist egal. Wichtig ist nur, dass du das Programm entsprechend anpasst. "8000000" sollte dann natürlich durch "10240000" ersetzt werden. Und die FuseBits musst du natürlich auch anpassen, dass der Systemtakt vom Quarz genommen wird. http://halvar.at/elektronik/kleiner_bascom_avr_kurs/ (Beiträge 22-25)Zitat von Halvar
mfg
Gerold
:-)
Lesezeichen