Forum: Mikrocontroller und Digitale Elektronik WAV Datei abspielen


von Patrick (Gast)


Lesenswert?

Hallo,
ich weiß, es gibt schon einige Themen darüber WAV Dateien mit einem AVR 
abzuspielen.

Undzwar, möchte ich mit einem AtMega32 nur eine 29kByte große WAV Datei 
abspielen. Ich weiß die ersten 44 Byte muss ich wegstreichen, da die der 
Header sind.

Ich dachte ich mach das einfach per PWM und ändere alle 125µs das 
Tastverhältnis. Sollte doch so gehen oder?

Nur hab ich zwei Fragen,
1. Wie bringe ich die Datei am Besten ins Programm, ich dachte per Array 
aber ist etwas mühsam jedesmal Beistrich etc. hinzuzufügen.
2. Wenn ich das Array mache, speichert es ja in den Data und Program 
Bereich, wie könnte ich das verhindern, denn der program Bereich ist ja 
nicht so groß, dass er das aufnehmen könnte.

Danke

Schöne Grüße
Patrick

von Peter D. (pdiener) Benutzerseite


Lesenswert?

Für das Einbinden gibt es zwei Möglichkeiten:

1. In ein Array mit dem Attribut PROGMEM. Dadurch liegt es automatisch 
nur im Flashspeicher. Dafür muss man aber ein Programm schreiben, das 
aus der Datei das Array als Text erzeugt.

2. Die Datei vom Linker einbinden lassen. Dafür muss man dann einen 
Symbolnamen angeben, unter dem man es im Programm als extern definiert 
benutzen kann.

In beiden Fällen muss man Routinen zum Lesen aus aus dem 
Programmspeicher verwenden. Siehe
http://www.nongnu.org/avr-libc/user-manual/group__avr__pgmspace.html#ga32d8ab354156f4b1ffdb77a275ba6223

Bei dem Ausspielen über PWM muss man sich überlegen, wie man dafür 
sorgt, dass die notwendige Auflösung abgebildet werden kann. Pro Sample 
muss also ein PWM-Zyklus laufen, der entsprechend der WAV-Auflösung 
genügend einstellbare Stufen hat.

Grüße,

Peter

von Patrick (Gast)


Lesenswert?

Hallo Peter!
Ich habs jetzt mal mit PROGMEM probiert, und erfolgreich getestet, es 
kommt Musik raus wie erwünscht.


Was du wegen der PWM meinst, weiß ich nicht so genau, ich hab jetzt 
einfach fast PWM mit 255 als Top verwendet und eine 8Bit 8kHz WAV 
genommen, und einfach die Bytes nach einander als OCR1A ( Compare ) 
angegeben. Funktioniert so wunderbar eigentlich.

Ich werde später mal mehrere verschiedene Audio Dateien brauchen, was 
eignet sich hierfür ? SD, MMC ? oder gibt es was einfacheres? Mir würde 
vermutlich 2MB reichen.

Schöne Grüße
Patrick

von Julian R. (tuefftler)


Lesenswert?

@Patrick:
Wemm es nur 2MB sind dann kann man ja einen EEPROM bemühen.
FAT bei Speicherkarten zurekonstruiren ist sehr aufwendig.

julian

von Ronny (Gast)


Lesenswert?

>@Patrick:
>Wemm es nur 2MB sind dann kann man ja einen EEPROM bemühen.
>FAT bei Speicherkarten zurekonstruiren ist sehr aufwendig.
>
>julian

Für Bastelzwecke kann man auch eine alte S-Karte als EEPROM mißbrauchen 
;)
Man muss ja keine FAT drauf packen und wenn man sowieso die meiste Zeit 
nur ließt braucht man sich auch um die Schreibzyklen keinen Kopf machen.

von Ronny (Gast)


Lesenswert?

Nachtrag:

..alte SD-Karte als..

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
Noch kein Account? Hier anmelden.