Forum: Mikrocontroller und Digitale Elektronik Audio Codec mit I²s


von One P. (onepiece)


Lesenswert?

hallo zusammen,
ich habe das audio codec TLV320aic3204 von TI an einem Atmega644 
angeschlossen. Die Koniguration des Codecs ist durch twi abgeschlossen.
Der UC läuft mit internen Takt von 8 MHz und der Codec mit externen 
4MHz.
also zusammengefasst Fs=11,2 KHz, Mclk=4 MHz, Bclk=DAC_CLK/4 (Wclk und 
Bclk werden von Codec erzeugt)Wclk = Fs.
meine fragen sind: kann ich die daten mittels i2s vom Codec (master) zu 
UC (slave) übertragen?wenn ja! ist es sinnvoller mit Interrupts zu 
arbeiten?
hat jemand schon erfahrungen mit uc+codec gemacht (I2S)? es wäre auch 
nett wenn mir jemaden paar code beispiele sendet...
danke im voraus

von Seennoob (Gast)


Lesenswert?

du willst via SW einen I2S Slave machen in einem atmega ?

von One P. (onepiece)


Lesenswert?

ja, genau das will ich machen ;-) ist das möglich?
also der atmega muss die daten unverändert weiter geben bzw speichern!

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


Lesenswert?

Der ATMega ist zu langsam für vernünftige Anwendung. Einzig denkbar ist 
das Generieren sämtlicher Steuersignale mittels Timer und UART im 
Master-SPI-Mode, so daß sich der ATMega die Daten vom Codec holt. Der 
Codec ist in dem Fall I2S-Slave. Der Mega hat aber auch dann nicht allzu 
viel Zeit, die Daten zu verarbeiten oder wegzuspeichern. Ein Controller 
mit externem RAM-Interface wäre auf jeden Fall zu empfehlen. Ein XMega 
wäre dem Projekt gewachsen, mit den gleichen Vorgaben.

von Rainer U. (r-u)


Lesenswert?

Hallo, nur eine Frage am Rande: Wo/wie hast Du diesen Codec denn 
bekommen / wieviel bezahlt?

von Rainer U. (r-u)


Lesenswert?

Ich habe mir das Datenblatt mal angesehen - da ist eine maximale 
I2C-Clock von 400kHz angegeben, aber für z.B. 48kHz 16bit stereo (was 
der Chip ja können soll) braucht man mindestens 1,536 MHz - wie paßt 
denn das zusammen?

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


Lesenswert?

I2S != I2C

von Rainer U. (r-u)


Lesenswert?

Ah ja stimmt. Das war mein Fehler. Also dann die I2S-Leitungen an die 
SPI-Pins anschließen.. dürfte aber schwer weden beim Empfang, weil der 
AVR keinen Empfangspuffer hat.. Bei dem Tempo selbst in Assembler kaum 
machbar.

Wie schnell sind denn die XMega's?

von One P. (onepiece)


Lesenswert?

hallo zusammen,
der atmega muss auf jeden fall als slave herhalten, weil der Bclk und 
Mclk vom Codem generiert werden mussen. der UC muss nur auf dem Mclk(KHz 
bereich) reagieren und der läuft mit 8MHz ich glaube schon dass es 
möglich ist!
dass ich in C-Programmierung nicht so fit bin, ist das Problem.ich suche 
momentan Code-Beispiele für I2S kombiniert mit Atmega...oder vielleicht 
eine idee wie ich das problem angehen kann.

@ Rainer Unsinn:
wie oben schon angedeutet ist: I2C != I2S.
ich habe I2C (SDA und SCL) erfolgreich abgeschlossen, damit lassen sich 
nur Register beschriften für die Codec-Konfiguration.
auf der website www.TI.com kannst du dir nach der anmeldung paar Samples 
bestellen, das geht sehr schnell und Kostenlos.

von One P. (onepiece)


Angehängte Dateien:

Lesenswert?

zusatzinfo.:
Der Takt und Word Select bei I2S wird vom Master erzeugt.

WS - Wordselect - dient dazu um zwischen dem rechten und linken Kanal 
unterscheiden zu können. WS ändert seinen zustand ein Clockperiode bevor 
das nächste Word anfängt, damit der Slave Zeit hat das letzte Wort zu 
speeichern und sich für das nächste vorzubereiten.

SDA - Serial Data - Die Daten werden MSB first übertragen, damit auch 
Geräte mit unterschiedlicher Word- Länge keine Probleme haben. Die 
fehlenden Bits werden als 0 interpretiert und die Bits die zuviel sind 
einfach weggelassen. Da es sich hierbei um Audiodaten handelt ist dies 
möglich, da dadurch nur die Qualität leidet, aber die Grundinformation 
erhalten bleibt. Die Daten sind mit einer steigenden Flanke gültig.

von Rainer U. (r-u)


Lesenswert?

Es wird wohl daran liegen, daß das Thema sehr (lauf)zeitkritisch ist. 
Bei meiner Betrachtung oben mußt Du ein Byte in weniger als 100 Takten 
komplett verarbeiten, also nicht nur einlesen, auch speichern, puffern, 
evtl. wieder ausgeben.. (wenn ich mich nicht grob verrechnet habe) - das 
ist schon in Assembler (="schnellste wo gibt") anspruchsvoll / das Thema 
mit dem fehlenden Eingangspuffer hab ich ja schon angesprochen.

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.