Forum: Mikrocontroller und Digitale Elektronik Strom im sleep Modus zu hoch


von bastler (Gast)


Lesenswert?

hallo,

ich möchter gerne meinen PIC18F schlafen legen um strom zu sparen. die 
Sleep Funktion habe ich bereits entdeckt und ich bin auch der Meinung 
das der Pic auch da rain läuft, allerdings messer ich immer noch einen 
strom von 6,9mA, was deutlich zu hoch ist. Bevor der Pic in den Sleep 
Modus geht, schalte ich in einer Funktion den Timer, Zähler, Serielle 
Schnittstelle ab. Sonst sind an der Batteriespannung keine Verbraucher 
angeschlossen, es muss also am Pic liegen.

Hat jemand eine idee und erfahrung mit sowas?

von Tom M. (tomm) Benutzerseite


Lesenswert?

bastler schrieb:
> ich bin auch der Meinung
> das der Pic auch da rain läuft

Zeig uns bzw. den PIC Kennern doch mal Initialisierung und Aktivierung 
des sleep mode, wie du sie verwendest!

von Der (Gast)


Lesenswert?

Wie sind die unbenutzten Eingänge konfiguriert?

von Purzel (Gast)


Lesenswert?

Externe Pullups ? Programmer ? Spannungsregler ?
Schema?

von bastler (Gast)


Lesenswert?

muss man den sleep modus initialisieren?

also es handelt sich um einen Pic der zum einen über ein netzteil und 
zum anderen über eine batterie versorgt werden kann, wenn kein netzteil 
vorhanden ist. wird der pic über die batterie versorgt, dann soll er in 
den sleepmodus wechseln und sonst nichts machen außer die RTC am laufen 
zu halten, das wenn man das netzteil wieder einschaltet man die uhrzeit 
nicht neu starten muss. dafür verwende ich die high/low voltage 
detection, um eben zu erkennen wenn das netzteil ausfällt. netzteil hat 
5V, batterie 3,6V.

wird nun die 3,6V erkannt, dann löst der low voltage detection interrupt 
aus, was auch funktioniert, dabei wird dann eine Variable gesetzt. in 
der while(1) Schleife befindet sich nun eine If abfrage bei der geschaut 
wird ob diese Variable gesetzt ist. ist sie gesetzt dann geht das 
Programm in die If bedingung hinein, wobei zunächst die beschriebenen 
komponenten deativiert werden und anschließend die Sleep Funktion 
aufgerufen wird.

if(fSleep)
{
     PowerDown();
     Sleep();
     PowerUp();
}


Der Pic besitzt eigentlich nur Eingänge, dieser Muss nichts ausgeben und 
deswegen hab ich auch keine ausgänge konfiguriert, außer eine Serielle 
Schnittstelle. und ein I2C Bus ist auch noch vorhanden

von bitte löschen (Gast)


Lesenswert?

Ich kenne mich ja mit PICs nicht aus, aber bei AVRs ist das so, dass 
frei hängende Pins, als Eingänge ohne Pullup gesetzt, die 
Eingangsbeschaltung unnötig viel Strom ziehen lassen. - Ich könnte mir 
vorstellen, dass das bei PICs ähnlich ist.

von tt2t (Gast)


Lesenswert?

> und ein I2C Bus ist auch noch vorhanden

I2C-Bus  -->  Pullup-Widerstände, die brauchen ziemlich viel (mit 
weniger läuft aber u.U. der I2C-Bus nicht mehr sauber)

von bastler (Gast)


Lesenswert?

die Pull ups am I2C bus sind quasi deativiert wenn die versorgung über 
die batterie stattfindet.

von Steffen (Gast)


Lesenswert?

bastler schrieb:
> if(fSleep)
> {
>      PowerDown();
>      Sleep();
>      PowerUp();
> }
Wie wird er wieder geweckt? Wie oft? Vielleicht schläft er zu kurz?

von bastler (Gast)


Lesenswert?

er wird geweckt wenn wieder der interrupt auslöst, dass die 
versorgungsspannung wieder höher ist, also wenn das netzteil wieder 
eingeschaltet ist.

so erster fehler entdeckt, jetzt verbraucht er im sleep modus nur noch 
170µA. leider war es ein messfehler, hab ein strommessgerät in reihe 
zwischen batterie und pic versorgung und hatte es auf einen bereich von 
20mA und da werden mir dann 7,2mA angezeigt, wenn ich den messbereich am 
messgerät kleiner mach, also auf 2000µA, dann werden mir die 170µA 
angezeigt.

von bastler (Gast)


Lesenswert?

hab jetzte alle Ports als Ausgänge, Zähler und Timer deativiert, ADC 
deaktiviert, Serielle Schnittstelle deaktiviert und die Pull up 
deaktiviert. hab aber immer noch einen Stromverbrauch von 73µA, gibt es 
noch weiterer Sparmaßnahmen?

von tt2t (Gast)


Lesenswert?

> so erster fehler entdeckt, jetzt verbraucht er im sleep modus nur noch
> 170µA. leider war es ein messfehler, hab ein strommessgerät in reihe
> zwischen batterie und pic versorgung und hatte es auf einen bereich von
> 20mA und da werden mir dann 7,2mA angezeigt, wenn ich den messbereich am
> messgerät kleiner mach, also auf 2000µA, dann werden mir die 170µA
> angezeigt.

Innenwiderstand Deines Messgerätes zu hoch -> zu hoher Spannungsabfall

http://www.eevblog.com/projects/ucurrent/
http://www.youtube.com/watch?v=i069j6S80OU

Kann man auch leicht selber nachbauen.

von bitte löschen (Gast)


Lesenswert?

bastler schrieb:
> hab aber immer noch einen Stromverbrauch von 73µA, gibt es
> noch weiterer Sparmaßnahmen?

Ich habe gerade mal nach einem Datenblatt geschaut und einen Blick rein 
geworfen. Wie auch bei AVRs spart es eine Menge Strom, wenn man auf 
Brown-out Erkennung verzichtet. Das hängt (zumindest beim PIC18FXX2) 
wohl auch noch mit der Low-Voltage Erkennung zusammen.

von bastler (Gast)


Lesenswert?

also der PIC zieht immer noch 71µA. ist das noch normal oder was kann 
ich noch machen?

also die 71µA verbraucht er im Sleep Mode, zumindest zeigt mir das mein 
Multimeter an.

von (prx) A. K. (prx)


Lesenswert?

Philipp K. schrieb:
> Ich kenne mich ja mit PICs nicht aus, aber bei AVRs ist das so, dass
> frei hängende Pins, als Eingänge ohne Pullup gesetzt, die
> Eingangsbeschaltung unnötig viel Strom ziehen lassen.

Sollte bei AVRs eigentlich nicht so sein, da unbenutzte Eingänge im 
Sleep-Modus per Schalter vom Pin abgetrennt und auf GND gezogen werden.

von Stefan (Gast)


Lesenswert?

Verwendest Du einen Quarz, der eventuell während des sleep Modus weiter 
schwingt?

von bastler (Gast)


Lesenswert?

ja ich verwende einen externen Quarz. wie kann man diesen abschalten?

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.