mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SD Karte mit PCM und am liebsten MAX9850 (hilfe benötigt) :)


Autor: Claudio H. (hedie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo ihr lieben Mitprogrammierer :)

Die einen habens sicher bemerkt... Ich war fleissig mit den SD Karten am 
werk :)

So das lesen und schreiben von dateien sowie sektoren klappt 
problemlos...

Das Endziel soll ein MP3 Player sein... ich weiss ich weiss gibt es en 
mass aber selber bauen ist halt schon ein meilenstein :)

Ich habe früher mal mit einem 16 Bit Mikrocontroller mit 20Mhz von 
Renesas 36049
ein SRAM über die Serielle Schnitstelle des PC's mit Daten befüllt (8Bit 
PCM WAV Files). Die adressierung des SRAMS ging über Schieberegister... 
Der Datenbus war parallel. Danach habe ich einfach mit fullspeed eine 
adresse nach der anderen ausgelesen und hab die daten an einen Port 
geleitet.

Dort hatte ich ein DAC aus Widerständen wie es hier im AVR Tut 
beschrieben ist angehängt. (Mir ist und war klar das dies so ziemlich 
die schlechteste qualität war dies gibt). Daran war ein spannungsfolger 
(OP) mit daran gehängtem Lautsprecher...

Und voila... es hat geklappt :) zwar sehr grausige qualität aber man 
hats erkannt.

So nun zum eigentlichen thema...

Ich kan nun die SD Karte auslesen. Ich habe mit SUPER (C) ein MP3 in 
8bit PCM 22050KHz Sampling rate umgewandelt.

Dieses möchte ich nun auslesen und wie früher an einen port ausgeben. 
Klappt eigentlich ganz  gut... nuuuur.... seeehr langsam.

Wenn ich das file ins nichts öffne
unsigned char file_name2[20]="MLTT    WAV";
                // Datei existiert, also kann man lesen.
     if(MMC_FILE_EXISTS == ffopen(file_name2)){
        // setzen einer Variable und dann runterzaehlen geht am schnellsten !
        unsigned long int seek=file.length;
        // lesen eines chars und Ausgabe des chars.
        // solange bis komplette Datei gelesen wurde.
        do{
                  ffread();
        }while(--seek);

        ffclose();
     }

Dan habe ich gut 20 Sekunden zum auslesen der 2.5MB bei 18.5MHz SPI 
Clock

Wenn ich nun jedoch die Daten am Port ausgebe:
*Buffer5 = ffread();
GPIO_Write(GPIOB,(Buffer5[usCount]<<8));

So war das auslesen auch nach 5Minuten noch nicht zuende...

Mein STM32F103 hat 72MHz Systemclock... da sollte doch mehr drinn liegen 
als bei nem 20MHz 16Bitter oder?

Ist es grundsätzlich schwierig den Helix MP3 Decoder zu verwenden?
Diese Aufgabe ist doch ideal für den Internen DMA (Direct Memory Access) 
oder?
Ich habe hier noch ca 50 MAX9850 Stereo DAC's 
http://www.maxim-ic.com/quick_view2.cfm/qv_pk/4525

Denkt ihr das es sehr Rechenintensiv sein würde I2S in Software zu 
implementieren?

Ich würde mich freuen wenn ihr mir eure meinungen und Tipps dazu 
schreiben würdet...

Grüsse
Claudio

Autor: Claudio H. (hedie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
push

:)

Autor: bubi.. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum willst du I2S in Software implementieren? Dein STM hat den doch in 
Hardware :) da bastle lieber SPI in Software als I2S :)

mehr kann ich leider nicht beitragen :(

LG Michael

Autor: Claudio H. (hedie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hall Michael

Danke für die antwort...

es haben leider nur die high density Controller die I2S schnitstelle
(also ab 256kb Flash aufwärts)

Somit hat meiner mit 128kb leider kein I2S :(

Autor: Marius S. (lupin) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Claudio, wir hatten ja schonmal per mail geschrieben.

Hab jetzt meinen MAX9850 am laufen und auch schon eine MP3 damit 
abgespielt (Helix decoder). Den Helix decoder ein zu binden ist einfach, 
das Teil läuft halt "out of the box".

I2S in software solltest du lieber vergessen.

Ich glaube GPIO Geschichten sind bei 32 Bit ARM controllern nie wirklich 
schnell (dafür sind eher die 8 bitter gedacht).

Welchen STM32F103 hast du im Einsatz?
Wenn du einigermaßen genaue Samplerates haben willst wirst du wohl nicht 
drum rum kommen den MAX9850 im non-Integer modus zu verwenden, da der 
STM bei den genaueren Samplerates keine MCK generieren kann (da gibt es 
im user manual tabellen zu)...

Auf jeden fall solltest du alle Datentransfers per DMA erledigen.

Hast du den MAX9850 denn schon angeschlossen? Ich hab hier getestete 
Adapterplatinen die ich abgeben kann.

Autor: bubi.. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
-.-.... argh.. da schreibt man mal was und es ist Käse hast natürlich 
recht :D
Bin deshalb darauf gekommen weil der *RE schon samt TLV320 schon neben 
mir liegt und auf eine Platine wartet g.
Aber trotzdem du wirst es in Software nicht hinbekommen und mit dem RAM 
wirst du auch nicht auskommen für den Decoder schau mal bei NXP vorbei. 
Die geben EFSL + libmad ±33kb RAM an... ( 
http://www.nxp.com/documents/application_note/AN10583.pdf ) Und die 
werkeln auch mit Hardware I2S... I2S braucht auch ziemlich genaue 
Taktfrequenzen usw...

Autor: bubi.. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
na toll.. nicht angemeldet.. Blödsinn geschrieben.. die machen das mit 
dem DAC... ich hab aber irgendwo ein PDF wo der TLV320 benutzt wir... 
egal das PDF ist trotzdem interresant

Autor: Marius S. (lupin) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jo ich denke auch mit dem RAM wird's knapp. Ich würde auch auf den RE 
setzen.

Gibt es irgendwo Vergleiche zwischen libmad und helix? In sachen RAM und 
CPU Auslastung?

Autor: Claudio H. (hedie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für eure antworten

@ Marius... Ja ich erinnere mich an den mail verkehr... hab ja mal ein 
board bestellt hast aber nie zahlungsdaten gesendet glaube ich :)

Also ich verwendete bis anhin den STM32F103RB6

Ich hab mir überlegt, das ich mir den STM32F103RET6 kaufe für 4 Euro und 
dazu den Platine Designe...

Marius... Kannst du mir vielleicht den schaltplan deiner Platine senden?
Muss man etwas beim beschalten beachten? Spezielle Bauteile?

Am besten per mail ( claudio.hediger (attt) gmail.com )

Bestünde die möglichkeit, dass du mir beim weiteren vorgehen mit dem 
MAX9850 helfen würdest? Ich würde mich auch in irgend einer form 
erkenntlich zeigen :)

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.