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!
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.
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 ...
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ß
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!
Googel mal nach Klasse-D Verstärkern. Die funktionieren nach diesem Prinzip. Schöne Grüße, der Flo
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 :-)
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!
"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?
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.