ich wollte ein bischen mit dem Watchdog Timer experimentieren und habe dazu einen Code auf meinen Arduino Mega 2560 hochgeladen.
Jetzt habe ich das Problem, dass es nicht mehr möglich ist den Microcontroller neu zu beschreiben.
Der Code (ganz egal welcher Art) wird zwar kompiliert, kann aber nicht geuploadet werden.
gelesen, dass das etwas mit dem Watchdog zu tun hat und man das Problem so lösen kann:
im Arduino Unterverzeichnis:
hardware\arduino\bootloaders\atmega
in der Datei:
makefile
beim entsprechenden Target bei:
CFLAGS +=
den Parameter:
'-DWATCHDOG_MODS'
hinzufügen
Beispiel für den Mega:
mega: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=0' -DBAUD_RATE=57600 '-DWATCHDOG_MODS'
Hex-Datei sichern, und aus dem Verzeichnis entfernen. Danach den Bootloader neu kompilieren (make.exe…)und via ISP auf den Chip brennen.
-Funktioniert das auch mit einem Mega 2560?
-Wenn ja, was bedeutet "Hex-Datei sichern, und aus dem Verzeichnis entfernen"?
-Wie kann ich den Mega 2560 per ISP beschreiben (mit einem Arduino Uno)?
Einen Uno mit einem Uno als ISP zu beschreiben hat bei mir schon funktioniert.
Macht man das bei seinem großen Bruder genauso?
Oder gibt es vielleicht auch eine andera Möglichkeit meinen Mega 2560 zu retten?
Für alle die es interessiert wäre hier übrigens der Watchdog Code, den ich geuploadet habe:
Wenn der Sketch den Wachdog im setup nicht schnell genug aufruft oder Du die Wachdogzeit so kurz wählst daß der Bootloader nicht beendet wird bevor der Watchdog einschreitet resetiert der Arduino bevor Du ein Upload machen kannst.
Ich befürchte ein Upload mittels ISP nutzt nichts. Ich weiß nicht ob ein rücksetzen der entsprechenden Fuse mitels ISP möglich ist.
Eine Lösung ist High Voltage Programming. Eine Beschreibung für einen ATmega328 eines Arduino UNO hier: Soup.io . Mir ist aber nicht bekannt ob und wie man einen eingelöteten ATmega2560 so resetieren kann.
Was hast Du genau gemacht?
Nicht nur "mit dem Watchdog-Timer" gespielt (z.B. für den Sleepmode), sondern "einen Watchdog-Reset programmiert"?
Epijano:
-Funktioniert das auch mit einem Mega 2560?
Bevor Du irgendwas kompliziertes anfängst, das auf möglicherweise veralteten/uralten Informationen aus dem Internet beruht, würde ich eher mal ausprobieren, ob der aktuelle MEGA-Bootloader nicht bereits entsprechend fehlerbereinigt ist, ohne dass Du selbst einen eigenen Bootloader-Quellcode zu einem Bootloader-Executable kompilieren brauchst. Das ist nämlich nicht so ganz trivial.
In jedem Fall benötigst Du einen ISP-Programmer.
Notfalls einen zweiten "Arduino as ISP" mit entsprechendem Sketch und entsprechender Hardware-Verkabelung.
Also mal die Arduino Version 1.0.5 installieren
Dann mit dem ISP den aktuellen "Bootloader neu installieren".
Ist der Fehler dann weg und der MEGA funktioniert wieder? ==> Glückwunsch!
Wenn der Fehler auch mit einem aktuellen MEGA-Bootloader nicht beseitigt werden kann:
Schreibe Dir einen kurzen eigenen Sketch, der sofort im setup() den Watchdog deaktiviert und lade diesen Sketch mit dem ISP-Programmer hoch!
Und danach wie folgt verfahren:
Wenn Du mit Bootloader und nur noch ohne Watchdog-Timer programmieren möchtest, danach wieder einen Bootloader installieren.
Und wenn Du immer noch mit Watchdog-Reset experimentieren möchtest: Lasse den Bootloader weg und lade alle Sketche NUR MIT ISP!
Einen Bootloader installiert zu haben und gleichzeitig Watchdog-Reset nutzen zu wollen, ist nicht wirklich sinnvoll. Das machst Du besser auf einem System ohne Bootloader, auf das der Sketch mit einem ISP hochgeladen wird.
High Voltage Programming ist für mich nicht wirklich eine Option
In jedem Fall benötigst Du einen ISP-Programmer.
Notfalls einen zweiten "Arduino as ISP" mit entsprechendem Sketch und entsprechender Hardware-Verkabelung.
Ich habe einen Arduino Uno, den ich als ISP-Programmer verwenden kann.
Wie ich damit Code auf einen anderen Arduino Uno hochlade wird ja in diversen Tutorials recht gut erklärt.
Das hab ich auch hingekriegt.
Aber wie sieht die Verkabelung aus, wenn ich mit dem Uno Code auf den Mega hochladen möchte?
Geht das überhaupt?
Meine Theorie wäre folgende gewesen:
Wenn Uno1 programmiert wird, dann muss ich ja dessen Pin 13 mit dem Pin 13(SCK) von Uno2(Uno der als ISP fungiert) verbinden.
Der SCK Pin ist beim Mega ja aber nicht Pin 13, sondern Pin 52.
Wenn ich also mit meinem Uno den Mega programmieren möchte, dann wäre es ja logisch, wenn ich Pin 13 vom Uno mit Pin 52 vom Mega verbinde....
Wenn ich das selbe mit den anderen Pins mache, dann komme ich auf folgende Verkabelung:
Arduino Uno als ISP Arduino Mega 2560 der programmiert werden soll
Mit dem ISP-Sketch auf dem Arduino UNO kannst Du den ATmega2560 auf dem MEGA programmieren. Die 2x3 Pfosten sind gleich anzuschließen. Ich kann Dir aber nicht sagen ob der Watchdog nicht dazwischenfunkt.
Grüße Uwe
Funktioniert hat es jedenfalls nicht, aber ich hab natürlich auch keine Ahnung, ob das so generell nicht geht oder es immer noch am Watchdog liegt...
Generell müßte es wohl so funktionieren. Allerdings hast Du auf dem MEGA ja immer noch den fehlerhaften Sketch auf dem MEGA2560 drauf, und wenn der MEGA Strom bekommt, dann läuft erst sein Bootloader und danach aktiviert der fehlerhafte Sketch wieder den Watchdog-Reset, der ab dem Zeitpunkt aktiv ist und in einer Endlos-Reset-Schleife immer wieder zuschlägt und auch beim Reset nicht mehr deaktiviert wird.
Auf welche Tmeout-Zeit hast Du denn den Watchdog-Reset programmiert? Acht Sekunden? Oder weniger?
Wenn Du keinen richtigen ISP-Programmer hast und wenn ich es mir recht überlege, müßtest Du mit einem manuellen Reset eigentlich auch mit Hilfe des Bootloaders und des USB-Kabels in der Lage sein, einen neuen, fehlerfreien Sketch hochzuladen. Z.B. den Blink-Beispielsketch.
Hintergrund: Soweit mir bekannt ist, startet der Atmega beim Power-On ohne aktivierten Watchdog, und wenn danach der Watchdog-Reset programmiert ist, bleibt dieser bis zum Entfernen der Stromversorgung aktiv, übersteht also Resets.
Eigentlich müßtest Du jetzt nur folgende zwei Dinge machen:
das MEGA-Board mit Strom versorgen, OHNE dass der Controller startet
dafür sorgen, dass beim anschließenden ERSTEN START des Controllers sofort über den Bootloader ein neuer Sketch geladen wird
Das Handling dafür wäre wie folgt. Vorab würde ich unter Windows die Tonausgabe aktivieren, so dass man es akustisch hört, wenn Windows ein angestöpseltes USB-Gerät entfernt oder eingestöpselt bekommt.
USB-Kabel vom MEGA2560 Board entfernen (Board stromlos machen)
Reset-Taster auf dem MEGA-Board drücken und gedrückt halten
USB-Kabel einstöpseln und warten, bis die serielle Schnittstelle von Windows erkannt wird (Ton!)
(Der gedrückte Reset-Button auf dem Board verhindert, dass der Controller startet)
Aus der Arduino-Software heraus den Sketch-Upload starten (z.B. Blink-Sketch)
Sobald die Arduino-Software "Uploaden..." anzeigt, blitzartig den Reset-Button loslassen
Falls es nicht auf Anhieb klappt, ggf. diese Schritte mehrmals wiederholen.
Funktioniert der Upload auf diese Art?
Wenn ja: Ist das Board danach normal benutzbar?
Hab endlich Zeit gefunden deine Vorschläge auszuprobieren...
Wenn der Fehler auch mit einem aktuellen MEGA-Bootloader nicht beseitigt werden kann:
Schreibe Dir einen kurzen eigenen Sketch, der sofort im setup() den Watchdog deaktiviert und lade diesen Sketch mit dem ISP-Programmer hoch!
Hat leider nicht funktioniert.
Da bekomme ich die Selbe Fehlermeldung wie wenn ich den Mega ganz normal anschließe...
Auf welche Tmeout-Zeit hast Du denn den Watchdog-Reset programmiert? Acht Sekunden? Oder weniger?
Auf zwei Sekunden.
Allerdings muss der Code bevor der Watchdog aktiviert wird erst noch durch einige delays durch.
Hier nochmal der Code, der die Probleme verursacht hat:
11 mal 0,3 plus 2 Sekunden.
Das wären insgesamt mindestens 5,3 Sekunden bevor der Reset ausgelöst wird...
Trotzdem hat auch das mit dem Reset Taster drücken nicht geklappt.
Was mir allerdings aufgefallen ist:
Wenn der Code mit dem Watchdog immer noch auf dem Arduino ist, dann müsste die TX-Led nach dem einschalten ja eigentlich einige Male kurz blitzen...
Tut sie aber nicht.
Note that for newer devices (ATmega88 and newer, effectively any AVR that has the option to also generate interrupts), the watchdog timer remains active even after a system reset (except a power-on condition), using the fastest prescaler value (approximately 15 ms). It is therefore required to turn off the watchdog early during program startup, the datasheet recommends a sequence like the following:
Epijano:
Trotzdem hat auch das mit dem Reset Taster drücken nicht geklappt.
Gerade mal getestet: Wenn Du das Board mit einem 2s-Watchdog gebrickt hast kannst Du exakt auf die von mir in Reply #5 beschriebene Art wieder einen neuen Sketch hochladen.
Aber wie Serenifly schon schrieb: Das "#define" mußt Du in Deinem Quelltext weglassen, das hat dort nichts verloren!
Nur:
wdt_disable();
muß vorne in der setup-Funktion stehen.
Und wenn die Board-LED blinken soll, die sitzt auch beim MEGA an Pin-13 (und nicht an Pin-2).