-         

Ergebnis 1 bis 5 von 5

Thema: Watchdog auf best. Adresse?

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    24
    Beiträge
    1.544

    Watchdog auf best. Adresse?

    Anzeige

    Hallo,

    für meinen Tricopter möchte ich den Watchdog im ATMEGA328P benutzen. Allerdings stellt sich mir die Frage, ob (bzw. wie) man bei einem Neustart herausfinden kann, ob der WD den Reset ausgelöst hat?! Das wäre insofern wichtig, da der µC erst ca. 5sek nach Stromzufuhr startet, weil er in den 5sek versch. Initialisierungen macht! Wenn ich jetzt draußen Fliege und plötzlich startet der µC neu, dann muss ich diese Initialisierung überspringen, da der Tri sonst 5sek. im freien Fall Richtung Boden trudelt. Gibt es eine Möglichkeit, das abzufragen und evtl. noch VOR dem Reset in eine ISR zu springen? (Muss ich überhaupt Variablen sichern oder kann ich davon ausgehen, dass diese beim WD-Reset nachwievor die gleichen Werte haben?) Habe schon Google bemüht, aber nur heraus gefunden, dass es wohl bei den Tinys so eine Möglichkeit gibt, aber zu dem Megas habe ich nichts gefunden... Evtl. weiß da ja einer mehr, wäre toll

    Gruß
    Chris

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    29
    Beiträge
    4.545
    Musst du unbedingt den Controller resetten, wenn der WD anspricht? Könnte es reichen, wenn du einen Int auslöst und darauf reagierst. Laut DB des 328 gibt es 3 Modes des WD: System Reset, Interrupt und System Reset + Interrupt. Eventuell funktioniert es mit Mode 3 (System Rst und Int).

    MfG Hannes

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112
    Zitat Zitat von Che Guevara Beitrag anzeigen
    Allerdings stellt sich mir die Frage, ob (bzw. wie) man bei einem Neustart herausfinden kann, ob der WD den Reset ausgelöst hat?!
    Im Register MCUSR ist nach einem WD Reset das Flag WDRF gesetzt. Schau mal im Datenblatt.

    Zitat Zitat von Che Guevara Beitrag anzeigen
    Wenn ich jetzt draußen Fliege und plötzlich startet der µC neu, dann muss ich diese Initialisierung überspringen, da der Tri sonst 5sek. im freien Fall Richtung Boden trudelt.
    Der WD löst ja normalerweise nicht aus, nur, wenn etwas Unvorhergesehenes passiert. Dann weißt du allerdings auch in der Regel nicht, in welchem Zustand sich der µC gerade befindet und von wo aus er in den Reset gegangen ist. Daher wäre die normale Reaktion, erst einmal die Initialisierungen durchzuführen. Wenn dies zu lange dauert, würde ich so eine Art Notbetrieb vorsehen, falls er sich gerade im Flug befindet. Und möglichst schnell wieder die Funksignale deiner Steuerung empfangen.

    Zitat Zitat von Che Guevara Beitrag anzeigen
    Gibt es eine Möglichkeit, das abzufragen und evtl. noch VOR dem Reset in eine ISR zu springen?
    Hat Hannes ja schon beschrieben.

    Zitat Zitat von Che Guevara Beitrag anzeigen
    (Muss ich überhaupt Variablen sichern oder kann ich davon ausgehen, dass diese beim WD-Reset nachwievor die gleichen Werte haben?)
    Dies ist allerdings etwas gefährlich, da du nicht weißt, wo der "normale Betrieb" unterbrochen wurde.
    Wie gesagt, ich würde versuchen möglichst schnell in einen definierten Zustand zu kommen. Kannst du feststellen, wie die Orientierung des Tricopters ist und in welche Richtung er sich bewegt?

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    31
    Beiträge
    4.255
    Den Reset-Grund kannst du in MCUSR herausfinden.

    Was mit den Variablen passiert, hängt vom Compiler ab. Der AVR selbst behält beim Reset die Werte der Register und im SRAM (nur die IO-Register nicht), allerdings würden in einem C-Programm alle Variablen vom Compiler neu initialisiert.

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    24
    Beiträge
    1.544
    Hallo,

    ok, ich seh mir mal genauer das DB an und entscheide mich dann für eine Möglichkeit.
    Am besten wird es wohl sein, wenn ich im Falle, dass der WD bellt, in eine ISR springe, dort dann die wichtigsten Parameter (Offsets der Gyros, usw..) ins EEProm schreibe und dann einen Reset auslöse. Nach dem Start frage ich dann ab, ob der Reset vom WD kam und falls ja überspringe ich das Offset Berechnen und die Wartezeiten! Ich denke, das sollte so funktionieren.
    Programmiert wird in Bascom, aber du hast Recht, sicher ist das nicht, sich darauf zu verlassen, dass die Variablen noch da sind nach einem Reset! Da doch dann die EEPromm Lösung...

    Werds mir mal im DB ansehen und dann mal ein Testprogramm schreiben!

    Gruß
    Chris

Ähnliche Themen

  1. AVR Watchdog
    Von RedBaron im Forum C - Programmierung (GCC u.a.)
    Antworten: 5
    Letzter Beitrag: 24.12.2009, 12:44
  2. Atmega48 Watchdog
    Von Moritz f. im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 16.07.2006, 15:16
  3. Watchdog und Pulsein
    Von UweMD im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 10
    Letzter Beitrag: 17.06.2006, 08:53
  4. Watchdog
    Von Lincolnmhkn im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 01.03.2005, 14:06
  5. Watchdog?!
    Von djfoxi im Forum Robby CCRP5
    Antworten: 1
    Letzter Beitrag: 13.04.2004, 18:17

Berechtigungen

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