Bitte um Hilfe zu meinem Watchdog-Reset. Ich habe bisher keine funktionierende Erfahrung mit Watchdog, die paar Anleitungen haben bisher nicht geholfen - zum Beispiel forumswissen oder dies hier.

Umgebung: mega1284P auf RNControl, 20 MHz, AVRStudio4, Programmer Pololu USB AVR Programmer, Labornetzteil, etliche Peripherie - andere Platinen über UART und I²C - die aber im Test alle abgeklemmt sind ausser UART und LCD auf PortB.

Der Watchdog wird durch avr/wdt.h eingebunden und als erste ausführbare Codezeile im main disabled. Auslösung durch ein Dreierpaket RC-5-Code aus (IR-FB-) Tastencode "0","0","0".

Codeauszüge:
Code:
//...                                
//
  #include <stdlib.h>           //
  #include <avr/io.h>           //
  #include <avr/interrupt.h>    //
  #include <avr/wdt.h>         //
// - - - - - - - - - - - - - - - -
//      CPU wird NICHT definiert im AVRStudio Current Configuration Options
//              wird ab hier von twimaster*.c u. evtl. anderen Libs benötigt
  #define F_CPU     20e6// 
============================================================================= =
// ===  HAUPTProgramm ========================================================== =
// Initialisierungen, LED1 kurzblinken als Signal für Programmstart,
//   Ausgabe des Identifizierungsstrings per UART
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 int main(void)                 //
 {                              //
  uint8_t i;                    //
  uint16_t   ADC_ist;           //
  uint16_t l    = 500;          // Laufvariable für ADC-Abschaltung unten
....
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Anmerkung: bishier nur Includes, Defines, Deklaratonen und Definitionen
  wdt_disable();        //
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Ports+Pins als Ein- (0) od. Ausgänge (1) konfigurieren, Pull Ups (1) aktivieren
//      A = Ausgang, E = Eingang ohne , EU = Eingang MIT PullUp
// - - - - - - - - - - - - - - - -
  DDRA  = 0b00000000;   // siehe aktuell oben oder Fortschritt/R2D2
  PORTA = 0b00010000;   // Für ADC: PA6+PA7 = ADC-Eingang ##>> OHNE Pullup !!
                        //
  DDRB  = 0b11111011;   // siehe aktuell oben
  PORTB = 0b01000000;   //    L1g on
                        //
  DDRC  = 0b11101100;   // PC0 .. 7 (!) aktiv bei mega1284 !, PC0=SCL, PC1=SDA
  PORTC = 0b11110000;   //   PC4 ist Eingang für RC-5 (war PB2)
                        // 
  DDRD  = 0b11111111;   // -> siehe unter DDRB
  PORTD = 0b00000000;   //    Ports/Pull Ups (1) aktivieren
                        //
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//for(i=0; i<10; i++)   // gLED2(PB5) blinken lassen bevor Interrupts erlaubt sind
Und so wird irgendwann durch Eingabe per RC-5 -- drei Bytes der Zifferntaste "0" -- der Watchdog ausgelöst:
Code:
  if ( iBB16 == 0 )              // bei "000" WatchdogReset auslösen
  {                             //
//  #include <avr/wdt.h>
    cli();                     // Interrupts global abschalten
    wdt_enable (WDTO_15MS);    // Watchdog aufziehen auf 15ms
    while (1);                 // warten, bis er zubeisst...
  }
Meine Programmierung basiert auf diesem Code aus dem RNW issen.

Der Betrieb des Programms läuft in einer zufälligen Testsequenz - verschiedene Aktionen und Ausgaben - sinnvoll. Der Watchdog wird wunschgemäß ausgelöst, nachdem der oben genannte Code "000" eingegeben und erkannt wurde. Danach läuft der Controller/die Platine nicht mehr (sinnvoll). Es dämmert nur eine LED vor sich hin. Drücken des /RESETknopfes oder [Read Signature] im AVR-Studio hilft nicht. Programmieren/Flashen ist nicht mehr möglich. Ein Wiederstart ist nur möglich durch Abklemmen des UART (RxD/TxD auf PD0 und PD1 über den Pololu-Programmer) und Abschalten der allgemeinen Versorgung.

Bitte um Hilfe und danke im Voraus.