Forum: Mikrocontroller und Digitale Elektronik Digitale Audiowiedergabe mit AVR


von Andreas S. (igel457)


Lesenswert?

Hallo,

ich möchte schon seit langer Zeit ein Gerät zur digtalen Audiowiedergabe 
bauen. Ich möchte dabei keine MP3s o.ä. decodieren, sondern einfache 
RAW-Audiodateien (Stereo, 16Bit, 44,1kHz) von einer Speicherkarte 
(MMC/SD) einlesen und an einen D/A Wandler schicken. Als Microcontroller 
würde ich gerne einen ATMega 162/32 verwenden, da ich mich mit diesen 
Controllern auskenne. Als D/A Wandler schwebt mir ein PCM1725 
(http://focus.ti.com/docs/prod/folders/print/pcm1725.html) vor.

Fragen habe ich folgende:
- Wie sieht es mit der Datenübertragungsrate von der SD-Karte aus? Bei 
2x2Bx44100 wären das ja 172,26 KB/s. Langt da der 1Bit Modus oder muss 
ich die Speicherkarte im 4Bit Modus betreiben?
- Sollte ich die Daten in einem RAM (z.B. 512KByte) zwischenpuffern?
- 16Mhz sollten eigentlich reichen? Da habe ich für jedes Sample ca. 362 
CPU Takte Zeit. Das sollte doch eigentlich langen um das Ganze aus dem 
RAM auszulesen und seriell zu verschicken
- Und das Wichtigste: Der D/A Wandler muss mit einer Frequenz von ca. 
11,2Mhz getaktet werden. Leider kann ich diese Frequenz bei 16Mhz nicht 
so einfach über PWM erzeugen. Gibt es da noch einen anderen Weg?

Für Tipps bin ich dankbar, vielleicht hat auch noch jemand ein paar 
nützliche Links für mich oder hat schon mit dem PCM1725 gearbeitet und 
kann mir ein paar Erfahrungsberichte geben.

Danke im Vorraus,
Andreas Stöckel

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Das Problem bei der Ansteuerung von Audio-DACs ist, dass man mit dem AVR 
kein vernünftiges I2S-Signal hinbekommt. ΔΣ-DACs wie der PCM1725 stellen 
hohe Anforderungen an Synchronität von Bit-, Wort- und DAC-Takt, die 
sich mit einem AVR kaum erfüllen lassen. Mehr Glück könntest du mit dem 
TDA1543 haben, aber der ist auch nicht wirklich HiFi-tauglich.

Wenn es dir nur darum geht Sprachmeldungen, Warteschleifenmusik o.ä. 
auszugeben, häng ein R2R-Netzwerk an einen Port und beschränke dich auf 
8 Bit. Wenn du wirklich qualitativ hochwertige Audiosignale erzeugen 
möchtest, dann ist der AVR nicht der richtige Controller; nimm lieber 
einen AT91SAM7, da lassen sich auch hochwertige DACs ohne Gebastel 
anschließen.

von Fly (Gast)


Lesenswert?

Jo, SYSTEM CLOCK: 256fS/384fS bringst du mit einem AVR nicht hin.
Ich habe das ganze schon mal gemacht. Aufnahme und Wiedergabe ab Compact 
Flash Karte (sind einiges schneller als SD). Als Codec habe ich einen 
AD1845 verwendet. Der hat ein paralles Inerface, das geht mit einem 
Mega32. Ausserdem brauchst du noch mindestens 8kB Puffer (externese 
RAM) für die Audiodaten (Meine Erfahrung mit CF, 44.1 kHz, Mono, 16 
Bit).

von Fly (Gast)


Lesenswert?

Ach jo, den Puffer brauchst du nur bei der Aufnahme, ich hab es damals 
hingebracht, dass die Wiedergabe ohne externen Puffer (nur intern 1kB 
des Mega32 als FIFO) funktioniert. Bei der Aufnahme brauchst du den 
Puffer unbedingt! Die Karten sind beim schreiben langsamer und vorallem 
kommt es manchmal vor, dass die Karte ein defekter Sektor beim schreiben 
erkennt und automatisch ein Reservesektor sucht. Dadurch werden die 
Latenzzeiten ziemlich lange, ohne Puffer keine Chance...

von Andreas S. (igel457)


Lesenswert?

Danke für die Antworten,
als DAC wollte ich eigentlich zunächst den TDA1543 nehmen, leider gibt 
es den bei Reichelt und auch bei Farnell nicht mehr. Und ich möchte 
schon recht gute Audioqualität.
Diese AT91SAM Reihe yC hört sich von den Daten her nicht schlecht an, 
ich bin aber leider nicht der große SMD-Löter, und das Board das es hier 
gibt, ist mir für meine "Experimente" ein bisschen zu teuer.
Bei Reichelt gibt es in Richtung DA-Wandler ja noch diesen IC "VS 1001K" 
der  MP3s dekodieren kann und anscheinend auch PCM-WAVE Files 
wiedergeben kann. Und dieser bezieht seinen Takt ja aus einem extra 
Quarz. In SCLK brauche ich einen Takt von 512 oder 1024 khz. Das sollte 
ja kein Problem sein.
Allerdings gibt es bei diesem IC anscheinend recht viel zu beachten und 
auch die Beschaltung ist im Vergleich recht kompliziert. Hat schonmal 
jemand das "Teil" verwendet?

@Fly
Sind die SD-Karten so langsam? Ich meine wenn ich diesen MP3 Decoder IC 
nehmen sollte, habe ich ja vermutlich kein Problem mehr haben... 
Aufnhemen möchte ich nicht ;-)

