Hallo zusammen,
ich arbeite derzeit mit dem Yakindu Statechart Tool und soll ein
Programm auf einem Arduino umsetzen.
Innerhalb des Programms soll ich den WDT nutzen um alle X Sekunden ein
Interrupt auszulösen, solange keine andere Transition innerhalb des
Statecharts aktiviert wird.
Dabei habe ich folgendes Problem:
Wenn Event XY kommt rufe ich eine Funktion auf reset_WDT(). Innerhalb
dieser Funktion möchte ich nur den Wert innerhalb des WDTs zurücksetzen.
Er soll ganz normal weiterlaufen.
Also:
1. Funktion wird aufgerufen
2. WDT wird angehalten
3. WDT wird zurückgesetzt
4. WDT wieder im Interrupt Mode mit einer Zeit von 8s starten
Der Code sieht derzeit so aus:
1 |
|
2 | #include "Arduino.h"
|
3 | #include <avr/wdt.h>
|
4 |
|
5 | void resetWatchdog(){
|
6 | WDTCSR |= (1<<WDCE) | (1<<WDE); // Configuration Mode
|
7 | WDTCSR = (0<<WDIE)
|
8 | | (0<<WDE) // Stop WDT
|
9 | | (1<<WDP3)
|
10 | | (0<<WDP2)
|
11 | | (0<<WDP1)
|
12 | | (1<<WDP0); // Einstellung der Zeit sind hier egal
|
13 |
|
14 | wdt_reset(); // Reset des WDT?
|
15 |
|
16 | WDTCSR |= (1<<WDCE) | (1<<WDE); // Configuration Mode
|
17 | WDTCSR = (1<<WDIE)
|
18 | | (0<<WDE) // Interrupt Mode (WDIE = 1, WDE = 0)
|
19 | | (1<<WDP3)
|
20 | | (0<<WDP2)
|
21 | | (0<<WDP1)
|
22 | | (1<<WDP0); // Interrupt every 8 seconds*/
|
23 | }
|
Das funktioniert leider nicht...
Gibt es eine Möglichkeit den Wert innerhalb des WDT Registers zu
manipulieren/ändern? Oder generell auszulesen? Ich habe in der Register
Summary des Atmegas 328p auch kein Register gefunden, in dem der Wert
gespeichert wird (muss er aber ja irgendwo...)... Ich habe das nur für
die normalen Timer gefunden.
Hat einer eine Idee?
Viele Grüße,
Robin