Hallo. Ich möchte in den Ferien versuchen einen kleinen MP3-Player zu bauen. Ich habe bereits den MP3-DecoderChip VS1003. Nun muss ich ja die Datenkommunikation zwischen SD-Karte und dem Decoder herstellen. Außerdem muss ich nebenbei noch ein Grafikdisplay betreiben. Die SD-Karte hat ja im Normalfall das FAT-Dateisystem. Und genau hier denke ich liegt das Problem. Ein normaler AVR wird - denke ich - nicht genug RAM haben, um das Dateisystem sinnvoll zu unterstützden, oder? Und selbst wenn: wie würde es mit der Geschwindigkeit aussehen? Achso.. im Bateriebetrieb hab ich auch nur 3.3V zur Verfügung - und die möchten so lange wie möglich halten -> sind da AVRs überhaupt geeignet? Was würdet ihr empfehlen?? MFG
> Die SD-Karte hat ja im Normalfall das FAT-Dateisystem. Und genau hier > denke ich liegt das Problem. Ein normaler AVR wird - denke ich - nicht > genug RAM haben, um das Dateisystem sinnvoll zu unterstützden, oder? Doch. Ulrich Radig hat die Grundfunktionen des FAT auf AVR implementiert, www.ulrichradig.de > Und selbst wenn: wie würde es mit der Geschwindigkeit aussehen? Dürfte wohl schon einigermassen gehen. Auf der anderen Seite will ein MP3-Player die Daten doch relativ fix geliefert bekommen... > Achso.. im Bateriebetrieb hab ich auch nur 3.3V zur Verfügung - und > die möchten so lange wie möglich halten -> sind da AVRs überhaupt > geeignet? Eigentlich ja, denn es gibt ja die L-Varianten. Sind übrigens ganz normale AVRs, die nur anders getestet werden. Also mit ein klein wenig Glück läuft ein 'normaler' AVR auch auf 3.3 V. Natürlich aufpassen beim Brown-Out-Detector (Fuses!).
Ich hab einen Player mit VS1011B und mega128L laufen. Die MP3 Daten kommen von SD Karte mit FAT32. Der mega128 läuft mit internem RC Oszillator mit 8MHz. Das ganze wird gespeist von einem LiIo/LiPo Akku mit 3.3V Spannungstabilisierung. Ist also kein Problem. /Michael
Fürs FAT-Lesen brauchst Du nicht mehr als 32 Bytes RAM (= 1 Eintrag), plus ein paar Variablen wie BlocksPerCluster und so. Funktioniert bei mir auf einem ATMega16 wunderbar. (Gut, ich habe noch 24 Bytes für das Anzeigen des Dateinamens, aber das könnte man auch wegoptimieren, weil ein Display ja auch ein prima RAM ist.) Klar, so etwas wie eine sortierte Liste aller auf der Karte gespeicherten Daten ist damit nicht machbar. Aber wenn man mit unsortieren Listen zufrieden ist oder eh nur Playlists abspielt kann man alles auf einem sehr kleinen Prozessor unterbringen. Man muss vielleicht ein bisschen mehr Gehirnschmalz reinstecken. Aber gerade das macht für mich den Reiz aus.
Vieviel Strom zieht denn so ein AVR? (z.B. der ATMega128) ~50mA? oder weniger bei 3.3V? Interessant wäre jetzt ja noch, ob es sinnvoll ist, den AVR hoch zu takten und datfür solange wie möghlich im Sleep-Modus zu bereiben, oder ob man ih lieber niedriger taktet... was meint ihr?
Das hängt von Betriebspannung und Takt ab. Aber auf 50mA bekommst du den NIE. Selbst 20mA wären schon arg viel. Wenn es allerdings wirklich auf Stromsparen im Dauerbetrieb ankommt, sind die AVRs wohl nicht unbedingt erste Wahl.
Naja im Sleep-Mode wären die schon geeignet :) Aber ein MSP430 oder wie die heißen haben mir zu wenig RAM und auch zu wenig Programmspeicher, denke ich... Gibts da noch was anderes, was ihr empfehlen könntet?
MSP430: MSP430F1611 10kB RAM mit 55kB Flash (Maximum RAM) MSP430FG4619 4kB RAM mit 120kB Flash (Maximum Flash) Siehe http://focus.ti.com/lit/ml/slab034k/slab034k.pdf
Es gibt noch die M16C/M32C Mikrocontroller von Renesas. Die haben bis zu 48KB RAM und 1MB Flash. www.m16c.de
Ich denke auch, dass ein AVR reicht ... schau mal ins Datenblatt da ist angegeben wie der Strom von dem takt und der spannung abhängt. Und um nur Daten zu schaufeln kannst du ja fast alle peripherie vom AVR abschalten.
Hat denn schon jemadn erfahrung mit dem VS1003? Mit einer MP3-Datei mit 320Kbps habe ich ja praktisch 40Kb/sec Datenverkehr. Wenn man bedenkt, dass ich diese Lesen und schrieben muss und zwischendurch auch noch bissl was anderes z.B. das Display betreiben muss, wirds bei 8Mhz doch schon ganz schön eng.. Naja. Am besten ich probiers einfach mal aus. Auftakten geht ja immer. Aber trotzdem bleibt die Frage: "Interessant wäre jetzt ja noch, ob es sinnvoll ist, den AVR hoch zu takten und datfür solange wie möghlich im Sleep-Modus zu bereiben, oder ob man ih lieber niedriger taktet... was meint ihr?"
Ich verwende eine modifizierte Version des ulrich radig MMC Codes und betreibe damit einen VS1011 an einem mega8 @8MHz. Um eine 160kbit mp3 Datei abzuspielen, reichen etwa 2MHz Taktfrequenz aus (es ist aber ziemlich and er Grenze). Mit 8MHz sollten also 320kbits kein Problem sein, vorausgesetzt die Software ist einigermaßen durchdacht programmiert. Die Orginalversion der ulrich radig Software ist nicht für mp3s geeignet, da jeder Block neu mitsamt der Clusterchain gelesen wird. Ab etwa 6MByte Dateigröße reichten selbst 16MHz für eine 160kbit Datei nicht mehr aus.
Der VS1011 ist dem VS1003 ja relativ ähnlich.. nur kann ich zusätzlich wmv und midi abspielen, außerdem noch aufnehmen... hast du mit deinem Chip gute Erfahrungen bezüglich des D/A-Wandlers gemacht, oder sind die Chips klanglich nicht der renner? Ich hatte z.B. mal einen MP3-Player gekauft, dort war es widerlich die Musik leise abzuspielen.. ständig irgendwelchen störungen und hohe Frequenzen (vllt irgenein TaktSignal) usw.. Mir ist übrigens aufgefallen, dass der VS1003 kein normales wav abspielen kann... er kann nur so ein komprimiertes WAV-Format... d.h. um WAV-Unterstützung einzubauen muss der Chip zusätzlich noch in der Lage sein das Wav-File zu komprimieren... mal sehen, wie sich das lösen lässt.. oder hat jmd von euch ne Idee? Und immernoch nervt die Frage: "Interessant wäre jetzt ja noch, ob es sinnvoll ist, den AVR hoch zu takten und dafür solange wie möglich im Sleep-Modus zu betreiben, oder ob man ihn lieber niedriger taktet... was meint ihr?"
Mein mega128 und VS1011 habe ich mit 320kBit MP3 getestet, läuft ohne Problem. Selbst mit Nokia color LCD was auch noch mit an der SPI hängt. Problem ist eher der VS1011, dessen Takt sollte entsprechen hoch sein, siehe VLSI VS10xx Application Note. Zum Stromverbrauch: Die Energiebilanz meines Players: * Spielbetrieb, LCD Backlight OFF, 2GB Karte 50mA * Spielbetrieb, LCD Backlight 50%, 2GB Karte 65mA * Spielbetrieb, LCD Backlight 100%, 2GB Karte 75mA * Stop Mode, LCD Backlight OFF, 2GB Karte 28mA * Stop Mode, LCD Backlight 50%, 2GB Karte 42mA * Stop Mode, LCD Backlight 100%, 2GB Karte 50mA * Sleep Mode, 2GB Karte 700uA * Sleep Mode, ohne Karte 400uA Der größte Verbraucher ist die SD/MMC Karte. Deshalb lohnt es nicht den AVR ständig in Sleep Mode zusetzen. /Michael
> Mit einer MP3-Datei mit 320Kbps habe ich ja praktisch 40Kb/sec > Datenverkehr. Wenn man bedenkt, dass ich diese Lesen und schrieben > muss Kleiner Tipp: Das musst Du gar nicht. Ich hab meinen Bus so aufgebaut, dass die Nutzdaten von der Karte direkt zum MP3-Chip laufen. Nur der Takt kommt vom AVR. Ich kann mich nur wiederholen: "Man muss vielleicht ein bisschen mehr Gehirnschmalz reinstecken. Aber gerade das macht für mich den Reiz aus."
FAT ist absolut überflüssig. Die heutigen Speicherkarten haben soviel Platz, da kann ich pauschal jedem Musikstück 5MB zuordnen.
> ? Dein MP3 Decoder Chip kann Fat? Nein! Deshalb hab ich ja "Nutzdaten" geschrieben. FAT und CRC gehen schon an den Controller. In einem "normalen" Programm weiß man ja auch, was Dateiinhalt ist und was Verwaltungsdaten. Und anstatt der Codezeilen "speichere Dir die x nächsten Bytes und schicke sie dann an dem MP3-Chip" steht bei mir halt "MP3-Chip fertig machen und x Takte ausgeben". Aber da sind doch sicherlich schon hunderte vor mir drauf gekommen.
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.