Hallo,
der Software Watchdog im I2C Slave Programm auf der RP6Base sollte eigentlich nicht für die Sicherstellung der Funktionalität des Programms eingesetzt werden. Der ist nur dazu gedacht im Fehlerfall den Roboter zu stoppen um Schäden zu vermeiden.
Der stoppt nur die Motoren und wartet dann in einer Endlosschleife! Kann man natürlich auch ändern was da gemacht wird.
Eine Möglichkeit wäre die Reset Leitung der Base vom Rest abzutrennen und die über eine kleine diskret aufgebaute Logik anzusteuern - dann eben einen I/O Pin verwenden um den Reset auszulösen und das Programm zu starten (SDA high low high toggeln).
(es muss halt vermieden werden das der Controller auf dem Mainboard auch zurückgesetzt wird, es müssen nur alle andere zurückgesetzt werden.)
Das Programm per Software neustarten geht durch Sprung an Adresse 0, ob das aus einem Interrupt herraus funktioniert müsste ich jetzt auch erst prüfen - probiers doch einfach mal aus.
Aber die einfachste alternative ist wohl eine Abbruchbedingung in die blockierenden Schleifen reinzumachen (timeout, zähler in der Schleife hochzählen, wenn timeout dann Fehlerbehandlung durchführen).
Du kannst dann sogar prüfen was genau das problem war - also mal alle I2C Zustände ausgeben.
MfG,
SlyD
Lesezeichen