Forum: Mikrocontroller und Digitale Elektronik Sound über PWM wiedergeben?


von Red-19 (Gast)


Lesenswert?

Hallo,
ich will mit einem AVR einen kleinen Sound, der im EEPROM liegen wird
wiedergeben. Jedoch sollte es sich bei dem AVR aus Platz- und
Kostengründen um einen Tiny (z.B. Tiny15) handeln. Deshalb scheidet der
normale Weg über einen DAC aus. Nun habe ich zufällig hier in diesem
Forum gelesen, dass man den PWM Ausgang des AVRs sozusagen
zweckentfremdet als DAC benutzen kann. Jedoch wurde in dem Thread, der
schon ewig alt ist, nicht darüber geredet, wie es funktioniert, sondern
über ein damit zusammenhängendes Thema.
Das Problem ist, dass ich mir nicht vorstellen kann, wie ich mit PWM
einen Sound wiedergeben kann, da PWM bekanntlich nur Rechtecksignale
liefert.
Wird zudem noch eine Hardware benötigt, die meine Rechecksignale in
z.B. einen Sinus umwandelt? Was passiert dann aber, wenn mein Ton kein
Sinus sondern ein Dreieck oder Sägezahn ist? Funktioniert das
trotzdem?

Hat schon jemand Erfahrungen damit? Kann mir jemand sagen, wie das
konkret funktioniert?

Danke schon einmal im Voraus.

Gruß Red-19!

von Red-19 (Gast)


Lesenswert?

Ohhhh, da war mein Kollege ein wenig schneller...
http://www.mikrocontroller.net/forum/read-1-203477.html#new
Wer trotzdem Tips hat soll sie bitte trotzdem posten.

Danke.

von Hauke Radtki (Gast)


Lesenswert?

Jo der Tiny 15 hat ja nen PLL so kann der nen extrem hohen PWM takt
(glaub nen paar MHZ) also brachst du das signal noch nicht ma glätten
... und dann änderst du bei jedem durchlauf den wert im register auf
den gewünschten wert ... aber ich weis nich, ob das EEPROM schnell
genug ist, ich würds ins flash legen ...

von TheMason (Gast)


Lesenswert?

Hallo Red.

ich habe eine PWM-Soundausgabe schonmal mit einem FPGA gemacht (war
vorgestern :-) Das Prinzip ist simpel. der Trick liegt darin das die
PWM deutlich schneller läuft als die eigentliche Samplerate (also die
Rate mit der die Samples auf einem DAC ausgegeben werden). Ich habe
Faktor 8 verwendet, aber 2 sollte es auch tun.
Um aus einem PWM ein analoges Signal zu machen braucht man nur einen
Tiefpass (im einfachsten Fall einen Kondensator und einen Widerstand)
Ich kenn mich jetzt nicht so mit dem ATTiny aus aber wenn du einen
Sound wiedergeben möchtest (sagen wir mal mit 8 Bit 8 kHz), dann
solltest du deine PWM mit 8 kHz  256  2 = ca 4MHz laufen lassen. Ich
weiß nicht wie das mit interrupts aussieht wenn die PWM abgelaufen ist
(du mußt ja wissen wann du dein nächstes Sample reinschieben mußt ...)
aber sollte kein Thema sein :-)

Die Lösung ist zwar ein bischen mit dem Kopf durch die Wand, da es noch
bessere Lösungen (algorithmisch) gibt. Aber mit einer derart einfachen
lösung hab ich das in meinem FPGA auch gemacht und ein Dreieck und
Sägezahn sind problemlos (sogar vom FPGA aus :-) möglich. (sieht auch
lustig auf dem Scope aus, selbst wenn mein Tiefpass wirklich nur aus
einem Widerstand und Kondensator besteht), aber man hört die
unterschiede zwischen Dreieck uns Sägezahn .. (und das bei 22kHz)
Eine PWM wird selbst in hochwertigen Verstärkern eingesetzt. Allerdings
verwenden die da schon die angesprochene elegante lösung, denn wenn man
sich überlegt 24Bit und 48/96 Khz ..... da muß man schon verdammt
schnell Zählen können um mit dem Kopf durch die wand gehen zu können.
:-)

Gruß

von Red-19 (Gast)


Lesenswert?

Hallo TheMason!
Vielen Dank. Das wars, was ich gesucht habe. Hört sich ja eigentlich
ganz einfach an.
Nur noch eines: Auf welche Frequenz muss ich meinen Tiefpass dann grob
abstimmen?

Danke!

Gruß Red-19!

von Hauke Radtki (Gast)


Lesenswert?

natürlich auf die die du filtern willst, also auf die PWM frequenz

von Florian Scharf (Gast)


Lesenswert?

Googel mal nach Klasse-D Verstärkern. Die funktionieren nach diesem
Prinzip.

Schöne Grüße, der Flo

von TheMason (Gast)


Lesenswert?

Noch ein kleiner Hinweis Red :

Damit der Audio-Ausgang wenigstens ein bischen nach was klingt,
solltest du einen recht steilen Tiefpass haben (4. - 6. Ordnung) Es
geht auch mit einem einfachen (also 1. Ordnung), aber wenn man
Frequenzen im Grenzbereich ausgeben möchte klirrts durch das Aliasing
grauselig. Hochwertige DACs haben auch immer einen sehr steilen Filter
im Ausgang.

Gruß

@florian : Danke noch für die Ergänzung. Kam nicht auf den
Verstärkertypen :-/ bei meinem Posting weiter oben :-)

von Red-19 (Gast)


Lesenswert?

Hallo,
@ all
Danke für eure Tips!   :) Das Prinzip ist mir jetzt klar. Ich werde in
den nächsten Zeit mal versuchen das Projekt in Angriff zu nehmen.
Falls ich noch weitere Fragen habe werde ich sie stellen, aber ich
glaube dass so ziemlich alles klar ist.
Das mit dem EEPROM habe ich mir auch schon überlegt. Dann lege ich den
Sound einfach in den Flash  ;) und fertig.
Also, danke noch einmal an alle.

Gruß Red!

von romanua (Gast)


Lesenswert?

"natürlich auf die die du filtern willst, also auf die PWM frequenz"

Sicher nicht die Abtastfrequenz? Die "Hochwertigen DACs" haben doch
"immer einen sehr steilen Filter" am Ausgang um die Abtastfrequenz
rauszufiltern bzw den Output zu glaetten, glaube ich. Oder liege ich
falsch?

von Rolf Magnus (Gast)


Lesenswert?

Sind Tastfrequenz und PWM-Frequenz denn nicht dasselbe?

von philipp (Gast)


Lesenswert?

Ich glaube er meint mit der Abtastfrequenz die Frquenz des Audio
Sampling und mit PWM Frequenz halt den PWM Takt.

Nochmal zum Filter. Wenn ich meine PWM Frequenz sehr viel größer als
meine Sampling Frequenz wähle, dann sollte ich doch auch mit
schlechterern Filtern keine Aliasing Probleme mehr haben, oder sehe ich
das Falsch?

von philipp (Gast)


Lesenswert?

Achne, das war ja anders. Meins Sampling muss weit über der Maximalen
"Musik" Frequenz liegen, damit ich mit einem schlechten Filter die
Spektren trennen kann.

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.