Guten Abend, um einen Audio DAC vom Typ WM8714 zu testen, und um einfach mal auszuprobieren ob es möglich ist, versuche ich einen ATmega88 I²S Daten ausgeben zu lassen. Ich arbeite mit zwei Timern im CTC Modus. T0 (MCLK) läuft läuft 8x so schnell wie T2 (BCLK), der bei jedem Flankenwechsel einen Interrupt auslöst. In dieser ISR wird bei jedem zweiten Aufruf ein neues Bit auf DIN gelegt so dass es bei steigender Flanke von BCLK bereit liegt. Außerdem wird alle 16 Takte LRCIN umgeschaltet und das 8 bit Wort dass ich ausgeben möchte um 1 inkrementiert. Bit 9-16 sind dabei immer 0. Mit dem Selbstbau-LA Scanlogic, meinem Multimeter und meinem Oszi habe ich die Ausgangssignale auf Frequenz und Timing hin überprüft und kann keinen Fehler feststellen. Ich habe verschiedene Frequenzen getestet bis hinauf zu 16 kHz Samplingrate aber es ist hinter einem LC Filter über hochohmig angeschlossene Kopfhörer nichts zu hören. Ein anderer DAC vom Typ DA1131 bleibt ebenfalls stumm, rauscht aber etwas und fabriziert fürchterliche Geräusche wenn ich das Timing absichtlich verstelle ;). Die Screenshots vom LA habe ich mal angehängt. Zum einen sieht man das Verhältnis MCLK zu BCLK, auf dem anderen BCLK, DIN und LRCIN. Ich hoffe jemand erkennt einen Fahler, denn ich bin ratlos. Grüße, Marco
Und der zweite. Nicht wunder dass die Zeitbasis eine andere ist. Das liegt daran dass der LA nicht mehr als 3 MSamples/s schafft und ich daher die Taktfrequenz verringert habe.
Ich versuche hier momentan einen MAX9850 zum laufen zu bringen (allerdings mit einen SAM7). Bisher höre ich auch nur das Rauschen des Verstärkers... Dein Logic-Analyzer ist ja ein ganz nettes Teil, so einen kann man sich mal schnell zusammen basteln. AFAIK ist I2S so definiert, dass auf der steigenden Flanke Daten in den DAC gelesen werden. Wichtig ist auch, dass das MSB des aktiven Kanals erst beim zweiten BCLK Puls übertragen wird (mit dem vorherigen BCLK Puls wird das LSB des vorherigen Kanals übertragen). Die meisten DACs kann man aber so einstellen, dass sie sich anders verhalten. Das konnte ich zumindest meinem Errata entnehmen: http://pdfserv.maxim-ic.com/en/errata/MAX9850_ERRATA.pdf So ganz erkennen was da passiert kann ich nicht. Das zweite bild sieht aus als würden viel weniger Bits übertragen werden Wichtig ist ja auch, dass die Einstellungen des DAC genau zu der ausgegebenen MCLK und BCLK des µC passen.
Das ist kein I2S-Signal. I2S ist mit 32 Bitclocks / Halbframe definiert, Du hast aber nur 16. Desweiteren gilt oben gesagtes, das MSB wird mit der 2. BitClock nach dem Flankenwechsel der WordClock übertragen.
Es hört sich so an als würde es jetzt laufen. Der DAC gibt immerhin schonmal ein Signalmuster aus. 16 bit pro Halbframe ist laut Datenblatt möglich und nennt sich "packed mode" also habe ich das auch verwendet. Danke übrigens für den Hinweis mit dem MSB, das hatte ich überlesen. Grüße
Aha - packed mode... Der bringt aber nur bei einem sendenden Controller wirklich Vorteile. Ein empfangender Controller braucht die verbleibenden nichtgenutzten 8 Bits eines Halbframes zum Wegspeichern der empfangenen Daten. Aber hier in Deinem Fall ist das dann schon okay ;-)
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.