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