Hi, Ich habe eine Frage an die I2S-Spezialisten hier: Ich überlege gerate einen Software MP3-Player mit PIC32 bauen. Der soll auf SD-Karten (FATFS) gespeicherte MP3-Files abspielen und sich über USB-mass-storage laden und befüllen lassen. Als DAC hätte ich mir den I2S-DAC UDA1334ATS ausgekuckt. Mein PIC kann ja I2S. Dieser DAC kann aus dem Wordclock seinen eigenen Clock generieren. Problem: MP3s sind gerne mit z.B. 44100kHz Samplerate codiert. Das beißt sich mit USB, denn für Audio bräuchte ich z.B. 11,289MHz, für USB 12MHz. Beides muss jetzt aber akkurrat sein. Zwei Systemtakte sind leider nicht möglich. Fragen: Ab welcher Abweichung bei der Samplerate leidet die Audioqualität? Gibt es möglicherweise eine elegantere Lösung für das Problem? Auch Links auf Appnotes wären schon eine Hilfe :-)
Nimm 48kHz für die Samplerate. Takte den Controller mit 48Mhz. Daraus kannst Du 12Mhz und 48kHz teilen.
Knut B. schrieb: > Nimm 48kHz für die Samplerate. Takte den Controller mit 48Mhz. Daraus > kannst Du 12Mhz und 48kHz teilen. Das wäre eine Möglichkeit. Allerdings hätte ich das gerne vermieden. Ich habe eine riesige Menge MP3s mit 44,1kHz. Das kommt eben so von der CD. Vermutlich würde das "umsamplen" dem armen PIC überfordern. Ich wüsste ja nicht einmal wie ich das genau anstellen soll. Daher müsste ich das umcodieren am PC erledigen. Das wäre unelegant :-( Ich habe inzwischen entdeckt, dass man der SPI des PIC32 den REFCLOCK füttern kann. Und da habe ich viel mehr Möglichkeiten, den Clock zu manipulieren als nur mit dem Baudratengenerator. Mal schauen, wo ich da mit 12MHz hinkomme. Ich werde mir da wohl erst mal ein Excel-File zur Taktberechnung machen müssen. Bei 40MHz wäre das Teilen durch 907. Mal schauen, ob das geht. Das wäre ein Fehler von nur 0,003% :-)
Du kannst doch den Bittakt extern einspeisen, d.h. den PIC als SPI Slave arbeiten lassen. Ob er gleichzeitig SPI Slave und Frame Master sein kann, weiß ich nicht, das wäre zu prüfen. Ansonsten müsstest Du auch den Word Clock selber erzeugen, was wofür im Prinzip ein 1:32 oder 1:64 Teiler ausreichen würde. Sowohl SPI Slave als auch Frame Slave geht auf jeden Fall. Bei 16 Bit Sampletiefe bräuchtest Du einen 1.536MHz und einen 1.4112 MHz Oszillator. Letzterer ist kein Standardwert. Problemlos erhältlich sind Oszillatoren mit 256*fs, also 11.2896 MHz und 12.288 MHz. Viele Codecs brauchen einen Master Clock mit eben dieser Frequenz. Den kannst Du dann ja problemlos herunterteilen. Wenn Du das so machst, ist es exakt. So exakt, wie Quarzoszillatoren eben halt sind. fchk
Ok, ich habe eine Lösung gefunden, mit der ich hinkommen werde. Man kann den Refclock für die SPI nehmen. Microchip stellt da ein sehr praktisches Excelsheet zur Verfüging: http://microchip.wikidot.com/32bit:osc-overview Und den kann man sehr genau einstellen. Ein Beispiel hab ich mal angehängt. Das wären 1,4112MHZ (=44100kHz * 32MHz) aus 12MHz mit hoher Genauigkeit. Das ist auf alle Fälle genau genug, weil immer besser als 0,1%. Schön ist, dass man das zur Laufzeit beliebig ändern kann - damit sind alle Audiobaudraten erschlagen. Falls ich nichts übersehen habe. Zeit, das mal aufzubauen und zu testen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.