www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mp3 Wiedergabe - AT89C51SND1C


Autor: Manuel Fegerl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo an alle

wie vielleicht schon aus älteren Threads bekannt versuche ich einen
MP3-Player mithilfe des AT89C51SND1C zu realisieren. Gelesen werden die
Daten von einer üblichen IDE-Festplatte, das funktioniert schon
einwandfrei.. kontrolliert über visuelle ausgabe bestimmter datensätze
am LCD..

Leider tut jedoch der MP3-Dekoder nicht was ich will. Er tut nämlich
garnichts. Nach aktivierung fordert er ein Frame an, und ladet so lange
Bytes bis das Frame komplett ist, danach treten sofort Layer, Sync. und
CRC Fehler auf.

Woran das genau liegt ist mir unklar.. für mich gäbe es 2 Ansätze:

1.) Wir geben ihm das gesammte MP3-File.. ist das so richtig? oder muss
ich den reinen Datenstrom herausfiltern und ihm diesen geben? also ohne
ID3-Tags etc..?

2.) Die Dekoderfrequenz... ergibt sich durch Teilung des PLL-Taktes.
Leider war es mir anhand des Datenblatts nicht möglich hier konkrete
Frequenzen herauszufinden, das einzige was angegeben ist sind
Mindestfrequenzen. Reichen diese aus, oder muss man sich bei bestimmten
bitraten,samplingfrequenzen etc an eine bestimmte dekoderfrequenz
halten.. und falls ja wie errechnet man diese?

Vielen Dank für eure Hilfe

Schöne Grüße
Manuel

Autor: Tobias Schneider (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
wenn deine dateien id3v2 tags am anfang haben darfst du die nicht dem
dekoder geben. der versteht die nicht. bei den frequnezen musst du bei
dem dekoder nur ueber dem minimum bleiben. das interface zum audio-dac
braucht aber eine bestimmte frequenz(passend zu samplingrate der
dateien), damit die audio daten in der richtigen geschwindigkeit
rausgehen.

Gruß tobias

Autor: Manuel Fegerl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Tobias, danke für die schnelle Antwort

weißt du zufällig wie ich einfach und effektiv den ID3V2 header
wegschneiden kann? hab mir verschiedene dateien angesehen, und das
sieht oft ganz anders aus.. hab da noch keine wirkliche übereinstimmung
gefunden.. vielleicht hast du da ne idee?

übrigens: hast du vielleicht ne andre kontaktmöglichkeit als dieses
forum? falls du sie nicht im forum posten magst kannst mir gern auch ne
email schicken.

Autor: Tobias Schneider (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
warum nicht im forum? Nur so koenen auch andere leute was davon haben.

Es ist eigendlich relativ einfach den ID3 heder wegzuschneiden. Du
musst einfach nur nach dem ersten gueltigen mp3 frame suchen. das
beginnt immer mit 0xFF und 0XFA oder 0XFB.

Ich hab diesen java code benuzt um ihn die position in der datei zu
ermitteln:
RandomAccessFile mp3In = new RandomAccessFile(file,"r");
while((temp=mp3In.read())!=-1){
  if(temp == 0xFF){
    temp = mp3In.read();
      if(temp==0xfb || temp==0xfa){
        mp3In.seek(mp3In.getFilePointer()-2);
        ltemp=mp3In.getFilePointer();
        break;
      }
  }
}

sollte leicht auf c portierbar sein

Gruß Tobias

Autor: Manuel Fegerl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hast ansich recht, weiß nur nicht wie oft du hier reinschaust.. aber
scheinbar eh häufig :)

danke nochmals

zusammenfassend:

der MP3-Dekoder Takt ist egal, solange er mindestens der
Mindestfrequenz laut Datenblatt entspricht.

Das erste Frame bekomme ich durch einfaches suchen nach FF FA/FB, wobei
dieses FF FA/FB dann zum ersten frame schon dazugehören (oder?)

Der Audio-Ausgang-Clock ist von der samplingrate abhängig.. hast du da
vielleicht genauere anhaltspunkte für mich.. eventuell ne formel oder
ne umrechnungstabelle? als dac verwend ich einen AD1858.

Vielen Dank

grüße
Manuel

Autor: Tobias Schneider (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab mir damals ueber ein kleines java programm( :) ) die werte fuer
20mhz und 44.1khz(gibt eh kaum andere raten) ausgerechnet.

Hier das ergebnis:

/*
Clock = 20000.0
nDiv = 125.0 rDiv = 568.0 PLLClock = 90317.46
aDiv = 7.0 AudioClock = 11289.683
mDiv = 3.0 MP3Clock = 22579.365
*/

void InitMP3()
{
  MP3CLK=3;
  MP3VOL = MP3VOR = 0x0F;
  MP3CON=0xA0;
}

void InitAudio()
{
  AUDCLK=7;
  AUDCON0=0x86;
  AUDCON1=0x40;
  wait_10ms(1);
  AUDCON1=0x41;
}

void InitPLL()
{
  PLLNDIV=125;
  PLLRDIV=0x8E;
  PLLCON=0x02;
  while(!(PLLCON & 0x01));
}

Ich habe damals aber einen PCM1728 genommen(Ich schaetze mal genauso
ein Sample wie dein AD :) )

Ich glaube der hate eine 386fache sample rate. weis es aber leider
nicht mehr genau.

Gruß Tobias

Autor: Tobias Schneider (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok 11289.683KHz / 44.1 KHz = 256,002 also 256fache samplerate. ich
denke, dass du deinen dac darauf einstellen kannst.

Autor: Manuel Fegerl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja meinen dac kann man in beiden betriebsarten betreiben

ok danke erstmal, werd das alles testen (komm leider erst kommenden
donnerstag dazu)

meld mich dann wieder :)

Autor: Manuel Fegerl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey :)

Danke erstmal, der MP3 Dekoder funktioniert nun (jippie)

jetzt fehlt praktisch nur noch der DAC.. könntest du mir vielleicht
erklären wie du die frequenzen für ihn berechnet hast? damit ich das
mit meinem DAC nachvollziehen kann

vielen dank

grüße
Manuel

Autor: Stefan Müller (skysurfer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich bastel auch grad etwas mit dem 89C51snd1c rum und hänge grade etwas.
Wie hast du die IDE Platte an den Chip angeschlossen?
Über Levelconverter? Wenn ja über welchen?

Gruß Stefan

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.