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?
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!
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
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.
> 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)
die Pull ups am I2C bus sind quasi deativiert wenn die versorgung über die batterie stattfindet.
bastler schrieb: > if(fSleep) > { > PowerDown(); > Sleep(); > PowerUp(); > } Wie wird er wieder geweckt? Wie oft? Vielleicht schläft er zu kurz?
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.
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?
> 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.
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.
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.
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.
Verwendest Du einen Quarz, der eventuell während des sleep Modus weiter schwingt?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.