I²C Verständnisfrage

Gast #3531220
Lesenswert?

Hallo

Ich hätte da mal eine Verständnisfrage zu I²C. Nach dem die 
Startbedingung gesendet wurde, sende ich den TW_WRITE, damit ich den 
Slave überhaupt adressieren bzw beschreiben kann und überprüfe den 
TW_MT_SLA_ACK. Danach schicke ich die Slaveadresse über TWDR und 
überprüfe anhand DATA_ACK wieder ob die Adresse/ der Slave vorhanden 
ist.
Anschließend schicke ich über (laut DB) --> TWDR = DATA;
TWCR = (1<<TWINT)|(1<<TWEN); mein Datenpacket und danach die 
Stopbedingung.

Nun die Frage ist, laut Beschreibung von Microkontroller.net muss TWCR 
bei Datenpacketübermittlung --> TWDR=DATA; TWCR = 
(1<<TWINT)|(1<<TWSTA)|(1<<TWEN); ist das richtig?

2. Woher weißt der Slave, dass TWDR am Anfang die Startadresse schickt 
und anschließend die Datenpackete?

Ich habe einiges durchgelesen und hoffentlich auch richtig verstanden
(dank Mikrocontroller.net).

Danke.
#3531245
Lesenswert?

> Nach dem die Startbedingung gesendet wurde, sende ich den TW_WRITE,
> damit ich den Slave überhaupt adressieren bzw beschreiben kann und
> überprüfe den TW_MT_SLA_ACK. Danach schicke ich die Slaveadresse
> über TWDR und überprüfe anhand DATA_ACK wieder ob die Adresse/ der
> Slave vorhanden ist.

Vielleicht meinst du auch das richtige, aber ich lese da etwas falsches 
raus.

Die Übertragung der Adresse und dem Modus-Bit (Read oder Write) ist 1 
Übertragung! Adresse und Bit werden gemeinsam in 1 Byte übertragen.

Bei dir klingt das so, als ob das 2 Übertragungen wären.
#3531253
Lesenswert?

Dani schrieb:

> Nun die Frage ist, laut Beschreibung von Microkontroller.net muss TWCR
> bei Datenpacketübermittlung --> TWDR=DATA; TWCR =
> (1<<TWINT)|(1<<TWSTA)|(1<<TWEN); ist das richtig?

Was sagt denn das Datenblatt des µC? Im Zweifel ist das immer die letzte 
unangreifbare Autorität in Entscheidungsfragen.

> 2. Woher weißt der Slave, dass TWDR am Anfang die Startadresse schickt
> und anschließend die Datenpackete?

Weil das im I2C Datenverkehr so festgelegt wurde.
Nach der Startbedingung ist das erste darauf folgende Byte die Slave 
Adresse (und der Wunsch des Masters zu schreiben oder zu lesen)
#3531371
Lesenswert?

Ich weiss ja nicht, welchen konkreten µC du benutzt.
Aber im Datenblatt vom Mega16 ist zum Beispiel im Abschnitt über den TWI 
ein komplettes kommentiertes Codebeispiel enthalten.
(siehe Bild)
Was daran ist jetzt unklar?

Das man dieses Beispiel noch sinnvoll in Einzelfunktionen aufgliedern 
muss, ist schon klar. Aber zumindest zeigt es den kompletten Ablauf, vom 
Beginn mit dem Erzeugen der Start-Condition bis zum Ende mit dem 
Erzeugen der Stop-Condition. Alles da, was man braucht.
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren