mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik stm32f103 wav player?


Autor: Markus (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
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:
Youtube-Video "MOD player on STM32F103 using 24kHz PWM"

Von STM gibt es ein Paper, wie man die Auflösung der PWM erhöhen kann:
http://www.st.com/content/ccc/resource/technical/d...

Leider gibt es in beiden Fällen keine Sourcen. Hat jemand schon mal so 
etwas gemacht oder kennt ein Code-Beispiel?

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine Application Note AN2812 von STM für den Speex-Vocoder:
http://www.st.com/content/ccc/resource/technical/d...

Autor: c-hater (Gast)
Datum:

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

Autor: dasrotemopped (Gast)
Datum:
Angehängte Dateien:

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

Autor: Nop (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Wieso eigentlich über PWM, wenn der Chip schon einen DAC hat, der 
ebenfalls mit DMA funktioniert? Gibt's da einen Vorteil für PWM?

Autor: Toralf Wilhelm (willi)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
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

Autor: Lubnan (Gast)
Datum:

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


Digital-to-analog converter (DAC)

Low-density devices are STM32F101xx, STM32F102xx and STM32F103xx
microcontrollers where the Flash memory density ranges between 16 and 32 Kbytes.

Medium-density devices are STM32F101xx, STM32F102xx and STM32F103xx
microcontrollers where the Flash memory density ranges between 64 and 128 Kbytes.

High-density devices are STM32F101xx and STM32F103xx microcontrollers where the Flash memory density ranges between 256 and 512 Kbytes.

XL-density devices are STM32F101xx and STM32F103xx microcontrollers where the Flash memory density ranges between 768 Kbytes and 1 Mbyte.

This section applies to connectivity line, high-density and XL-density STM32F101xx and STM32F103xx devices only.


Autor: Markus (Gast)
Datum:
Angehängte Dateien:

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

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier gibt es ein PWM-Beispiel ohne DMA:

https://github.com/davidcranor/Thinner-Client/blob...

Autor: dasrotemopped (Gast)
Datum:

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

Autor: dasrotemopped (Gast)
Datum:

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

Autor: Markus (Gast)
Datum:

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

Autor: Markus Horbach (dasrotemopped)
Datum:
Angehängte Dateien:

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

Autor: Markus (Gast)
Datum:

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

Autor: Markus Horbach (dasrotemopped)
Datum:

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

Autor: Markus (Gast)
Datum:

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

Autor: Markus Horbach (dasrotemopped)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
wav Player geht !

So, jetzt ist aber gut.

dasrotemopped.

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.