Forum: Mikrocontroller und Digitale Elektronik ARM7 - Spart Powercontrol wirklich Power


von Martin (Gast)


Lesenswert?

Hallo Leute!

Ich benutze den LPC2138 von Philips.
Es gibt beim LPC das PCONP-Register, womit man einzelne Einheiten, wenn
sie nicht benötigt werden, abschalten kann um Strom zu sparen.

Hierfür habe ich einige Funktionen entwickelt, die sich in einem
separaten File befinden.
Die Idee die dahintersteckt - Strom sparen bei maximaler
Geschwindigkeit und nur jene Einheiten einschalten, die man auch
wirklich benötigt.

In den ersten Zeile von Main wird eine Funktion aufgerufen, die den
Namen "power_off();" trägt.
Diese Funktion macht nichts anderes als PCONP=0;
Somit sind alle Einheiten deaktiviert.
Darunter befinden sich einzelne Initialisierungsroutinen, z.B. UART
oder Timer.
Diese Routinen sind so programmiert, dass sie das richtige
Power-Control-Bit wieder einschalten, damit die ensprechende Einheit
korrekt arbeiten kann.

Zusätzlich messe ich mit einem Ampere-Meter, den Strom, der vom
µC-Board aufgenommen wird.

Das Witzige ist, dass es passieren kann, dass in bestimmten
Befehlskonstellationen der Stromverbrauch überhaupt nicht geringer
wird, die entsprechenden Einheiten aber abgeschaltet sind. Dies kann
man dadurch erkennen, indem man das PCON-Register abfragt.

Mit Befehlskonstellationen ist gemeint.
Wenn ich die Funktion:
power_off();
verwende, dann bleibt der Gesamtstrom auf 124mA.
Der Stromverbrauch ist in diesem Fall so hoch, als wenn ich gar
keine Einheit abgeschaltet hätte.

Wenn ich diese Funktion, wo nichts anderes drinnen steht als PCONP=0;
ersetze durch PCONP=0;

void main(void)
{
//power_off();
PCONP=0;
..
..
}

,dann benötigt der Prozessor plötzlich nur noch 113mA.

Leider verstehe ich jetzt garnichts mehr.

Gibt es irgendeinen Trick oder etwas Spezielles, dass man beachten
sollte?

Danke für euren Rat.

Gruß, Martin

von Dietmar (Gast)


Lesenswert?

@Martin:

Genau so mache ich es auch:

Am Anfang: PCONP = 0;

Dann je nach initialisierter Peripherie:

Für Timer0: PCONP |= (0x01 << 4);

Für Timer1: PCONP |= (0x01 << 5);

Verwende zur Zeit LPC2129 und LPC2138. Habe sporadisch mal gemessen,
und einen geringeren Strom festgestellt.

Ich werde das jetzt jedoch mal weiter im Auge behalten.

Sonst macht das PCONP Register sicher keinen Sinn.

Übrigens: Was hast du für ne Hardware? Auf mehr als 80 mA sind wir bei
cclk 60 MHz und pclk 60 MHz nie gekommen.

Gruß

Dietmar

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.