PIC16F737 ungültige Timeout von WDT when uC im SLEEP

OP #3404241
Lesenswert?

Hallo Kollegen,

seit drei Tage kämpfe ich mit dem folgenden Problem:

ich möchte dass mein System von Sleep durch WDT aufgeweckt wird, jede 
ca. 1 Minute.
Diesbezüglich habe ich den Vorteiler und Nachteiler auf 1:64 gesetzt, 
dann den Vorteiler von TMR0 für WDT zugeordnet:

...
// set WDT
WDTCON      = 0x02;   // WDT Postscaler=1:64, WDT OFF
OPTION_REG  = 0xA6;   // prescaler assigned to timer0, prescaler=1:64
TMR0        = 0x00;
OPTION_REG  = OPTION_REG | 0x08; // assign prescaler to WDT
CLRWDT();
....

Danach, später im Kode setze ich das System in SLEEP:

...
SWDTEN      = 0x01; // enable watchdog timer (to wakeup every 1minute)
RB4         = 0x00; // DEBUG only!
SLEEP();            // system low power mode enabled
NOP();
SWDTEN      = 0x00;
RB4         = 0x01; // DEBUG only!
....

Wenn ich mit meinem (analogen) Oszi nachmesse wie lange ist RB4 auf 0, 
dann bekomme ich immer ein Wert ~100ms.
Es heisst, der WDT wacht das System immer nach ca. 100ms auf. Die ganze 
ist dann in eine Schleife.

Ich frage mich was ich falsch machen kann...

Euch, bedanke ich mich schon für eure Antworten/Hilfe.

Grüße,
Sebastian.
Gast #3404453
Lesenswert?

stimmt, aber nur wenn du nicht das WDCON verànderst.
32 uS * 512 = 16.384 mS , 32uS ist der 31.5 khz Ringoszillator und
512 ist der Default postscaler von WDCON.
Wenn man nun 1 Minute braucht, dann muss man einen postscaler von 2^15
nehmen, also der Wert dezimal 10 im WDCON, dann hat man mit dem
prescaler vom Optionregister (/64) ein Timeout von 67.1 Sekunden.

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