Hallo
Ich bin gerade dabei einen MP3 Player mit nem ATMega16 und dem VS1001 zu
realisieren. Als Speichermedium benutze ich eine MMC Karte. Der
Speicherkartenzugriff sowie die Ansteuerung des Decoders funktioniert
einwandfrei. Um den Decoder zu testen habe ich über RS232 MP3 Daten an
den Dekoder geschickt.
Jetzt habe ich versucht die MP3 Daten von der MMC dem Decoder zu
schicken, mein Problem ist, dass ich nun die Daten nicht fliessend
abspielen kann. Ich lese von der MMC immer 512Bytes und schicke diese
anschliessend an den Decoder. Immer danach habe ich für kurze Zeit
keinen Ton mehr, da ich wiederum Daten von der Karte einlese.
Hatte dieses Problem vielleicht auch schon jemand, oder weiss jemand wie
ich die Lese bez. Schreibgeschwindigkeit erhöhen kann, damit der Buffer
des Decoders nie ganz leer ist.
Den Decoder habe ich am SPI Bus des ATMega16 angeschlossen. Weil ich
irgendwie Probleme hatte mit dem ChipSelect, lese ich die Daten der MMC
per SoftwareSPI.
Besten Dank im voraus
hey knirps :)
wie wärs mal mit nem programmausschnitt??
in was programmierst du denn???
hab mir auch nen mp3-player gebaut (mit nokia6610-display, vs1011,
sd-karte, fat16 und sogar einer ordnerebene rumprahl ;) ), kann dir
bei bedarf ja mal nen bisschen code schicken - allerdings in asm ^^
ich würd an deiner stelle erstma nachschaun, was der controller
eigentlich alles so treibt, wenn er grad nicht einen block zum decoder
rüberschickt... eigentlich haste da massig zeit - selbst bei hohen
bitraten...
glg
zero_gravity
Hallo zero_gravity
Ich programmiere in C, asm hab ich nicht soviel Erfahrung..
Ich glaube ich hab meinen Fehler jetzt gefunden, als ich nachschauen
wollte wie gross der Buffer vom Decoder ist. Ich habe nähmlich immer
512Bytes an den Decoder gesendet, ohne zu überprüfen, ob DREQ gesetzt
ist...
1
while(PINB&DREQ)// Solange DREQ
2
{
3
MMC_Read(address,buffer);// 512Bytes von MMC Karte lesen
4
for(lauf=0;lauf<512;lauf++)
5
DEC_SendData(buffer[lauf]);// 512Bytes an Decoder senden
6
address++;// Nächste Speicheradresse
7
}
Ich schreibe den Code mal so um, dass nur immer 32Bytes an den Decoder
gesendet werden.. FAT16 implementierung habe ich noch nicht, kommt aber
noch.
Hattest du nie Probleme mit der SD-Karte? Bei mir funktionieren
irgendwie nur die MMC's..
Gruss knirps ;-)
Hi knirps!
Du sendest ja solange DREQ high ist immer 512 bytes, ohne DREQ wieder zu
überprüfen. Ist DREQ high, heisst das aber nur, dass mindestens 32
weitere bytes im Buffer Platz haben. Du musst also nach jeweils 32
gesendeten Bytes überprüfen, ob DREQ immer noch high ist. Ist dem so,
kannst du weiter senden, sonst musst du wieder warten.
Ich glaube, dass so wie du es machst immer mal wieder der Buffer
überläuft und daher auch die Aussetzer kommen.
Ich würde es mal so versuchen:
1
while(1){
2
3
4
MMC_Read(address,buffer);// Einen Sektor buffern
5
6
//Schleife 16 Mal durchlaufen (16*32=512)
7
for(unsignedcharzaehler=0;zaehler<16;zaehler++){
8
if(PINB&DREQ){
9
for(lauf=0;lauf<32;lauf++)
10
DEC_SendData(buffer[(zaehler*32)+lauf]);// Die nächsten 32 aus dem Buffer an Decoder senden
11
}
12
}
13
address++;// Nächste Speicheradresse
14
}
Kann den Code momentan nicht überprüfen, aber ich glaube das sollte so
funktionieren ;-)
Nik
Ich habe schon bemerkt, dass ich nur 32Bytes auf einmal senden darf..
Bin mir nicht ganz sicher ob das so Funktioniert, ich hätte statt
if (PINB&DREQ)
while (!(PINB&DREQ))
genommen.
ich habe das gefühl, dass mein problem nicht die lesegeschwindigkeit
ist, irgendwie spielt der Decoder die Audiodaten mindestens doppelt so
schnell ab als er sollte..
Ich habe einen 24.576 Quart am Decoder, da muss ich das CLOCKF Register
nicht beschreiben oder?
Das Mode Register ist auf 0x0000 gesetzt, also sollte "fast forward"
nicht aktiviert sein..
Habe mein Problem gefunden:
Da ich die Fat implementierung noch nicht habe, habe ich über ein selbst
geschriebenes Programm die MP3 Daten über RS232 auf die Speicherkarte
kopiert. Anscheinend habe ich dabei immer ein paar Bytes verloren...
Habe jetzt ein Lied über mein USB Cardreader auf die Karte kopiert, die
Speicherkarte lese ich ab Adresse 0 aus. Am Anfang höhr ich nur ein
rauschen, bin ich aber mal beim Lied angelangt, spielt es dieses ohne
unterbrüche ab freu
Wünsche noch einen schönen abend :)