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
ja, genau das will ich machen ;-) ist das möglich? also der atmega muss die daten unverändert weiter geben bzw speichern!
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.
Hallo, nur eine Frage am Rande: Wo/wie hast Du diesen Codec denn bekommen / wieviel bezahlt?
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?
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?
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.