Sehr schlechte MP3-Wiedergabequalität

OP #1927899
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:
1
  enableMMC();
2
  ffopen(file_name);
3
  disableMMC();
4
  tdaTurnOn();
5
  tdaLoud();
6

7
  for(currentPointer = 0; currentPointer < file.length;)
8
  {
9
    enableMMC();
10
    for(l = 0; (l < 32) && (currentPointer < file.length); l++)
11
    {
12
      mp3[l] = ffread();
13
      currentPointer++;
14
    }
15
    disableMMC();
16

17
    vsSetChipSelect();
18
    vsSetBSync();
19
    for(i = 0; i < l;)
20
      if(bit_is_set(VS_PIN, VS_DREQ_PIN))
21
      {
22
        spiWriteByte(mp3[i++]);
23
      }
24
    vsClearBSync();
25
  }
26
  for(i = 0; i < (file.length % 32); i++)
27
  {
28
    vsSetBSync();
29
    spiWriteByte(0);
30
    vsClearBSync();
31
  }
32
  enableMMC();
33
  ffclose();
34
  disableMMC();
35

36
  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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.