Ob es am Controller oder der Peripherie liegt lässt sich relativ einfach feststellen.
Aktiviere den Watchdog Timer des Controllers und mach im Main Loop den WDR ( Watchdog Reset ) befehl rein.
Bleibt die Peripherie hängen, wird der Controller nicht resettet und der Fehler wird wie beschrieben auftreten.
Liegt der Fehler im Controller wird der Watchdog zuschlagen und den Controller resetten.
Ein möglicher Fehler wäre z.B. das der Controller in einer Subroutine auf irgendwas wartet, das dann nicht kommt ( Quittung vom I²C z.B. ).
Oder ein IC blockiert den I²C Bus.
Das könnte man so lösen, das man da, wo eine Quittung erwartet wird einen Timer aktiviert.
Wenn das Ganze zu lange dauert die Subroutine abgebrochen wird und an die aufrufende Routine eine negative Quittung zurück gegeben wird.
Dort kann man dann eine Fehlerbehandlung durchführen.
Lesezeichen