Ich möchte einen "Synthesizer" für ein oder zwei Töne bauen um zum Beispiel DTMF-Töne auszugeben. (Ein genauer Zweck besteht nicht, mir geht es eher um die Grundlagen) Ich benutze den mega32 @16 MHz, Timer 1 im Mode 14 (Fast PWM) ohne Prescaler. Der Timer läuft bis ICR1 = 363, das ergibt ca. 44,1 kHz als Frequenz. Eine Sinustabelle mit 256 Elementen habe ich. Nach jedem Timer-Overflow wird das nächste Element aus der Tabelle ins Capture-Register geschrieben. Mit angeschlossenem Tiefpass kommt auch exakt die berechnete Frequenz am PWM-Pin raus. (86 Hz) Ganzahlige Vielfache hiervon sind auch kein Problem, nur jeden zweiten oder dritten Wert aus der Tabelle nehmen. Soweit ist noch alles klar. Ich möchte jetzt aber auch "beliebige" Frequenzen erzeugen, also zum Beispiel 100 Hz. Wie geht man da vor? Den Timer nicht mehr ganz so weit zählen lassen und den Capture-Wert entsprechen anpassen? (Es gibt hier so ein geniales Synthesizer-Projekt, leider steige ich da durch die Assemblerroutinen nicht durch) Vielen Dank für jede Hilfe/Gedankenanstoß
@Martin Kreiner (maart) >Ich möchte einen "Synthesizer" für ein oder zwei Töne bauen um zum >Beispiel DTMF-Töne auszugeben. (Ein genauer Zweck besteht nicht, mir >geht es eher um die Grundlagen) OK. >Ich benutze den mega32 @16 MHz, Timer 1 im Mode 14 (Fast PWM) ohne >Prescaler. >Der Timer läuft bis ICR1 = 363, das ergibt ca. 44,1 kHz als Frequenz. DTMF in CD-Qualität! Das hat Stil! >Ich möchte jetzt aber auch "beliebige" Frequenzen erzeugen, also zum >Beispiel 100 Hz. >Wie geht man da vor? Siehe DDS. Beitrag "Re: DDS sample-Auswahl Rundungsfehler"
Application Note AVR314 beschreibt einen DTMF Ton Generator in C. Benötigt wird irgendein AVR mit RAM und PWM.
Einfach die Appnote 314 lesen: http://www.atmel.com/dyn/resources/prod_documents/DOC1982.PDF Hier gibts das dann auch schon in Fertig: http://www.fritzler-avr.de/HP/dtmf.php Matthias Sch. schrieb: > Benötigt wird irgendein AVR mit RAM und PWM. Flash wär auch nicht schlecht grins
:
Bearbeitet durch User
Danke schon mal für die Antworten. Bitte NICHT am DTMF festmachen, das hatte ich nur als Einstieg benutzt. Mir geht es eher darum, wie man aus einer vorgegebenen Sinus- oder wie auch immer, diese Schwingung in der Tonhöhe verändern kann.
Hi >Es gibt hier so ein geniales Synthesizer-Projekt, leider steige ich da >durch die Assemblerroutinen nicht durch Welches Projekt? MfG Spess
Auch wenns nicht an DTMF festgemacht werden soll, les die Appnote ;) Die DTMF Frequenz muss ja recht genau sein und da hat Atmel nen kleinen Trick in die Appnote gepackt. Zudem musste den 2. ton ja nicht synthetisieren. Der Trick kurz zusammengefasst: Anstatt bei einer Tabelle mit 128 Einträgen mit einer 7 bit Variable zu zählen (und bei dieser 1, 2 ,3 oder sonstwas Schritte vor zu springen), wird eine 11 bit Variable genommen und von der wird auf diese 7 bit abgebildet. (oder was sonst durch shiften statt division erreicht werden kann)
Spess53 schrieb: > Welches Projekt? > > MfG Spess Das hier: http://www.mikrocontroller.net/articles/AVR-Synthesizer
Martin Kreiner schrieb: > (Ein genauer Zweck besteht nicht, mir > geht es eher um die Grundlagen) Ah..ja. Dann guck mal in die Lernbetty (tibetanische Gebetsmühle...) wo die Ausgabe von beliebigen Tönen sprich Audio per PWM erledigt wird. Ist im Prinzip völlig einfach, man muß es bloß tun und einen hinreichend potenten µC benutzen. Die Betty hat nen ARM drin, aber du willst ja ohnehin nur die Grundlagen wissen. W.S.
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.