wollte grundsätzliche Fragen, ob etwas bei der Verwendung eines Watchdogs schief gehene kann am Arduino, dh dass auch beim erneuten hochladen eines Sketches ohne Watchdogtimerfunktion, immer noch der alte Watchdog irgendwie im Controller gesetzt ist?
Die Funktion des Watchdogs kann ich ja auch ausporbieren, indem ich zB das Hauptprogramm mittels Tastendruck und delay so lange anhalte, dass die zulässige Watchdogtimerdauer überschritten worden ist.
ids2001:
wollte grundsätzliche Fragen, ob etwas bei der Verwendung eines Watchdogs schief gehene kann am Arduino, dh dass auch beim erneuten hochladen eines Sketches ohne Watchdogtimerfunktion, immer noch der alte Watchdog irgendwie im Controller gesetzt ist?
Meist passiert es, daß wenn bei der Watchdogprogrammierung was schief läuft der Arduino blockiert ist. Der Watchdog greift ein noch bevor der Sketch startet.
Dann hilft nur noch mittels ISP oder gar HV-Programmierung den Sketch zu löschen bzw den ATmega zurückzusetzen.
uwefed:
Dann hilft nur noch mittels ISP oder gar HV-Programmierung den Sketch zu löschen bzw den ATmega zurückzusetzen.
Grüße Uwe
hmm aber wenn ich einfach ein neues Sketch ohne den WTG Funkionen raufspiele, dann müsste der Arduino ja wieder funktioneren, oder??
Das raufspielen des Sketches mache ich mit der IDE Arduino 1.0
Wenn durch eine Falschprogrammierung der Watchdog resettiert noch bevor der Bootloader arbeitet bekommst Du über den Bootloader keinen Upload mehr zustande.
Viele Grüße Uwe
angenommen mir passiert dies.
Kann ich dann den Bootloader in der IDE unter Tools/BurnBootloader wieder draufspielen oder wie bringe ich dann meinen Arduino wieder zum leben?
Was ist der einfachste Weg....
Füge beim Arduino Bootloader den Parameter DWATCHDOG_MODS hinzu, kompiliere ihn und Brenne ihn auf den Chip.
Wenn der Arduino dann durch den Watchdog resettet wird, dann wird der Bootloader übersprungen und der Sketch sofort gestartet. Wenn das Reset einen anderen Grund hat, wird der Watchdog deaktiviert, und der Bootloader wartet auf den neuen Sketch.
Wenn Du den Watchdog nur per Software startest, dann reicht es den Arduino kurz stromlos zu machen. Danach geht das wieder. Problem ist allerdings, dass der Bootloader unter Umständen zu lange braucht und dann der Watchdog zuschlägt --> d.h. statt dem gewünschten Reset mit Neustart bleibt der Arduino dann in einer "Resetschleife" hängen.
den Watchdog verwende ich nur, dass im Falle des Falles ( kann ja sein dass mal der Arduino sich in einer Schleife verhängt usw) der Arduino resettet wird. Das Sysetm soll oder menschlichen Einfluss am laufen gehalten werden. Es liegt dann letztendlich auch an einer etwas schwer zugänglichen Stelle ( Wetterstation )
Zurück zum Watchdog. Ich hätte eh nur einen Reset erst nach Ablauf von >10sec eingestellt. Hierzu dürfte es ja eigentlich nie zu Konflikten mit dem Bootloader kommen..... oder?
eigentlich sollte es da keine Probleme geben, so lang brauch der Bootloader nie.
Sorry, aber ich werd dein Thema jetzt einfach mal für meine Zwecke missbrauchen..
(Wird dir vielleicht auch helfen)
Ich habe ein ähnliches Projekt wie du. (Temperaturmessung am Pool)
Den internen Watchdog hab ich schon in meinen Sketch integriert. (Habs sogar nach dem Link von dir gemacht=
Das lief eigentlich gut wie ich dachte.., wenn mein Arduino beim Daten-an-den-Server-senden keine Antwort vom Server bekam, kam wie gewünscht der Reset.
Doch gleich im ersten Feldtest hat der Watchdog nach ca. 15 Stunden Laufzeit irgendwie nicht gegriffen und das Arduino konnte nur durch drücken des Reset-Buttons wieder zum laufen gebracht werden...
Deshalb: Kann man einen Attiny zum externen Watchdog-Timer machen? Anleitung?
kduin:
Deshalb: Kann man einen Attiny zum externen Watchdog-Timer machen? Anleitung?
Wieso einen externen controller als Watchdog missbrauchen wenn der Arduino eh einen internen eingebaut hat.
Da is bei dir sicher nur irgendwo ein Programmfehler im Sketch....
Zeig uns was du gemacht hast
Die Argumente in den Links sind einleuchtend aber ich glaube etwas übertrieben. Lt. Datenblatt vom Atmega328 besitzt der interne WD einen eigenen Oszillator, wg Unabhängigkeit.
Wenn ich mir ein Szenario ausmale wo die Gefahr besteht dass ein wild gewordenes Programm den Watchdog ausschaltet, dann bin ich nicht mehr weit davon entfernt eine Risikoanalyse durchzuführen und die Lebensdauer der Taster zu berechnen...
Ein externe WD darf dann nicht mehr auf den Reset Pin vertrauen, sondern soll gleich die Stromversorgung des Arduino trennen. Galvanisch getrennt natürlich.
Vielleicht liege ich falsch aber bis jetzt hat bei mir der interne WD immer super funktioniert. Immer wenn ich dem internen WD die Schuld geben wollte, war es doch nur ein Programmierfehler.
Bei wem von euch hat der interne WD schon einmal richtig versagt?
ids2001:
Zurück zum Watchdog. Ich hätte eh nur einen Reset erst nach Ablauf von >10sec eingestellt. Hierzu dürfte es ja eigentlich nie zu Konflikten mit dem Bootloader kommen..... oder?
lg
dieter
Hallo, also diese Frage hat sich irgendwie verlaufen deshalb hänge ich sie nochmals hoch,eventl kann mir sie jemand beantworten.
Falls keine Signale auf der seriellen Schnittstelle anliegen würde ich das auch so sehen. Falls auf der seriellen Schnittstelle aber - warum auch immer - Signale anliegen, dann kann es Dir passieren, dass der Bootloader vor dem WD drankommt und danach gleich wieder ein Reset durch den WD ausgelöst wird. Wenn Du einen WD verbaust ist es eigentlich immer besser den Bootloader in die Tonne zu treten und einen ISR zum flashen zu nehmen.
@ UdoKlein
Du hast natürlich recht mit den Programmierfehlern. Allerdings waren die „Programmierfehler“: 1. WD vergessen zu setzen, 2. WD zum debuggen deaktiviert. Somit hat der WD selbst nicht versagt.
Bei einem externen WD mit Jumper wäre mir das genauso passiert.
@ids2001
Es wird vermutlich zu Konflikten kommen. Lese dir: AVR-Tutorial: Watchdog – Mikrocontroller.net (Hat mir UdoKlein damals empfohlen, Danke im Nachhinein)
Vor allem „WDT nach einem Reset“. Ich hatte mit einem Atmega328 genau das Problem. Erst WD auf 8 Sekunden eingestellt. Nach einem WD Reset war der WD auf eine sehr kurze Zeit (15ms ?) eingestellt. Keine Chance für den Bootloader.
Mit dem -DWATCHDOG_MODS Parameter gibt es kein Problem.
Hmm, dann hast Du aber noch den alten Bootloader. Der neue ist da etwas fixer unterwegs. Davon abgesehen empfehle ich heute ja den Bootloader ganz in den Tonne zu treten
darf ich an dieser stelle mal eine Frage zum Verständnis stellen? Ist der Bootloader nur dafür da um Code per USB zu empfangen? wenn ich einen ISP benutzen würde (geht hier auch ArduinoISP?) könnte ich also auch ganz normal in der Arduino IDE programmieren und hätte mehr Speicher frei?
Genau das. Und wenn Du einen AVRispMKII nimmst, dann kannst Du die Brenngeschwindigkeit auch auf 2 MHz hochdrehen, dann geht noch dazu das Brennen sehr viel schneller. Etwa Faktor 10. Und weiterhin kannst Du dann den seriellen Monitor beim Flashen offen lassen weil er sich ja nicht mehr mit AVRDude ins Gehege kommt.
Bootloader sind hauptsächlich billig. Wer effizient entwickeln will kommt bald davon los.
aber angenommen die brenngeschwindigkeit ist mir egal, dann kann ich ohne bootloader mittels ArduinoISP-sketch auf einen Atmega328 ohne Bootloader brennen? wähle ich dann dazu trotzdem Arduino Uno als board aus?