PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RP6 M32 Watchdog



teamohnename
03.04.2012, 22:36
Hallo an alle,
wir haben ein paar Probleme mit der I²C Kommunikation unseres RP6’. Zwischendurch (in ganz unregelmäßigen Abständen, mal nach 2 Minuten, dann nach mehreren Stunden wieder, eventuell auch vom Akkustand abhängig) schmiert anscheinend die I²C Kommunikation ab. Das liegt sehr wahrscheinlich an den ganzen Schleifen in der Fleury Lib, die wir benutzen. Damit der RP6 nach so einem Absturz normal autonom weitermachen kann, brauchen wir den Watchdog. Der werkseitige Watchdog der RP6 M32 arbeitet, soweit wir verstanden haben, auch über I²C, damit er sich mit der Base absprechen kann. Nun haben wir diese Standard Funktion erstmal (auf Grund der Fleury Lib) nicht mehr. Wie kann man jetzt dafür sorgen, dass sich die M32 und eventuell auch die Base neu starten, nachdem sich zufälligerweise mal wieder die Kommunikation aufgehangen hat? Kann man den Standard-M32-RP6 Watchdog irgendwie auf die Fleury Lib portieren, wie funktioniert der genau? Der Atmel Standardwatchdog sorgt, soweit wir jetzt ausprobiert haben, nur dafür, dass der µC in den Bootloader springt und nicht das eigentliche Programm startet...
Vielen Dank schon mal im Voraus und
Viele Grüße
teamohnename

EDIT:
Notfalls kann man ja auch ganz einfach einen Software Watchdog programmieren.
Problem ist also momentan primär, wie man einen Reset auslösen kann, der das Programm und nicht den Bootloader startet.
Gibt es eventuell auch im Hardware WDT die Möglichkeit, quasi einen Spungbefehl anzugeben, zu dem der µC bzw. der WDT springt, wenn er nicht mehr aktualisiert wird?
Wenn ich nämlich z.B. in einem Timer Interrupt eine Variable abfrage und runterzähle, die in der Hauptschleife ständig gesetzt und aktualisiert wird, wie kann ich dann aus dem Interrupt zum Start des eigentlichen Programms springen? Ein Sprungbefehl scheint nicht zu funktionieren und wäre eigentlich auch keine ,,saubere" Lösung...
Wenn da gar nichts geht, werden wir wohl den Bootlader, der uns eigentlich sehr gut gefallen hat, runterschmeißen müssen und mit ISP arbeiten...

SlyD
04.04.2012, 15:06
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