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