Hallo in einem Prg zur Wiedergabe von Musik(Noten) habe ich folgendes gefunden: Die Frequenz für ein C berechnet sich aus: f = 8.176 Hz * (2^Oktave) Ein Dis berechnet sich aus: f = 9.723 * (2^Oktave) Es waren auch die Stellen bei WIKI zur Oktave und bei Senkspiel angegeben. Noten werden dann damit angegeben: z.B. /* 1. Oktave */ 1953/8.176, 1953/8.662, 1953/9.177, Für die Tonhöhe und zur Berechnung wird das angegeben: Der Timer kann von 1 bis 256 zählen. Die Timer-Werte müssen also in dem Intervall landen: 1953/8.176 = 238 (niedrigster Ton C0) 1953/(2*15.434) = 63 (höchster Ton H1) Könnte mir jemand erklären, wie der Zusammenhang ist. Wenn ich z.B. feste Frequenzen wie 100Hz, 1000KHz und 10Khz erzeugen will, wie muss das aussehen? Wie kann ich die Tohnöhe ermitteln? Wenn ich Tonhöhe mit einem Generator (Sinus/Rechteck) vergleiche, kommen ganz andere Töne zustande. Sie klingen anders und die Tonhöhe kann man durch die unterschiedliche Kurvenform sehr schlecht vergleichen. Beim BOT wird der PWM durch ein Sarry.Key-Filter (Tiefpass) (2) geschickt. achim
Hi Was für eine Kurvenform willst du erzeugen? Rechteck oder Sinus? MfG Spess
Leider kann ich die Kurvenform nicht mehr verändern, da der Tiefpaas fertig im BOT ist. Wahrscheinlich wird eine sehr verwaschene Form erzeugt. Es geht mir mehr um die Frequenz. achim
Achim Seeger schrieb: > Wie kann ich die Tohnöhe ermitteln? > Wenn ich Tonhöhe mit einem Generator (Sinus/Rechteck) vergleiche, kommen > ganz andere Töne zustande. Das liegt an Dingen wie Klangfarbe, Spektrum, Oberwellen. Zur Bescheibung von Tönen reicht die Angabe der Frequenz nicht aus.
Fürs erste genügt mir schon die Freuquenz ohne Oberwellen oder anderes. Durch die PWM wird eine bestimmte Tönhöhe mit Tiefpass erzeugt. Leider ist mir der Zusammenhang mit den Angaben im Prg nicht klar. achim
Hi Deine Angaben sind etwas mangelhaft. Man kann entweder mit PWM ein sinusähnliches Signal erzeugen und filtern oder ein Rechtecksignal so filtern, das nur noch die Grundfrequenz übrig bleibt. Dafür wäre dann CTC ausreichend. Was trifft nun bei dir zu? MfG Spess
Nehmen wir die einfachste Sache an. Einfach mit PWM eine Frequenz erzeugen. Sinusähnlich reicht. Am Filter kann ich nichts mehr machen,der ist vorhanden. Mit den Angaben oben wird ein Ton erzeugt. Die Tonerzeugung geht so. Stehen die Zahlen (Angabe Noten) im direkten Zusammenhang zur Tönhöhe? achim
Hi >Mit den Angaben oben wird ein Ton erzeugt. Die Tonerzeugung geht so. >Stehen die Zahlen (Angabe Noten) im direkten Zusammenhang zur Tönhöhe? Ich habe die Zahlen aus deinem Eröffnungspost mal nachgerechnet. Die Berechnung der Timer-Werte passen zu einem 8-Bit-Timer im CTC-Mode mit einem Timertakt von 3,9063 kHz. Das entspricht einem Vorteiler von 256 bei einem Controllertakt von 1MHz oder Vorteiler 1024 bei 4MHz. Die 1953 errechnen sich aus Controllertakt/(2xVorteiler) Die genauen Hintergründe findest du im Datenbalatt deines Controllers unter Timer->CTC. MfG Spess
Achim Seeger schrieb: > Einfach mit PWM eine Frequenz > erzeugen. Sinusähnlich reicht. Das ist eigentlich ein Widerspruch. Um einfach (mit der PWM-Einheit eines Timers) eine Frequenz (Rechteck) zu erzeugen, stellt man die Betriebsart auf PinToggeln und CTC ein und verändert mit dem Compare-Wert die (halbe) Periodendauer und somit sekundär die Frequenz. Um Sinus oder andere Kurvenformen zu erzeugen, lässt man den Timer eine möglichst hohe (feste) Trägerfrequenz erzeugen und moduliert in einem Vielfachen der gewünschten Frequenz mittels Compare-Wert den Tastgrad, legt also während einer Periode mehrere Samples in das Compare-Register, die die Kurvenform abbilden. Das nachgeschaltete Filter (Tiefpass reicht meist) filtert dann die Trägerfrequenz aus, wodurch nur noch die per Tastgrad modulierte Kurvenform niedrigerer Frequenz übrig bleibt. ...
Hallo Hannes danke dir für deine Antwort. Habe im Netz weiter gesucht, z.B. im WIKI PWM. Das mit dem einfachen Rechteck und Toggeln ist damit klar. Wenn ich aber einen Sinus erzeugen will, ist es sehr viel Aufwand. Zum Prinzip habe ich etwas gefunden. Leider sind die Beispiele meist in ASM. Kennst du viellleicht eine Seite um die Sache besser zu verstehen oder etwas in C. achim
Achim Seeger schrieb: > Leider sind die Beispiele meist in ASM. Meine auch: http://www.hanneslux.de/avr/divers/melody/index.html > Kennst du viellleicht eine Seite um die Sache besser zu verstehen oder > etwas in C. Leider nicht, für C bin ich zu doof, ich mach's in ASM, das ist wenigstens eindeutig und birgt daher die wenigsten Missverständnisse. Du könntest Dir aber mal den Melodieplayer von Elm-Chan anschauen, der ist glaube in C programmiert und sehr leistungsfähig. ...
Achim Seeger schrieb: > Wenn ich aber einen Sinus erzeugen will, ist es sehr viel Aufwand. Zum > Prinzip habe ich etwas gefunden. Leider sind die Beispiele meist in ASM. > Kennst du viellleicht eine Seite um die Sache besser zu verstehen oder > etwas in C. Allerdings klingt ein einfacher Sinus auch nicht wirklich wahnsinnig viel besser als eine Rechteckschwingung. Für einen schönen Streichersound muss man dann eben doch mehr Aufwand treiben. Belass es bei Rechteck. So wie die Sache aussieht, ist das schon Herausforderung genug, bis dann endlich mal 'Alle meine Entlein' aus dem Lautsprecher kommen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.