Go Down

Topic: Watchdog (Read 1 time) previous topic - next topic

Hermi

Hallo zusammen,

gibts im Arduino einen Watchdog?

Hab viele Topics mit Watchdog im Forum gefunden. Schlau geworden bin ich jedoch nicht.
:~

volvodani

Ja es gibt eine Watchdog Teil des AVR-GCC

In deinem Code musst du dann folgende Lib einbinden

Code: [Select]

#include <avr/wdt.h>

void setup(){
wdt_enable(WDTO_2S); // stellt die Watchdog auf 2s
}

void loop(){
wdt_reset();  //musst du einemal in der loop ausführen
}


Der wdt_reset() setzt die WDT zurück, wenn in dem Beispiel oben 2s der wdt_reset() nicht kommt resetet er den ATMEGA.
Aber Achtung zu kurze Zeiten machen ATmega unprogarmierbar wegen dem Bootloader.
Also Auchtung man muss wissen was man tut!!!


Hier Infos:
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Der_Watchdog
Da habe ich es hier.

Gruß
Der Dani
So ist das Leben:
Manchmal bis du das Denkmal, manchmal die Taube!

Hermi

Bekomm' ich auch irgendwie raus. ob ich aus dem Kaltstart-Reset komme oder aus dem Watchdog?

Beim Watchdog-Reset muss ich die Hardware anders konfigurieren.

uwefed


Bekomm' ich auch irgendwie raus. ob ich aus dem Kaltstart-Reset komme oder aus dem Watchdog?

Beim Watchdog-Reset muss ich die Hardware anders konfigurieren.

Ciao
La RAM perde i dati se non é alimentato. Dopo un reset da alimentato i dati dovrebbero rimanere nella RAM ma vengono resettati tutti i registri.
Ciao Uwe

sth77


Ciao
La RAM perde i dati se non é alimentato. Dopo un reset da alimentato i dati dovrebbero rimanere nella RAM ma vengono resettati tutti i registri.
Ciao Uwe

Hätte ich nicht besser zusammenfassen können, kann nämlich kein Italienisch! :D Geht das auch auf in einer uns geläufigeren Sprache? ;)
Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

volvodani

Quote

Hallo
RAM Daten verliert, wenn es nicht eingeschaltet ist. Nach einem Reset sollten bereitgestellt von den Daten im RAM, sondern setzt alle Register bleiben.
Hallo Uwe

sagt der Google Translator.
Gruß
Der Dani
So ist das Leben:
Manchmal bis du das Denkmal, manchmal die Taube!

Udo Klein

Jein, man kann das rausbekommen, ABER: es gibt Bootloader die das nachhaltig verhindern. Bootloader in die Tonne treten und es geht. Ich hatte das mal hier http://blog.blinkenlight.net/experiments/counting-resets/ breitgetreten.
Check out my experiments http://blog.blinkenlight.net

uwefed


Ciao
La RAM perde i dati se non é alimentato. Dopo un reset da alimentato i dati dovrebbero rimanere nella RAM ma vengono resettati tutti i registri.
Ciao Uwe

Entschuldigt, das passiert wenn man nicht aufpaßt und den ganzen Tag 2 Sprachen spricht und dauernd wechselt je nachdem mit wem man spricht, und dann einfach eine Sprache benutzt ohne lang nachzudenken. (eigentlich spricht man 2 Sprachen (Italienisch und Dialekt) und schreibt eine dieser und eine Dritte (Italienisch und  Hochsprache)
Also ofizielle Deutsche Version:
Quote
Das RAM verliert die Daten, wenn es nicht mit Spannung versorgt ist. Nach einem Reset ohne Spannungsunterbrechung müßten die Daten im RAM noch vorhanden sein. Die Register des Controllers werden aber alle resetiert.  

@Udo
In Deinem Beispiel wird da nicht ein Wert im EEprom zwischengespeichert? Da erkennt man nicht ob es ein Einschaltreset ist oder der Rest durch einen Watchdog oder Taster ausgelöst wurde.

Das einzige das mir einfällt ist eine RAM-Speicherzelle zu kontrollieren ob ein bestimmter Wert drin ist. Falls er nicht drin ist, dann ist es ein Einschaltreset und der gesuchte Wert wird in die Speicherstelle geschrieben. Ist der Wert in der Speicherstelle dann war es ein Reset ohne Spannungänderung. Das fuktioniert nur wenn die Spannungsunterbrechung lang genug war damit jegliche Ladung aus den 8 Bit Speicherstellen abgeflossen ist und das Byte so nicht einen Vorzugs-Wert annimmt. Man kann auch ein externes RAm verwenden oder zB ein FF setzen das eine Einschaltreset zum löschen hat (RC-Glied) Diese Lösungen verlangen zusötzliche HW und verbrauchen einige Pins.

Grüße Uwe

michael_x

Da habe ich jetzt was gelernt zum Initialisieren des RAM:

Code: [Select]
int a;
int b=0;
int c=1;

void setup() {
Serial.begin (9600);
Serial.print ( a); Serial.write(' ');
Serial.print ( b); Serial.write(' ');
Serial.println ( c);
}

void loop() {
  b++;
  delay(1000);
  Serial.print ( ++a); Serial.write(' '); Serial.println(b);
}


Hier wird auch die Variable a bei jedem Reset initialisiert!
Die erste Ausgabe ist also immer
0 0 1
Egal ob mit oder ohne  Bootloader.

Dies gilt aber nicht immer für eine Variable, die so definiert ist:
Code: [Select]
int rc __attribute__ ((section (".noinit")));

Die vielen Klammern sind erforderlich, der Name  ".noinit" ist auch vorgegeben ->
http://nongnu.org/avr-libc/user-manual/mem_sections.html 

"Thank you for bringing this to my attention"

Udo Klein

@uwe: wo bei

Code: [Select]

uint8_t reset_counter __attribute__ ((section (".noinit")));
void setup() {
    ++reset_counter;
}


wir Deiner Meinung nach auf das EEPROM zugegriffen?
Check out my experiments http://blog.blinkenlight.net

michael_x

Ich habe das auch so verstanden, dass in http://blog.blinkenlight.net/experiments/counting-resets/ eher eprom als Speicher zum Reset-Zählen empohlen wird.
Quote
So I needed some other place to put my counter through resets. After trying almost any register I figured that EEPROM will be the only reliable means


Ist aber auch eine andere Aufgabenstellung.
So genau werden deine Artikel gelesen, Udo ;)

Danke übrigens ...

uwefed


@uwe: wo bei

Code: [Select]

uint8_t reset_counter __attribute__ ((section (".noinit")));
void setup() {
    ++reset_counter;
}


wir Deiner Meinung nach auf das EEPROM zugegriffen?

Ist das eine Gewissensfrage?  ;) ;)
Da aus praktischer Erfahrung der Zähler in diesem Sketch auch beim Ausschalten erhalten bleibt bzw hinaufgezählt wird habe ich den Code nicht weiter analysiert.
mea culpa. :~
Grüße Uwe

Go Up