I2C Hängt - Problemlösung

Gast #1991014
Lesenswert?
• ▲
▼
Hallo zusammen,

ich habe hier ein kleineres Problem mit der TWI Schnittstelle am AVR. 
Diese gibt beim empfangen nicht immer das TWINT Bit zurück. Es wird 
nicht zurückgegeben, weil eines der 4 slave nicht richtig auf den Bus 
reagiert. Vermutlich eine Störung oder so.

Das passiert relativ selten aber dann hängt der ganze µC. Ich habe in 
den ganzen Programmen, die im Netz zu finden sind aber noch nie eine 
Fehlerbehandlung gesehen. Wird dabei davon ausgegangen, das I2C immer 
100% fehlerfrei ist? Kann es nicht doch mal sein das irgendwo ein Bit 
verschluckt wird - wie bei mir.


Mein Lösungsvorschlag:
Vor dem senden des StartBit einen rückwärts Zähler setzten, welcher in 
den Lese/Schreib Routinen immer wieder neu gesetzt wird. Erreicht der 
Zähler vor dem StopBit den Wert 0, so liegt ein Timing Fehler vor und 
der Fehler wird ausgegeben.

In den Routinen selbst dürfen dann I2C Schleifen nur wiederholt werden, 
wenn der Zähler nicht 0 ist.


Den Watchdog Timer möchte ich erst einsetzten, wenn der rest fehlerfrei 
läuft.

Gruß,

Tubie
Gast #1991379
Lesenswert?
• ▲
▼
Hallo,

die Slaves sind 24c512, DS1307, DS2482-800 bisher ist der fehler ca. 5x 
aufgetaucht - innerhalb eines Jahres - beim programmieren mit JTAG 
interface. Ist also nicht sehr oft.

Ich habe allerdings einen 4. Slave (Mega8) den ich gerade programmiere 
und konte bedingt durch einen Programmfehler im Mega8 diesen Fehler am 
Master (Mega32) herbeirufen. Die Fehler, die selten auftreten, könnte 
der interne Watchdog abfangen. Ich möchte nur sicherstellen, falls der 
Mega8 oder ein anderer Baustein mist baut, ich das System in einem 
kontrollierten Zustand habe und ggf. eine Fehlermeldung habe.

Gruß,
Tubie

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.