mikrocontroller.net

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


Autor: Red-19 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Red-19 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hauke Radtki (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ...

Autor: TheMason (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: Red-19 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Hauke Radtki (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
natürlich auf die die du filtern willst, also auf die PWM frequenz

Autor: Florian Scharf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Googel mal nach Klasse-D Verstärkern. Die funktionieren nach diesem
Prinzip.

Schöne Grüße, der Flo

Autor: TheMason (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Autor: Red-19 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: romanua (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sind Tastfrequenz und PWM-Frequenz denn nicht dasselbe?

Autor: philipp (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: philipp (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.