Eigentlich sollte die MCU dafür geeignet sein, WAV files mittels PWM abzuspielen. Am besten wäre die DMA direkt mit der PWM zu verknüpfen. Hier hat das scheinbar schon mal jemand gemacht: https://www.youtube.com/watch?v=-L-ZGksh9n8 Von STM gibt es ein Paper, wie man die Auflösung der PWM erhöhen kann: http://www.st.com/content/ccc/resource/technical/document/application_note/7e/17/df/9e/5d/04/4b/72/DM00119042.pdf/files/DM00119042.pdf/jcr:content/translations/en.DM00119042.pdf Leider gibt es in beiden Fällen keine Sourcen. Hat jemand schon mal so etwas gemacht oder kennt ein Code-Beispiel?
Eine Application Note AN2812 von STM für den Speex-Vocoder: http://www.st.com/content/ccc/resource/technical/document/application_note/56/2f/7a/13/d6/cc/45/b2/CD00204907.pdf/files/CD00204907.pdf/jcr:content/translations/en.CD00204907.pdf
Markus schrieb: > Eigentlich sollte die MCU dafür geeignet sein, WAV files mittels PWM > abzuspielen. Woher zum Teufel willst du das wissen? Du hast doch ganz offensichtlich rein überhaupt keine Ahnung vom Format von WAV Files. Die bieten nämlich als Containerformat eine schier unerschöpfliche Vielzahl möglicher Inhaltsformate an, u.a. sind natürlich welche zumindest denkbar, die die Fähigkeiten deiner MCU weit überfliegen. > Am besten wäre die DMA direkt mit der PWM zu verknüpfen. Das kann klappen. Aber nur bei den allerprimitivsten WAV-Files. Nämlich PCM-WAV, welches unkomprimierte Daten enthalten. Das ist vermutlich auch das, was du EIGENTLICH meintest, aber wegen intellektueller Beschränkungen nicht korrekt zum Ausdruck bringen konntest. Der Trick ist dann ganz simpel: mache zwei Buffer (deren nötige Größe man dem WAV-Header entnehmen kann) und fülle sie abwechselnd mit den Daten aus den WAV-Chunks. Gebe den gerade gefüllten Buffer aus, sobald der zuvor gefüllte fertig ausgegeben ist. Fülle wiederum den gerade ausgegebenen Buffer mit dem Inhalt des nächsten Chunks. Trivialste Urschleimscheisse... Funktioniert so einfach aber eben nur, wenn das WAV-File eben nur PCM-WAV enthält und das Bitformat der Samples obendrein dem benötigten Ausgabeformat entspricht. Wenn nicht, wird es schon etwas komplizierter. Und wenn es kein PCM-WAV ist, dann ist's nix mehr mit primitivem DMA-Bytegeschubse. Dann musst du den Scheiss erstmal dekodieren bevor du ihn ausgeben kannst. Dann brauchst du einen passenden Decoder. Welchen? Kannst du wiederum dem WAV-Header entnehmen. > Leider gibt es in beiden Fällen keine Sourcen. Hat jemand schon mal so > etwas gemacht oder kennt ein Code-Beispiel? Lern' programmieren. Das ist was anderes, als fremden, unverstandenen Code stumpf zusammenzunageln. Das Minimum, was für eine kompetente Benutzung des fremden Codes erforderlich ist, ist in diesem Fall eine zumindest grundlegende Kenntnis über das WAV-Fileformat, seinen Charakter als Containerformat und die sich daraus ergebenden Konsequenzen...
oder man liest die AppNote von ST en.CD00259245.pdf : AN3126 Audio and waveform generation using the DAC in STM32 und such dann einen passenden uC aus (siehe Bild). In den Beispielprojekten gibt es dann Beispiele: X:\..\STM32Cube\Repository\STM32Cube_FW_F1_V1.4.0\Projects\STM3210C_EVAL \Examples\DAC\DAC_SignalsGeneration Durch die Kopplung von Timer als Trigger für DMA und DAC ohne große CPU Last zu implementieren. Und wer ein STM32F4-Disco hat kann mit dem Beispielcode das Onboard Mikrofon und den Kopfhörerausgang als Audio Schnittstelle nutzen und ein USB-Stick ist der Datenspeicher. Funktioniert gut. Gruß, dasrotemopped.
Wieso eigentlich über PWM, wenn der Chip schon einen DAC hat, der ebenfalls mit DMA funktioniert? Gibt's da einen Vorteil für PWM?
das simple PCM-WAVE Bitgeschubse geht schon mit einem "Minikleinen" Tiny85 AVR -> siehe ElmChan da sind auch src zu finden, wenn man nicht selber denken möchte. LG
Nop schrieb: > Wieso eigentlich über PWM, wenn der Chip schon einen DAC hat, der > ebenfalls mit DMA funktioniert? Gibt's da einen Vorteil für PWM? Leider haben nicht alle STM32F103 eine DAC.
1 | Digital-to-analog converter (DAC) |
2 | |
3 | Low-density devices are STM32F101xx, STM32F102xx and STM32F103xx |
4 | microcontrollers where the Flash memory density ranges between 16 and 32 Kbytes. |
5 | |
6 | Medium-density devices are STM32F101xx, STM32F102xx and STM32F103xx |
7 | microcontrollers where the Flash memory density ranges between 64 and 128 Kbytes. |
8 | |
9 | High-density devices are STM32F101xx and STM32F103xx microcontrollers where the Flash memory density ranges between 256 and 512 Kbytes. |
10 | |
11 | XL-density devices are STM32F101xx and STM32F103xx microcontrollers where the Flash memory density ranges between 768 Kbytes and 1 Mbyte. |
12 | |
13 | This section applies to connectivity line, high-density and XL-density STM32F101xx and STM32F103xx devices only. |
>Wieso eigentlich über PWM, wenn der Chip schon einen DAC hat, der >ebenfalls mit DMA funktioniert? Gibt's da einen Vorteil für PWM? Es dieses Board, also ohne DAC. Deshalb PWM. Mein Ziel sind Audioanwendungen wie WAV-Player und Synthesizer. Ich habe einiges dazu mit den AVRs entwickelt ( from scratch ). Jetzt will ich einiges mit den kleinen STM machen ( Kosten, viele verteilte Klangerzeuger ), da diese wesentlich komplexere Synthesizer und Filter ermöglichen. Die DMA im STM hat den Vorteil, dass keine Rechenlast durch die DAC Ausgabe entsteht. Beim AVR war das immer eine Interruptroutine welche die PWM nachladen musste, da geht Einiges beim ohnehin für Synthesizeranwendungen etwas knapp bemessenen AVR verloren.
Hier gibt es ein PWM-Beispiel ohne DMA: https://github.com/davidcranor/Thinner-Client/blob/master/STM32F10x%20Standard%20Peripheral%20Library%203.3.0/Project/STM32F10x_StdPeriph_Examples/TIM/PWM_Output/main.c
>Mein Ziel sind Audioanwendungen wie WAV-Player und Synthesizer. Macht bestimmt Spaß. >Jetzt will ich einiges mit den kleinen STM machen ( Kosten, viele >verteilte Klangerzeuger ), da diese wesentlich komplexere Synthesizer >und Filter ermöglichen. Das ist richtig im Vergleich zu AVR. Aber warum dann einen STM32F103 ohne DAC / I2S ? Warum nicht das Nucleo-STM32F446RE mit Rechenpower, DAC, I2S ? Oder das STM32F4-Discovery mit Audio Ausgang ? Sportlicher Ergeiz mit wenig Hardware alles möglich zu machen ? Oder nur Geiz, das billigste Board zu finden ? Gruß, dasrotemopped.
vielleicht interessiert ja das Projekt auf einem STM32: http://www.pouet.net/prod.php?which=61197 Audio und Video Out, Demo als Source verfügbar ... Gruß, dasrotemopped.
>vielleicht interessiert ja das Projekt auf einem STM32: >http://www.pouet.net/prod.php?which=61197 >Audio und Video Out, Demo als Source verfügbar ... Das ganze ist aber für einen STM32F4 gemacht ( welches Board? ). Die haben wahrscheinlich allen einen DAC, da kann man sich die PWM dann sparen.
>welches Board?
STM32F4-Disco
Der Audio Ausgang wird über I2C (Konfiguration) und I2S (Audio
Datenstrom) implementiert, siehe Bild.
Neben "Jupiter&Beyond" gibt es noch "peridiummmm" auf der selben
Hardware vom selben Progrmmierer.
Wenn man die Grafik weglässt bleibt viel Power für Audio Synthese übrig.
Der F4 hat ja den DSP Befehlssatz, der dir bei der Synthesizer Anwendung
sicher nützlich ist. Und über die USB Buchse ist auch genug Platz für
WAV Dateien auf nem Memory Stick.
Die richtige Hardware für die Aufgabe, aber geschenkt wird einem da nix,
da ist Arbeit zu Hauf zu erledigen.
Gruß,
dasrotemopped.
Ja, aber ich habe dieses Board: http://www.mikrocontroller.net/attachment/preview/302883.jpg Einen AudiDAC kann man überall dran basteln. Es geht hier darum, das Maximum aus dem Minimum heraus zu holen. Hier kannst Du mal hören, was man aus einem LPC810 ganz ohne Hardware Peripherie nur mit Bit-Banging heraus holen kann: https://www.indiegogo.com/projects/the-dsp-g1-analog-modeling-synthesizer#/
>Es geht hier darum, das Maximum aus dem Minimum heraus zu holen. Dann ist der STM32F103 überdimensioniert: http://www.linusakesson.net/scene/craft/ Geht auch mit nem Atmega88. Ich bin nicht so leidensfähig. In Zeiten von Multicore CPU/GPU PCs ist embedded schon Beschränkung genug. Dann muss es nicht auch noch ein uC ohne die Hardwarefunktionen sein, die ich in meiner Anwendung benötige. Gruß, dasrotemopped.
Den Link kenne ich schon seit gefühlten 10 Jahren.
>Ich bin nicht so leidensfähig.
Wenn man so argumentiert, kann man gleich einer RasPi mit Soundkarte
nehmen.
Irgendwo muss die Herausforderung ja bleiben.
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.