Forum: Mikrocontroller und Digitale Elektronik Zeit messen im Sleep


von Martin S. (drunkenmunky)


Lesenswert?

Hallo,
ich verwende einen PIC12F1822 mit internem Takt. Ich wache mit Hilfe des 
WDT jede Sekunde auf. Alle 20 Sekunden will ich etwas zusätliches 
ausführen. Wie mache ich das am besten?

Soll ich mit einer Variable zählen, wie oft er aufgewacht ist?

von counter (Gast)


Lesenswert?

klingt doch gut.

von Martin S. (drunkenmunky)


Lesenswert?

Ist leider nur nicht sehr genau.

Laut Datenblatt sind es z.B. 2s und ich messe 2,26s.
Aber da wird man nicht viel machen können, oder?

von Timmo H. (masterfx)


Lesenswert?

"The Low-Frequency Internal Oscillator (LFINTOSC) is
an uncalibrated 31 kHz internal clock source"
Allzu hohe Genauigkeit kann man also nicht erwarten

von Peter D. (peda)


Lesenswert?

Martin S. schrieb:
> Ist leider nur nicht sehr genau.

Für Genauigkeit brauchst Du einen Quarz.

Viele MCs gestatten den Anschluß eines Uhrenquarz (32kHz) an einen 
Timer.
Wird der CPU-Takt abgeschaltet, ist der Strombedarf <1µA.


Peter

von usuru (Gast)


Lesenswert?

Du kannst einen 32.768 Quarz an den timer1 anschliessen, der läuft auch 
im Sleep weiter und weckt den µC beim Überlauf auf (die 
interrupt-enable-flags müssen hierzu gesetzt sein, auch wenn Du keinen 
Interrupt willst, sondern den µC nur aufwecken willst)

von Alexander S. (esko) Benutzerseite


Lesenswert?

Martin S. schrieb:
> Hallo,
> ich verwende einen PIC12F1822 mit internem Takt. Ich wache mit Hilfe des
> WDT jede Sekunde auf. Alle 20 Sekunden will ich etwas zusätliches
> ausführen. Wie mache ich das am besten?

Das wird ungenau. Wenn du 20ms schläfst und dann eine etwas ausführst, 
unterschlägst du die Zeit, um diese Aufgabe zu bearbeiten, da dauert ja 
auch >100µs.
Mehr zum Thema AVR - Die genaue Sekunde / RTC

von usuru (Gast)


Lesenswert?

> Mehr zum Thema AVR - Die genaue Sekunde / RTC

er keinen AVR sondern einen PIC, da laufen die Timer anders

von Martin S. (drunkenmunky)


Lesenswert?

danke für die Antworten.

klar die Programmablaufzeit verfälscht es noch zusätzlich. Aber diese 
ist bestimmt < 1ms, so dass es nicht gravierend ist.

Bei dieser Anwendung muss es nicht sehr genau sein. Also leb ich damit.

Jetzt weiß ich zumindest, wie ich es machen muß, wenn ich es genauer 
haben will.
Danke

von usuru (Gast)


Lesenswert?

wenn Du genau 1 sec haben willt, dann nimm einen 32768-Quarz an den 
timer1, stell den Prescaler für den timer1 auf 1:2 und lass den timer1 
frei durchlaufen ohne die Timer-Register zu setzen, das sind dann 32768 
x 2 / 65536 = 1 sec ... Der PIC wacht dann genau alle 1 sec auf

von Thomas E. (thomase)


Lesenswert?

Alexander Schmidt schrieb:
> unterschlägst du die Zeit, um diese Aufgabe zu bearbeiten, da dauert ja
>
> auch >100µs.

Quatsch!

Der Timer läuft in dieser weiter.

mfg.

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.