Nochmal Danke,
Andreas Stöckel

von Beurteiler (Gast)


Lesenswert?

Meiner Erfahrung nach können es SD Karten nicht mit CF aufnehmen. Bei 
den SD Karten gibt es enorme Unterschiede, schon möglich das es eine 
geeignete gibt. Mit mp3 wird es ganz sicher klappen, da die Kompression 
ca. 1:10 ist. Schau mal in die Codesammlung, es hat einige mp3 Player 
Projekte mit SD Karten und TDA1543.

von Beurteiler (Gast)


Lesenswert?

Ich meinte mit VS 1001K :)

von Mathias (Gast)


Lesenswert?

Hallo zusammen,

ich hätte noch eine kleine Zwischenfrage zum PCM1725:

Kann man den hohen Systemtakt von 256fs oder 384fs nicht einfach mit 
einem externen Oszillator erzeugen? Laut Datenblatt kann der PCM1725 
sich bei zu großer Phasendifferenz auch automatisch synchronisieren.

Auszug aus dem Datenblatt:

"The system clock should be synchronized with LRCIN (pin 1), but PCM1725 
can compensate for phase differences. If the phase difference between 
LRCIN and system clock is greater than ±6 bit clocks (BCKIN), the 
synchronization is performed automatically."

In dem Fall wäre der Betrieb am AVR, oder wie es vorhabe, am dsPIC, ja 
eigentlich kein Problem, oder?

Viele Grüße
Mathias

von Gast (Gast)


Lesenswert?

Der dsPic33 kann von Haus aus I2S.

von Mathias (Gast)


Lesenswert?

Das heißt aber nicht, dass er den Systemtakt von 256fs oder 384fs 
automatisch erzeugen kann, oder?

Gruß
Mathias

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Man kann auch mit esternen Teiler-ICs (74hc4040) das Verhältnis von 
Master-Takt und Bittakt herstellen. In weiteren Teilerstufen bekommt man 
dann auch noch die Wordclock hin. Hat man ein Parallel-auf 
Seriell-Register ausreichender Breite und genug PortPins am AVR, um 
dieses parallel zu laden, kann man auch mit einem AVR und diesen 
neumodischen Konvertern ;-) zu brauchbaren Ergebnissen kommen. Dann 
braucht der AVR nur noch Fs x 2 Ausgaben zu machen und kann dazwischen 
auch noch rechnen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.