www.mikrocontroller.net

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


Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dietmar (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.