Arduino Watch Dog Timer WDT Bootloader

Arduino Watch Dog Timer WDT Bootloader

Beitragvon Rocktagon » Fr 13. Sep 2013, 17:54

Sollte der Arduino mal hängen kann man mit dem Watch Dog Timer (WDT) den Arduino automatisch neu starten.

Am Sketch Anfang:
#include <avr/wdt.h> //Watchdog

In Setup:
wdt_enable(WDTO_8S); //8 Sekunden

In loop (und überall wos mal länger dauern kann):
wdt_reset();

!!! ABER !!!
Auf den meisten Arduinos wird der WDT im Bootlaoder nicht resetettet wodurch eine resetschleife ensteht (das LED blinkt nur noch die ganze zeit).
Meistens hilft es einfach mal den Strom ab zu ziehen.

Damit der WDT funktioniert muß man den Bootloader ändern. Dazu benötigt man:
1. Möglichkeit: einen zweiten Arduino http://arduino.cc/en/Tutorial/ArduinoISP
2. oder einen ISP Programmer (3€ aus China, 3-4 Wochen lieferzeit). Diese muß man dann eben von dem 10 Poligen Stecker auf den 6 Poligen Arduino Stecker oder die Ports umpinnen.
3. oder schnell, einfach und billig aber wirklich nur für den Notfall geeignet: http://blog.gut-man.de/2009/05/19/lpd-z ... eradapter/
(Ich gebe zu bedenken das der Parallel (LPT) Port schnell zerstört werden kann. Daher sollte man besser auf eine der anderen Möglichkeiten zurückgreifen)

Hat man einen ISP muß man noch den Bootloader eddieren und neu compilieren. Ist ned schwer^^
Quelle: http://forum.arduino.cc/index.php/topic,27162.0.html
Die Dateien entsprechend abändern und das script (als Batchdatei) starten. In der Batchdatei muß man noch angeben für welchen Typ man das ganze machen will.

Oder das Zip im Anhang (http://www.rocktagon.de/forum/download/file.php?id=55) nach <Arduino Dir>\hardware\arduino\bootloaders\atmega entpacken.
In der makeit.bat den richtigen Typ angeben und die Batchdatei starten (In der Zip im Anhang ist es für den Mega (1280/2560) eingestellt).

Hat man den Bootloader somit neu compiled muß man ihn nur noch über den ISP hochladen. Dazu in der Arduino Software den benutzen Programmer auswählen:
Bei einem 2 Arduino (der mit dem Sketch "Arduino ISP" aus der Beispielliste aufgespielt wurde) nimmt man "Arduino als ISP"
Bei einem (China) ISP nimmt man den USBasp (Warnmeldungen bezüglich clock können ignoriert werden - dann ist auf dem ISP eine etwas ältere Software aber geht auch so).
Bei der LPT Variante wählt man den Parallel Programmer.

Dann noch auf "Bootloader installieren" klicken. Das dauert dann etwas ohne jegliche Fortschrittsanzeige. Einfach warten (kann 2-3 Minuten dauern).


**** ACHTUNG **** Der Mega2560 benutzt das stk500 (v2) Protokoll. Dazu muß zb der USBASP auf dem neusten stand sein ansonsten ist der Arduino nicht mehr funktionsfähig bis er mit einem geeigneten Programmer bespielt wurde. Den Bootloader für den 2560 laßen sich daher auch nicht mit dem oben gennanten Script machen. Diese geht nur bis zu dem 1280. Den Bootloader für den 2560 findet ihr unter ...\arduino\hardware\arduino\bootloaders\stk500v2. Einen fertigen Bootloader habe ich mal mit angehangen. **** ACHTUNG ****

Danach sollte der Arduino mit dem WDT zu recht kommen.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Non mihi non tibi sed nobis
nightlight ÄT gmx PUNKT de
Benutzeravatar
Rocktagon
Administrator
 
Beiträge: 142
Registriert: So 28. Okt 2012, 10:15
Wohnort: NRW

Re: Arduino Watch Dog Timer WDT Bootloader

Beitragvon Rocktagon » Do 31. Okt 2013, 20:24

Alternativ die Dateien aus dem Zip im Anhang in Arduino\bootloaders\atmega kopieren.

Die vorhandenen Dateien sind fertig. Man kann somit direkt den Bootloader mit der IDE aufspielen (siehe oben).

Um die Bootloader neu zu compilen einfach die Batchdatei starten, es werden automatische alle Versionen neu erstellt.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Non mihi non tibi sed nobis
nightlight ÄT gmx PUNKT de
Benutzeravatar
Rocktagon
Administrator
 
Beiträge: 142
Registriert: So 28. Okt 2012, 10:15
Wohnort: NRW

Re: Arduino Watch Dog Timer WDT Bootloader

Beitragvon Rocktagon » Do 31. Okt 2013, 21:53

Kleiner Test Sketch im Anhang womit man den Arduino auf die funktion des Watchdogs testen kann ohne ihn unbrauchbar zu machen.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Non mihi non tibi sed nobis
nightlight ÄT gmx PUNKT de
Benutzeravatar
Rocktagon
Administrator
 
Beiträge: 142
Registriert: So 28. Okt 2012, 10:15
Wohnort: NRW

Re: Arduino Watch Dog Timer WDT Bootloader

Beitragvon Rocktagon » Do 10. Jul 2014, 10:51

Um den Watchdogtimer ohne Bootloader zu aktivieren kann man folgende Funktion benutzen:

Code: Alles auswählen
void enable_WDT_withoutBootloader(){
  uint8_t   mcuStatusReg;
  mcuStatusReg   =   MCUSR;

  __asm__ __volatile__ ("cli");
  __asm__ __volatile__ ("wdr");
  MCUSR   =   0;
  WDTCSR   |=   _BV(WDCE) | _BV(WDE);
  WDTCSR   =   0;
  __asm__ __volatile__ ("sei");
}


Die Funktion muß vor dem starten des WDT aufgerufen werden, danach kann der WDT ganz normal benutzt werden.
Non mihi non tibi sed nobis
nightlight ÄT gmx PUNKT de
Benutzeravatar
Rocktagon
Administrator
 
Beiträge: 142
Registriert: So 28. Okt 2012, 10:15
Wohnort: NRW


Zurück zu Arduino

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste

Fatal: Not able to open ./cache/data_global.php