www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik I²S Signal mit ATmega erzeugen


Autor: Marco -. (marcov)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Marco -. (marcov)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Marius S. (lupin) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Marco -. (marcov)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ;-)

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.