- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 9 von 9

Thema: Watchdog verbeißt sich unbegrenzt (RNControl, mega1284P)

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.715
    Blog-Einträge
    133
    Zitat Zitat von Searcher Beitrag anzeigen
    ... und der µC dann dauernd vom Watchdog rückgesetzt wird?
    Vielleicht sollte ich näher erläutern, wie ich zu der Annahme komme:

    1. Spannung vom System wird eingeschaltet (SRAM hat vor Programmstart irgendwelche Werte ungleich 0) und System (Programm) läuft wie gewünscht.
    2. Von FB kommt "000" und durch Variable "iBB16" wird Watchdog ausgelöst.
    3. Watchdog erzeugt einen Reset, der die I/O Register auf Defaultwerte zurücksetzt aber den SRAM unberührt läßt.
    4. Das Hauptprogramm beginnt von vorne und die Variable "iBB16" könnte nun im SRAM auf der gleichen Stelle wie vorher liegen und dort den Wert 0 wie vor dem Reset erhalten -> neue Watchdogauslösung.
    5. u.s.w. bis Spannung abgeschaltet wird.


    Falls also nicht verhindert wird, das iBB16 nach Watchdogreset bzw nach wdt_disable(); ohne FB den Wert 0 hat, könnte ich mir den Ablauf also so vorstellen.
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    37
    Beiträge
    1.225
    Zitat Zitat von Searcher Beitrag anzeigen
    Das Hauptprogramm beginnt von vorne und die Variable "iBB16" könnte nun im SRAM auf der gleichen Stelle wie vorher liegen und dort den Wert 0 wie vor dem Reset erhalten -> neue Watchdogauslösung.
    ibb16 scheint mir ein Funktionsparameter zu sein, aber unabhängig davon: Deine Theorie scheitert daran, dass der Startup-Code alle globalen/statischen Variablen nach jedem Reset gleich initialisiert, unabhängig davon ob es ein Power-On-Reset oder ein Watchdog-Reset war. Und alle Register (bis auf das Watchdog-Register) werden bei einem Reset durch den AVR selbst auf die Standardwerte zurückgesetzt.

    mfG
    Markus
    Tiny ASURO Library: Thread und sf.net Seite

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.715
    Blog-Einträge
    133
    Zitat Zitat von markusj Beitrag anzeigen
    Deine Theorie scheitert daran, dass ..
    Mist, mir gefiel sie und hatte bisher nur was zur Initialisierung von statischen Variablen gefunden. Jetzt, nach Deinem Post, find ich auch was zu den globalen. Eigentlich nutze ich Bascom, aber es ist immer wieder interessant anderen Sprachen zuzuhören und hoffentlich durchzublicken.

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  4. #4
    Probiers mal hiermit, hatte das Problem auch schon, der Code legt den AssemblerCode der den Watchdog deaktiviert in die .init Sektion des Programms, das ist dann das allererste, was das Programm tut. Das Problem ist, das mit dem Reset des Controllers (durch den WDT) auch das Control-Register des WDT gelöscht wird und dieser nun auf 15ms eingestellt ist, das reicht manchmal nicht...

    [/code]
    void wdt_init(void) __attribute__((naked)) __attribute__((section(".init1")));

    void wdt_init(void)
    {
    MCUSR = 0;
    wdt_disable();
    DDRA = (1<<PA0);
    PORTA &= ~(1<<PA0);

    return;
    }
    [/code]

    sollte das Problem beheben, wo das im Programmcode landet ist egal, es wird so oder so ausgeführt

  5. #5
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.698

    Hat der Watchdogtest den Controller ruiniert ?

    Nach Monaten mit anderen Baustellen bin ich zurück beim Watchdog. (M)EIN Problem: bei laufendem LCD hängt sich der Controller nach reproduzierbaren 11:15 min auf . . . :-/

    Folgende Codeschnippsel wurden erstellt als Zusatz/Einfügung bei sonst problemlosen (bis auf den LCD-Bug) Steuerungsablauf. Damit war ein Test geplant, ob erstmal ne quick´n dirty Lösung per WDT möglich wäre

    Code:
    // Im Main nach Includierung der 
      #include <avr/interrupt.h>    //
      #include <avr/wdt.h>          //
    //      Mainmodul
    //..
    
      Isecundn      = 1;            // Sekundenzähler max 9Stunden - NUR hier nullen
      Itmr_RES      = 0;            // Sekundenzähler für RESET
      
      wdt_init( );
    
      TC2TMR_init();            // Init Timer/Cntr2-Interrupt 20 kHz/50 µsec  tmr
    // . . . 
    //      Ende Main
    //
    
    // Im getrennten Timermodul nach erreichen einer Sekunde:
    // . . .
        Itmr_RES ++;                // Resettimer wegen LCD-Fehlfunktion
        if ( Itmr_RES == 30 )       // Zeit erreicht ??
        {                           //
          Itmr_RES  =  0;           // Setze Timer vorsichtshalber zurück
          wdt_enable( 1);
        }                   // Ende if ( Itmr_RES ==
    //
    
    
    
    
    // ============================================================================= =
    //void wdt_init(void) __attribute__((naked)) __attribute__((section(".init1")));
    // ...
    // ENde timer-Funktion
    
    void wdt_init(void)
    {
    MCUSR = 0;
    wdt_disable();
    DDRA = (1<<PA0);
    PORTA &= ~(1<<PA0);
    
    return;
    }
    // ============================================================================= =
    Das funktionierte mit seltsamer Konsequenz: es lief EINMAL ab, stoppte nach dreissig Sekunden, seit der Zeit geht garnix mehr. Nur die Heartbeat-LED - hier üblich auf PC6 - ging auf halbe Kraft bzw. 90 Hz.

    Seltsam: Flashen - mit Verify - ist möglich, Fuses setzen und lesen ist möglich. Flashen eines früher sauber lauffähigen Programms ist möglich - aber die Funktion bleibt wie vorher: Heartbeat-LED auf halbe Kraft bzw. 90 Hz. Ansonsten läuft das früher sauber lauffähige Programm nicht :.-.((

    Frage: hat jemand von Euch einen ungefähren Tip was los ist?

    Danke im Voraus
    Ciao sagt der JoeamBerg

Ähnliche Themen

  1. watchdog hilfe
    Von leon20 im Forum C - Programmierung (GCC u.a.)
    Antworten: 7
    Letzter Beitrag: 31.07.2007, 23:01
  2. Atmega48 Watchdog
    Von Moritz f. im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 16.07.2006, 14:16
  3. Watchdog
    Von Lincolnmhkn im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 01.03.2005, 13:06
  4. [ERLEDIGT] Watchdog Assemblerprogramm
    Von Kenni im Forum Controller- und Roboterboards von Conrad.de
    Antworten: 1
    Letzter Beitrag: 24.07.2004, 21:50
  5. Watchdog?!
    Von djfoxi im Forum Robby CCRP5
    Antworten: 1
    Letzter Beitrag: 13.04.2004, 17:17

Stichworte

Berechtigungen

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

12V Akku bauen