www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Sehr schlechte MP3-Wiedergabequalität


Autor: Luca Bertoncello (lucabert)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, Leute

Heute habe ich die Funktionen für die Verwaltung der SD/MMC-Karte in 
meinen Wecker eingebunden.
Die Funktionen habe ich von SVN heruntergeladen. Die sind die Funktionen 
von dieser Artikel: http://www.mikrocontroller.net/articles/AVR_FAT32
Ich kann jetzt problemlos Dateien von der Karte lesen.

Nun wollte ich eine MP3-Datei aus der Karte abspielen.
Es klappt, selbstverständlich, aber die Qualität ist sehr schlecht.
Man hört immer in Hintergrund eine hohe Summen und sind einige 
Nebengeräusche dazu zu hören.

Bei der Entwicklung, bisher, habe ich einen etwas schlechter 
Lautsprecher an einer Ausgabe des Verstärkers angebunden (andere 
Lautsprecher habe ich leider nicht, dann muss ich ein Kanal an die Luft 
hängen lassen).
Am Anfang, dachte ich, daß das das Problem war, ich habe also einen 
guten Lautsprecher von meiner Stereoanlage angeschloßen.
Die Qualität ist deutlich besser, aber das Problem ist immer zu hören.

Hat jemand eine Ahnung, was das Problem sein kann?
Vorher, mit der kleinen Datei als Array konnte ich das Problem nicht 
hören, aber die Abspielzeit war weniger als eine Sekunde, jetzt sind wir 
bei mehr als zwei Sekunden. Es kann also sein, daß das Problem immer da 
war, aber vorher konnte ich es nicht hören.

Der Code ist echt trivial:
  enableMMC();
  ffopen(file_name);
  disableMMC();
  tdaTurnOn();
  tdaLoud();

  for(currentPointer = 0; currentPointer < file.length;)
  {
    enableMMC();
    for(l = 0; (l < 32) && (currentPointer < file.length); l++)
    {
      mp3[l] = ffread();
      currentPointer++;
    }
    disableMMC();

    vsSetChipSelect();
    vsSetBSync();
    for(i = 0; i < l;)
      if(bit_is_set(VS_PIN, VS_DREQ_PIN))
      {
        spiWriteByte(mp3[i++]);
      }
    vsClearBSync();
  }
  for(i = 0; i < (file.length % 32); i++)
  {
    vsSetBSync();
    spiWriteByte(0);
    vsClearBSync();
  }
  enableMMC();
  ffclose();
  disableMMC();

  vsWaitForComplete();

Die Funktionen enableMMC() und disableMMC() geben mir die Möglichkeit 
mit der Karte zu sprechen, da der MOSI mit einer AND-Port an der Karte 
verbunden ist. Die gleiche Lösung habe ich in anderen Projekten gesehen, 
und sollte dienen um sicher zu sein, daß die Karte nicht unerwünscht (zB 
bei der Programmierung) geschrieben wird.

Danke für eure Vorschlage!
Luca Bertoncello

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.