Hallo Habe mir aus dem Datenblatt des Attiny 841 die Einstellungen für den Watchdog rausgesucht. Das Programm sieht so aus:
1 | #define F_CPU 16000000UL // Angabe der Frequenz, wichtig für die Zeit
|
2 | #include <util/delay.h> // Einbindung Datei Pause |
3 | #include <avr/io.h> // Einbindung Datei Ausgänge |
4 | #include "avr/wdt.h" // Einbindung Watchdog Bibliothek, vereinfacht WDT |
5 | #include "avr/interrupt.h" |
6 | |
7 | void watchdogSetup() // Einrichtung Watchdog |
8 | {
|
9 | wdt_reset(); // führt Watchdog Reset durch vor Ablauf der Zeit |
10 | WDTCSR |= (0<<WDP3)|(0<<WDP2)|(1<<WDP1)|(1<<WDP0); // 0,125ms |
11 | WDTCSR |= (1 <<WDIE)|(0<<WDE); // Aktivierung Watchdog Interrups nicht Reset |
12 | // WDTCSR - Register des Watchdog
|
13 | // WDIF - Watchdog Interuptflag
|
14 | // WDIE - Watchdog Interrupt Enable - ist Bit gesetzt dann löst Time-Out Interrupt aus mit Tabelle
|
15 | // WDE - ist Bit gesetzt dann löst Time-Out ein Reset aus mit Tabelle
|
16 | // WDP0, WDP1, WDP2, WDP3 Einstellung Zeit gemäss Tabelle
|
17 | }
|
18 | |
19 | ISR(WDT_vect) |
20 | {
|
21 | PORTA ^= (1<<PINA5); // toggelt LED 2 |
22 | WDTCSR |= (1<<WDIE); |
23 | }
|
24 | |
25 | int main(void) |
26 | {
|
27 | watchdogSetup(); |
28 | DDRA=0b00101001; // DDR A auf Ausgang schalten |
29 | PORTA=0b00101001; // Port A auf aus |
30 | while(1) // Programmschleife |
31 | {
|
32 | PORTA &=~(1<<PINA0); // LED 3 ein |
33 | _delay_ms(1500); // Pause |
34 | |
35 | PORTA |=(1<<PINA0); // LED 3 aus |
36 | _delay_ms(1500); // Pause |
37 | }
|
38 | }
|
Mit der LED3 soll das blinken angezeigt werden. Mit der LED2 soll der Watchdog angezeigt werden. Das macht er aber nicht. Auch wenn ich die Zeiten des Blinken grösser mache kommt keine Anzeige. Hab ich da einen Denkfehler?