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:
Gast #3532308
Lesenswert?
• ▲
▼
Hallo Karl Heinz,

das ist richtig, ich habe es mir auch angeschaut (Atmega168) und mit 
Progbeispiel bzw Programmanleitung von Mikrocontroller.net verglichen. 
Daher kam dann die Frage, was nun richtig ist.

Ich wollte eigentlich nur die oben genannte offene Fragen klären.

Danke für deine Antwort.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.