Gast
#152321
Hallo, ich habe eine Interrupt basierte TWI Slave Lösung gebastelt, die auch halbwegs gut funktioniert. Nun passiert es aber von Zeit zu Zeit (Meist wenn ich den Master programmiere ohne Rücksicht auf den Slave zu nehmen) dass er mitten in der TWI Übertragung hängen bleibt.. Die Ursache ist klar, es wird ein Byte vom Master gelesen, aber das Nack kommt nicht an, weil ich genau in diesem Moment den Master grad neu programmiere, oder ein paar Kabel umstecke.. Meine Frage ist nun folgende: Wie und an welchen Stellen prüfe ich am Besten welche Bits, um genau das zu verhindern.. Im Augenblick habe ich in der Interrupt Routine des TWI einen Watchdog Reset mit 2 Sekunden, was natürlich zu Folge hat, das wenn kein TWI Signal vom Master kommt (wenn er aus ist..) das Programm alle 2 Sekunden resetet. (Nicht schön).. Wenn ich nun aber in der Hauptschleife einen Watchdog Reset einbaue, dann wird er wirkungslos, denn das Problem des TWI ist ja gerade, wenn er hängt wird eben gar kein Interrupt mehr ausgelöst, die Hauptschleife läuft aber normal weiter.. Meine Idee wäre jetzt folgende, in der Hauptschleife wenn die SCL Leitung LOW liegt keinen Watchdog Reset zu machen. Wenn dies nun länger als 2 Sekunden der Fall ist, dann kann ich davon ausgehen irgendwar ist schief gelaufen.. Sonst eine Idee, wie löst ihr denn diese blöde TWI hängt Problematik.. (Ich weiß, es gibt schon ein paar Threads dazu, aber wo man wie einen Counter noch einbauen soll, verstehe ich nicht so ganz) Christian