Hello Ich habe einen ATMega64 Kontroller der eine Luftpumpe steuert, mit Bascom AVR (Version 1.11.8.3) programmiert und möchte jetzt einen Knopf, der einen Reset vom internen Program auslöst, auf dem System bauen. Wie kann ich das am besten programmieren? Mit dem Watchdog timer läuft es nicht immer... Danke! Gjom
Guillaume Bugnard wrote: > kann ich das am besten programmieren? Mit dem Watchdog timer läuft es > nicht immer... Dann solltest du diesem Phänomen nachgehen. Der Sinn eines Watchdog Timers ist es ja gerade, den µC zu reseten, egal in welchem Zustand sich der gerade befindet. Und zwar immer.
Wobei ein Kopf für Reset ja nicht unbedingt dem umständlichen Weg über Abfrage und Watchdog gehen müsste. Was spricht gegen den Klassiker mit dem Taster direkt an der Reset Leitung?
Wenn man den Taster abfragt und bei aktivem Zustand den Watchdog für erzwungenen Reset verwendet, dann geht es genau dann nicht, wenn die Abfrage nach dem Taster unterbleibt und folglich garnichts passiert. Und das passiert u.U. bei einem Programmfehler. Wenn schon so, dann muss der Taster als umgedrehte Totmanntaste realisiert werden. D.h. der Watchdog wird vorneweg eingeschaltet und dort wo der Taster abgefragt wird, wird der Watchdog genau dann zurückgesetzt wenn der Taster inaktiv ist. Ist er aktiv wird der Wachhund nicht gestreichelt, und drückt man lange genug wird der sauer und beisst zu.
Andreas Kaiser wrote: > Was spricht gegen den Klassiker mit > dem Taster direkt an der Reset Leitung? Am Anfang wollte ich, dass, wenn der Knopf gedrückt wird, der Kontroller zuerst einen Wert auf dem LCD Anzeige schreibt, dann 1 Sekunde wartet und erst dann den Reset macht. Aber wird dieses Wert alle 50ms zu einem PC mit LabView geschickt und dort gespeichert. Das heisst, jetzt kann ich den Reset Pin benütze Die Methode mit dem Assembler hatte ich nicht gedacht! Werde ich noch ausprobieren! Und die Erklärung mit dem Abtasten vom Knopf und Interaktion mit dem Watchdog macht Sinn, wieso es nicht immer funktioniert hat! Danke!
Noch eine Frage, altert einen Reset eigentlich den Hardware? Also darf ich diese Funktion (durch den Pin) so oft wie ich es will benützen oder gibt es einen Risiko, dass meine Platine kaputt wird? Sorry für diese Anfängerfrage, aber ich bin Maschineningenieur, und es ist meine erste Erfahrung mit Elektronik ;-)
Komisch dass eine endlose Warteschleife nicht den Watchdog zuverlaessig zubeissen laesst. Alle meine Programme mit RS232 interface haben eine Kommand mit dem man den RESET durch eine endlose Warteschleife erzwingt und habe noch nie damit ein Problem gehabt. Mache ich genauso bei PIC, AVR, und ARM.
Bei jmp auf 0x00 gilt es halt zu bedenken, dass nix initialisiert wird (Register). Den Vorteil haste aber beim WD.
Gerhard. wrote: > Kommand mit dem man den RESET durch eine endlose Warteschleife erzwingt > und habe noch nie damit ein Problem gehabt. Du hast wahrscheinlich auch noch nie einen Programmfehler gehabt, oder eine klemmende Peripherie auf die ewig gewartet wird, oder ...
Der Sinn des WD ist es ja gerade bei solchen Sachen auszulösen. Sprich, Programm macht Grütze...
Statt bei Tastendruck den Watchdog einzuschalten und dann ne Endlosschleife laufen zu lassen, würd ich eher den Watchdog durchlaufen lassen, und den Watchdog-Reset nur ausführen, wenn der Taster nicht gedrückt ist. So könnte der Taster auch noch für normale Funktionen verwendet werden, und der Chip resettet zuverlässig, sobald der Taster länger als die WD-Timeout-Zeit gedrückt gehalten wird. /Ernst
verbind doch n I/O Pin mit dem Reset-pin.. dann kannst du ganz einfach per software resetten indem du diesen (als ausgang geschalteten) I/O Pin auf LOW schaltest. Sobald der Reset eingetreten ist wird der Pin als Eingang wieder in den Hochohmigen Zustand geschaltet. Dein Reset benötigt dann halt noch dringend einen stärkeren Pullup, hier macht sich wohl ein 10kohm widerstand nach vcc ganz gut.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.