- 12V Akku mit 280 Ah bauen         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Der Mysteriöse Watchdog

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    08.06.2010
    Ort
    78xxx
    Alter
    31
    Beiträge
    73

    Der Mysteriöse Watchdog

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,
    bin beim stöbern durch das ATmega32 Datenblatt zufällig auf den "Watchdog" gestoßen, aber mir verschliesst sich irgenwie der Sinn. Auch eine kurze Internetrecherche hat mir nicht weitergeholfen.
    Habe ich das Richtig verstanden:
    Der Watchdog wird ausgelößt sobald der uC nichts tut, zählt dann mit seinem eigenen 1MHz Takt eine vorbestimmte Zeit runter und resettet den uC, falls er sich immer noch nicht regt? Also ist der Watchdog eine externe Schaltung, die den uC, wenn er abstürzt einfach neu startet.

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.555
    Man kann sich da ein retriggerbares Monoflop vorstellen, solange das Programm ordentlich läuft wird das Monoflopp immer regelmäßig getriggert.
    Hängt das Programm fällt das Monoflop in seinen Standart (Ruhe) Zustand und löst dabei einen Reset aus.

    Gruß Richard

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.04.2010
    Beiträge
    1.249
    Der Watchdog merkt nicht selbst ob der der µC sich aufgehängt hat.
    Der Watchdog wartet eine bestimmte Zeit und resetet den Controller, wenn er bis der Zähler des Watchdogs nicht zurückgesetzt wurde.
    Die meisten AVRs (die ich kenne) haben einen internen Watchdog.

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    31
    Beiträge
    1.578
    Hallo,

    naja nicht ganz... Den Watchdog kann/muss man auf eine bestimme Zeit einstellen. Wenn er vor Ablauf dieser Zeit nicht wieder resetet wurde, dann resettet er den ganzen µC. Also wenn dein Programm in einer Schleife festhängt, dann wird der ganze µC resettet!

    Gruß
    Chris

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    08.06.2010
    Ort
    78xxx
    Alter
    31
    Beiträge
    73
    Ahh ok, eigentlich ja recht sinvoll

  6. #6
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.065
    Rech sinvoll. habe ich schon eingesetzt (als Sicherheit). Teilweise haben Maschinen (mit SPS bzw PC-Steuerung) einen Watchdog. Falls die SPS den Watchdog nicht zurücksetzt wird die Maschine abgestellt (z.B. Notaus) und es kommt eine Alarmmeldung.

    Bei den AVRs (zumindest beim Attiny44) kann man mit dem Watchdog in eine Interruptschleife springen. Es wird nicht unbedingt der µC resettet.

    MfG Hannes

  7. #7
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    ...kann man mit dem Watchdog in eine Interruptschleife springen.
    Das können wohl nur die kleinen Tinies, der 13er kann das auch. Bei dessen Watchdog lauert aber eine ganz versteckte Gefahr:

    Zitat Zitat von Datenblatt des Tiny13 S. 37/38
    Note: If the Watchdog is accidentally enabled, for example by a runaway pointer or
    brown-out condition, the device will be reset and the Watchdog Timer will stay enabled.
    If the code is not set up to handle the Watchdog, this might lead to an eternal loop of
    time-out resets. To avoid this situation, the application software should always clear the
    Watchdog System Reset Flag (WDRF) and the WDE control bit in the initialisation routine,
    even if the Watchdog is not in use.
    (Aus: https://www.roboternetz.de/phpBB2/ze...=336549#336549)

    Den entsprechenden Hinweis habe ich im Mega32-Datenblatt noch nicht entdeckt. Vermutlich habe ich mir aber vor ein paar Tagen durch einen verirrten Zeiger möglicherweise deshalb einen Mega8 abgeschossen. Die von Atmel für den Tiny13 gemachte Empfehlung habe ich bei den Megas natürlich nicht eingebaut. (btw. wüßte ich auch gar nicht, wie man das Setzen der WD-Bits soweit vorne ins Programm bekommt, dass es ausgeführt wird, bevor der WD bellt)

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    37
    Beiträge
    4.255
    Zitat Zitat von radbruch
    (btw. wüßte ich auch gar nicht, wie man das Setzen der WD-Bits soweit vorne ins Programm bekommt, dass es ausgeführt wird, bevor der WD bellt)
    Dafür gibt es die .init...-sections. Dort liegen der Startup-Code, den der GCC erzeugt. Einige davon sind standardmäßig leer und können für eigene Zwecke genutzt werden. Ein Beispiel für den Watchdog findet man hier ganz oben:
    http://www.nongnu.org/avr-libc/user-..._watchdog.html

  9. #9
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Danke für die Info. Würde das dann ausreichen um einen fälschlich aktivierten WD einzuschläfern?

    Code:
    void kill_WD(void) __attribute__((naked)) __attribute__((section(".init3")));
    void kill_WD(void) { wdt_disable(); }
    
    int main(void)
    {
    	kill_WD();
    Denn das wäre ja kein allzugroßer Aufwand :) Allerdings kommt mir das etwas seltsam vor.

    Den Inhalt von MCUSR brauche ich ja nicht zu sichern, wenn mich der Grund für den letzten Reset nicht interessiert.

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    37
    Beiträge
    4.255
    Sollte so stimmen. Allerdings müsstest du kill_WD() in main() nicht nochmal aufrufen.

    EDIT: nein, da fehlt noch was: das Watchdog-Reset-Flag im MCUSR muss auf Null gesetzt werden!

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress