Hallo Alex,
kannst du vielleicht Beispiel hier nochmal posten?
Druckbare Version
Hallo Alex,
kannst du vielleicht Beispiel hier nochmal posten?
Ist zwar nicht im hörbaren Bereich, aber durch Verringern der oberen Grenze (ICR1) bzw. erhöhen des Prescalers kommt man da ohne Probleme hin. Falls du die Timerproblematik verstanden hast, sollte dir das folgende helfen:
void _40khz_init (void) {
TCCR1A = _BV(COM1A1) | _BV(COM1A0) | _BV(WGM11);
TCCR1B = _BV(WGM12) | _BV(WGM13) | _BV(CS10);
OCR1A = 100;
ICR1 = 200;
}
//36kHz Träger
TCCR1A = _BV(COM1A1) | _BV(COM1A0) | _BV(WGM11);
TCCR1B = _BV(WGM12) | _BV(WGM13) | _BV(CS10);
OCR1A = 111;
ICR1 = 222;
Falls dir die Berechnung der Timereinstellungen unklar ist, dann schau hier:
http://mc-project.de/Pages/rc5.html
Gruß, Alex
Hi Florian,
ich habe schon mal ein Programm zu spielen von Melodien geschrieben (nicht AVR). Um die zwölf Töne eine Oktave zu berechnen musst du jeweils immer die Frequenz des vorherigen Tones mit 1,0594631 multiplizieren.
Wenn man diese Zahl zwölf mal mit sich selber multiplizierst, kommt 2,0 raus. Es ist nämlich die zwölfte Wurzel aus 2. Die Länge von Orgelpfeifen kann man mit der gleichen, einfachen Formel berechnen. Ein Intervall von einer Oktave entspricht genau einer Verdoppelung bzw. Halbierung der Frequenz.
:-({|=
Mehr:
http://www.musikverein-himmelsthuer....ssen/10594631/
HI Florian!
Ist jetzt vielleicht ne doofe Idee, da du das ja mit dem µC machen willst
usw. Aber probier's doch mal mit dem Speak Jet!
Wenn ich richtig informiert bin, kann man dem über UART
Frequenzen zukommen lassen und der schiebt sie dann raus.
Ist nur ne Idee...
Und was ist, wenn du in den Schleifen, also in den Pausen zwischen
dem aus- und einschalten des Pins deine LEDs steuerst?
Ist zwar etwas aufwendig aber könnte gehen.
Du musst dann die Schleife um die Zeit, die die LED-action
braucht verkürzen.
KEEP MUSIC! :-({|= :D
(Ich habe mit dem RCX von Lego damals sogar
die Melodie von Starlight Express programmiert...
und die Kleine Nachtmusik.
Meech hat jetzt so ein MC22(RC-Fernsteuerung von Graupner) -Gepiepse
wenn man ihn einschaltet.)
Viele liebe Grüße,
Tobi
Wenn es nur um ganz einfache Töne geht, dann ist die Lösung mit Timer doch die günstigere.
Die genauen Einstellungen für den Timer kann man, wie schon von Sonic gesagt, mit dem Tool hier https://www.roboternetz.de/phpBB2/dl...le&file_id=169 ganz schnell berechnen.
Das Tool generiert auch ein Bascom-Beispielprogramm.
Wenn mir jemand die ASM und/oder C-Übersetzung des generierten Beispieles postet, dann kann ich das Tool gerne so erweitern das es auch diesen Code für alle frequenzen generiert.
Gruß Frank
Danke für eure Hilfe, ich werde jetzt alles in Ruhe durchsehen und mich dann nochmal melden! ;o)
Hi!
Welcher Ausgang (OC1A/OC1B/OC2) ist am Besten für Tonerzeugung und welcher Ausgang gehört zu welchem Timer und wie hoch ist die Auflösung des PWM (8bit/10bit/16bit)?
Die Ausgänge sind im Prinzip gleich gut geeignet. Welchen du nimmst, hängt bloß davon ab, welchen Timer du gerne verwenden würdest.
OC1A/B "gehören" beide zu Timer1, OC2 zu Timer2.
Die Auflösung des PWM kannst du einstellen(ich glaube 8-10 bit).
Hast du eigentlich das Datenblatt zum Mega8? Da steht das alles ziemlich genau drin(wenn auch etwas verteilt).
Eine übersichtliche und aktuelle Datenblattsammlung gibt es hier:Zitat:
Zitat von Gottfreak
http://www.avr-consultant.de/datenblaetter.php
Die meisten Datenblätter sind sogar in zwei Versionen vorhanden. "Kurzfassung" und ausführliche Fassung ("Komplett"). Zu einigen Datenblättern gibt es noch Ergänzungen und Berichtigungen ("Errata")
Hi! :o)
@ avatar:
Ich beziehe meine Datenblätter direkt von Atmel, www.atmel.com, da sind sie glaube ich am aktuellsten! ;o)
@ Gottfreak:
Ich verwende das Datenblatt Complete:
http://www.atmel.com/dyn/resources/p...ts/doc2486.pdf
Ich habe mich im Datenblatt schon sehr genau umgeschaut, habe aber noch nicht die Zeit gehabt alles durchzulesen! *faultier*
Ich nehme jetzt also OC1A! :o)
Was für ein PWM-Mode ist für Tonerzeugung geeignet und welcher Mode für Motoren?
Danke für eure Hilfe! :o)