Wie das mit dem Watchdog im Bascom funktioniert musst du mal in der Hilfe unter "Watchdog" suchen.
Und einen Interrupt löst der Watchdog nicht aus. Er setzt nur den Programmcounter auf 0x00 wenn er nicht zurück gesetzt wird.
Du musst halt gucken wie lange dein Programm im Idealfall zum durchlaufen braucht und dann kannst du den Wert für den Watchdog bestimmen. Sobald das Programm dann länger braucht läuft der Watchdog über und setzt den Counter auf 0x00 zurück (also das ganze Programm resetet, weil an der Adresse meistens ein ljmp zum eigentlichen Programmanfang steht, da ab 0x02 die Interruptvektoren beginnen).
Seite 44:
http://www.atmel.com/Images/doc2503.pdf
Was du ja jetzt im Endeffekt machen willst, ist ein Watchdog in Software der keinen Reset auslöst sondern in eine ISR springt wenn er überläuft.
Und das kannst du ganz einfach so machen wie du meintest. Du stellst den Timer am Anfang einfach auf z.B. 2 Sekunden ein und am Programmende (also vor dem Loop) setzt du den Timer wieder neu auf 1 Sekunde. Wenn das Programm nun länger braucht als 1 Sekunde z.B. weil irgendwas passiert weswegen die Abarbeitung länger dauert, läuft der Timer über und der Controller springt in die ISR.
Von dort aus kannst du dann weitermachen.
Probier das mal so aus ob du das so haben möchtest![]()
Lesezeichen