Verständnis-fragen zum TWI. Atmega8

OP #3573341
Lesenswert?
• ▲
▼
Hallo!

1)Wie kommen die Status Codes in das TWSR? "Wer" schreibt die da rein?

Sollte der Controller Anhand dessen was in TWBR steht die Status Codes 
aus einer art "Tabelle" auslesen:
Wie unterscheidet der Controller ob grade ein SLA+W oder ein Data byte 
verschickt wird?

2) Was ist denn zu tun wenn ein NOT ACK "zurückkommt"? Was sollte denn 
eine "ERROR()" Funktion machen? Einfach noch mal "von vorne"? Wie macht 
man das "richtig"?


Vielen Dank!
#3573377
Lesenswert?
• ▲
▼
Attila Ciftci schrieb:
> Hallo!
>
> 1)Wie kommen die Status Codes in das TWSR? "Wer" schreibt die da rein?
>
Na die Hardware.

> Sollte der Controller Anhand dessen was in TWBR steht die Status Codes
> aus einer art "Tabelle" auslesen:

Ich versteh die Frage nicht wirklich.
Im Datasheet zum AtMega8 hat Atmel doch einen schönen langen Absatz 
eingefügt, in dem im Detail (inklusive Code) die Vorgehensweise 
aufgeschlüsselt ist. Dort steht doch alles relevante.

> 2) Was ist denn zu tun wenn ein NOT ACK "zurückkommt"?

Das musst du entscheiden, wie du den Fall handhaben willst.

> Was sollte denn
> eine "ERROR()" Funktion machen? Einfach noch mal "von vorne"?

Kommt drauf an.
Wenn du denkst, der NOT_ACK ist nur deswegen aufgetreten, weil eine 
Störung auf den Leitungen vorgelegen hat, dann kannst du nochmal 
starten. Aber eigentlich sollte der Fall selten vorkommen.

Je nachdem, wo der NOT_ACK auftritt, hat der eine andere Bedeutung. Wenn 
du einen Sensor anzusprechen versuchst, der einfach physikalisch gar 
nicht am Bus hängt, dann kannst du wiederholen so oft du willst. Wenn er 
nicht da ist, kann er auch nicht antworten und du wirst immer wieder 
einen NOT_ACK kriegen. In dem Fall wird es wohl das vernünftigste sein, 
den Benutzer darüber zu informieren, dass der angesprochene Teilnehmer 
am I2C Bus nicht erreichbar war. Dann kann der Benutzer mal nachsehen 
was überhaupt los ist. Vielleicht ist ja auch irgendwo einfach nur ein 
Kabel abgerissen.

> Wie macht
> man das "richtig"?

Es gibt kein "richtig". Richtig ist, was du als richtig definierst.
OP #3573399
Lesenswert?
• ▲
▼
Hallo Karl Heinz,

vielen Dank für Deine Erklärung. Der Teil mit dem ERROR() ist sehr 
hilfreich. Jetzt habe ich zumindest eine Idee worum es bei einem NOT ACK 
überhaupt geht!

Ja den TWI Teil habe ich natürlich gelesen dennoch habe ich einen 
"Knoten" beim Verständnis. Ich versuche es mal anders zu formulieren:

Wenn ich ein START verschicke wo kommt dann die zu prüfende 0x08 her? 
(Tabelle 66)
Sagt der Controller: "Da war ein (1<< STA) also tu ich mal 0x08 ins 
TWSR!" Ist das so?

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.