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.
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.
>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.
>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 ...
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.
>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.