Forum: Mikrocontroller und Digitale Elektronik PIC Problem nach Sleep (Variablen zurückgesetzt)


von Rene I. (reneibald)


Lesenswert?

Hallo zusammen,

bin bin schon seit Stunden am verzweifeln, weil ich einfach nicht 
schnalle.

Habe einen PIC 16F1827 und kann diesen auch schon in den Sleep-Modus 
setzen. Das Problem ist, dass er, wenn er per WatchDogTimer aufwacht 
(und das möchte ich zu haben) meine vorher definierten Variablen neu 
initalisiert.

Anbei das Beispiel:
1
init fistsetting = 0;
2
3
void main(void) {
4
INTCONbits.GIE=0b0; //disable global interrupt
5
if(firstsetting==0)
6
{
7
    initChannels();
8
    firstsetting =1;
9
}
10
    while (1) {
11
        if(checkAlarmState(checkChannels())==1)
12
        {
13
            SLEEP();
14
        }
15
        NOP();
16
    }
17
}

Meine Funktion initChannels() soll nur 1 mal aufgerufen werden, was ich 
mit der Prüfung der Variable firstsetting abfragen will.

Wenn ich nun aber mit dem Debugger (MPLAPX) durch das Programm gehe, 
dass wird nach dem Sleep die Variable wieder auf Ausgangswert 
zurückgesetzt.

Hat jemand eine Ahnung, woran das liegen kann?!
Habe auch schon das Internet durchforstet, jedoch hat bis jetzt nichts 
geholfen.

Vielen Dank schonmal im Vorraus

von Peter D. (peda)


Lesenswert?

Rene Ibald schrieb:
> Das Problem ist, dass er, wenn er per WatchDogTimer aufwacht
> (und das möchte ich zu haben) meine vorher definierten Variablen neu
> initalisiert.

Der Watchdog wird wohl ein Reset machen, wie vorgesehen.
Irgendwie muß man einstellen, daß der Watchdog kein Reset machen soll.


Peter

von Jens M. (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Der Watchdog wird wohl ein Reset machen, wie vorgesehen.
> Irgendwie muß man einstellen, daß der Watchdog kein Reset machen soll.


Datenblatt 10.5 S. 98
When a WDT time-out occurs while the device is in
Sleep, no Reset is generated. Instead, the device
wakes up and resumes operation. The TO and PD bits
in the STATUS register are changed to indicate the
event. WDTE<1:0> SWDTEN See Register 3-1 for more informati

Sieht eher so aus das der WDT an einer anderen Stelle ausgelöst wird, 
würde ich mal nach sleep ausschalten.

Errata sheet gelesen?

Punkt 9.1 S.8

9. Module: BOR
9.1 BOR Reset
This issue affects only the PIC16LF1826/1827
devices. The device may undergo a BOR Reset
when waking-up from Sleep and BOR is reenabled.
A BOR Reset may also occur the
moment the software BOR is enabled.
Under certain voltage and temperature conditions
and when either SBODEN or BOR_NSLEEP is
selected, the devices may occasionally reset when
waking-up from Sleep or BOR is enabled.
Work around
Method 1: In applications where BOR use is
not critical, turn off the BOR in the
Configuration Word

von Peter D. (peda)


Lesenswert?

Jens Martin schrieb:
> Sieht eher so aus das der WDT an einer anderen Stelle ausgelöst wird,

Ist sogar sicher so, er wird ja nirgends zurück gesetzt.

Peter

von Rene I. (reneibald)


Lesenswert?

Hallo zusammen,

erstmal vielen Dank für die schnellen Antworten. Habe in der 
Zwischenzeit mal das BOR disabled, dabei hat sich das Programm 
(zumindest MPLABX) nach dem Sleep aufgehängt.

Der WDTtimer müsste sich, wenn ich das Datenblatt richtig gelesen haben, 
beim Eintritt in den Sleep mode wie auch beim Verlassen zurücksetzen. 
Funktioniert auch, das Programm wird periodisch ausgeführt, nur halt 
wieder von neu.

Schaue jetzt nochmal nach dem BOR und hoffe darin die Lösung zu finden.

Beste Grüße

von Jens M. (Gast)


Lesenswert?

Rene Ibald schrieb:
> Schaue jetzt nochmal nach dem BOR und hoffe darin die Lösung zu finden.

Bevor hier ne falsche Fährte entsteht, das gilt nur bis Revision A5 (ein 
neuer PIC wird das nicht mehr haben).

Schalte den WDT vor dem Sleep ein und nach dem Sleep aus und schau was 
dann passiert.

von Rene I. (reneibald)


Lesenswert?

So, hier das Ergebnis:

Debugging nicht möglich, wenn BOREN != ON.
WDT per Software vor Sleep anschalten und nach Sleep später ausschalten 
funktioniert nicht, führt wieder den Reset aus.

Für mich heißt das jetzt, da ich auch schon genug Zeit verschwendet 
habe, Controller wechseln.

Vielen Dank für die Mithilfe und noch einen schönen Sonntag

von Holger W. (holgerw)


Lesenswert?

Tritt das Problem nur im Debugger/Simulator auf oder auch wenn der PIC 
direkt läuft ?

Holger

von Rene I. (reneibald)


Lesenswert?

Hallo zusammen,

habe nun jetzt den Fehler gefunden.
MPLABx mit ICD3 kann nicht im Sleep debuggen, bzw. man darf nicht in die 
Sleepfunktion reinspringen.

Aus dem Manual
To step through your code, select either Debug>Step Into or Step Into 
from the
Debug toolbar. Be careful not to step into a Sleep instruction or you 
will have to
perform a processor Reset to resume emulation.

Wieder um eine Erkenntnis schlauer, mensch, die Zeit hätte man sich auch 
sparen können, aber so ist das halt.

Nochmals Danke an alle.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.