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...
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...