Watchdog mit Interrupt

OP #767917
Lesenswert?

Hallo!

Ich habe einen ATmega48 und möchte, dass der Watchdog einen Interrupt 
auslöst.
1
#include <avr/interrupt.h>
2
#include <avr/wdt.h>
3
#ifndef F_CPU
4
#warning "F_CPU war noch nicht definiert!"
5
#define F_CPU 8000000UL
6
#endif
7
#include <myfunc.h>
8

9
ISR(WDT_vect)
10
{
11
  //Watchdog Interrupt
12
  LED(1);
13
  _delay_ms(20);
14
}
15

16
int main( void )
17
{
18

19
  //*****************************************
20
  //  Ports initialisieren
21
  //*****************************************
22
  DDRB  = 0b00010111;
23
  PORTB  = 0b11101101;
24

25
  DIDR0  = 0b00001111;
26
  DDRC  = 0b00110000;
27
  PORTC  = 0b00110000;
28

29
  DDRD  = 0b11111111;
30
  PORTD  = 0b00010000;
31
  //*****************************************
32

33
  WDTCSR |= (1 << WDIE) | (1 << WDCE) | (1 << WDP2);
34
  sei();
35

36
  while( 1 )        // Hauptprogramm
37
  {
38

39
    PORTB |= (1 << PB0);    //LED Aus (wird mit eins ausgeschaltet)
40
    long_delay(1000);    //Absichtlich damit der Watchdog anspringt
41
  }
42
  return 0;
43
}

Das Problem scheint mir, dass die Einstellungen, welche ich vornehmen 
möchte nicht übernommen werden. (Ich sehe alle 16 ms was ja der 
Standardwert des WD ist einen Peak am Oszi --> ich denke der WD macht 
ein Reset)

Was habe ich falsch gemacht um nur die Interrupts auszulösen?
Gibt es in der avr-libc nur den "Resetmodus" oder habe ich da was 
übersehen?

Danke Norton

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren