Forum: Mikrocontroller und Digitale Elektronik Sinus-Ton per PWM, Frequenz verändern.


von Martin K. (maart)


Lesenswert?

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ß

von Falk B. (falk)


Lesenswert?

@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"

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Application Note AVR314 beschreibt einen DTMF Ton Generator in C. 
Benötigt wird irgendein AVR mit RAM und PWM.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

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
von Martin K. (maart)


Lesenswert?

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.

von Spess53 (Gast)


Lesenswert?

Hi

>Es gibt hier so ein geniales Synthesizer-Projekt, leider steige ich da
>durch die Assemblerroutinen nicht durch

Welches Projekt?

MfG Spess

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

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)

von Martin K. (maart)


Lesenswert?


von W.S. (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.