CPU Schlafenlegen?

Aug 09, 2006 25 Replies

Hallo,



Wie kann man einen 80C552 also ein 8051-Derivat eigentlich dazu bringen für einen Moment anzuhalten?



Die üblichen Programme sehen ja eher so aus.



Hauptprogamm:



  1. Timer initialisieren
  2. while(1);

Und darüber dann halt die Timerinterruptroutienen, welche die eigentliche Arbeit machen.



Aber so lange die nicht arbeiten läuft dann ja eine Endlosschlife while(1); Das verbraucht doch Strom. Kann man das irgendwie unterbinden? Ich habe nach der kompletten Mikroprozessortechnikvorlesung irgendwie das Gefühl, als hätte man uns etwas sehr wichtiges unterschlagen.


MfG,



Markus


Markus schrieb:

Über diesen uC speziell kann ich nichts sagen, aber i.A. haben uCs mehrere Sleep-Modi, die zum Stromsparen dienen und z.B. durch einen Interrupt beendet werden. Besorg Dir mal das Datenblatt des uCs und such nach Stichwörter wie "Idle Mode" oder "Power-down mode".

CU Christian

Christian Zietz - CHZ-Soft - czietz (at) gmx.net WWW: http://www.chzsoft.com.ar/ PGP/GnuPG-Key-ID: 0x6DA025CA

AFAIK haben die DRAM; wenn ja, dann w=E4r das ne bl=F6de Idee: Ohne Takt geht bei denen der Inhalt des DRAM verloren und es ist Essig mit der Fortsetzung des Programms.

Wolfgang Draxinger

--=20

Kann gehen, muss aber nicht. Nicht jeder uP/uC hat ein vollstatisches Design... Manche dürfen auf nur bei einem bestimmten Pegel angehalten werden (altes, aber legendäres Beispiel war der MC68040).

Es gibt 8051er (zB. die EZUSB von Cypress), die haben ein SFR (PCON.0) mit einem Idle-Bit. Das entspricht in etwa dem Sleep vom AVR, wartet also bis zum nächste Interrupt. Evtl. hat der Clone ja auch sowas... Findet sich typischerweise im Kaptitel "Powersaving Modes". Wenn es das nicht gibt, siehts schlecht aus...

Georg Acher, acher@in.tum.de http://www.lrr.in.tum.de/~acher "Oh no, not again !" The bowl of petunias

Natürlich kann man ihn zum anhalten bringen. Hier der auszug aus dem Datenblatt

In addition, the 80C552 has two software selectable modes of power reductionidle mode and power-down mode. The idle mode freezes the CPU while allowing the RAM, timers, serial ports, and interrupt system to continue functioning. The power-down mode saves the RAM contents but freezes the oscillator, causing all other chip functions to be inoperative.

MFG Gernot

"Christian Zietz"

Also im Datenblatt, was man bei Reichelt findet steht drin, dass der Prozessor Idle-Mode unterstützt und dann durch Interrupts wieder geweckt wird. Kannst du mir zufällig einen Tip geben, wie man den aktiviert?

MfG,

Markus

Bei den normalen 8051 geht es mit PCON|=IDL;

Deteils sollten im datenblatt stehen. Der prozessor wacht erst beim nächsten Interrupt oder reset wider auf. Also nicht vergessen einen freizugeben.

MFG Gernot

"Gernot Fink"

Tatsache...

/* BYTE Register */ sfr P0 = 0x80; sfr P1 = 0x90; sfr P2 = 0xA0; sfr P3 = 0xB0; sfr P4 = 0xC0; sfr P5 = 0xC4;

sfr PSW = 0xD0; sfr ACC = 0xE0; sfr B = 0xF0; sfr SP = 0x81; sfr DPL = 0x82; sfr DPH = 0x83; sfr PCON = 0x87; sfr TCON = 0x88;

Hast du ne Idee was für ein Typ IDL dann sein muss und was da an Inhalt drinstehen muss? Offensichtlich ist das ja genau ein Byte.

MfG,

Markus

"Wolfgang Draxinger" schrieb im Newsbeitrag news: snipped-for-privacy@darkstargames.dnsalias.net...

Noe.

Das schafft man selbst heute nicht, (flash)(E)EPROM und DRAM kosteneffektiv auf einen Chip zu bekommen, hinzu ist der 80C552 ein so steinaltes Modell, da konnte der Chiphersteller noch nicht mal EEPROM, nur Maske oder EPROM.

Manfred Winterhoff, reply-to invalid, use mawin at gmx dot net homepage: http://www.geocities.com/mwinterhoff/ de.sci.electronics FAQ: http://dse-faq.elektronik-kompendium.de/ Read 'Art of Electronics' Horowitz/Hill before you ask. Lese 'Hohe Schule der Elektronik 1+2' bevor du fragst.

"Guido Grohmann" schrieb im Newsbeitrag

Das geht nur bei bestimmten MCs, welche statisch arbeiten, also wo die Angabe der Taktfrequenz im Datenblatt als Bsp. von 0 - 40MHz liegt. Viele 8051er arbeiten dynamisch und brauchen eine Mindestfrequenz, meist einige 100kHz.

Grund ist, das Chipintern aus dem Taktsignal oft weitere notwendige Spannungen (Pos./Neg.) zur Versorgung bestimmter Funktionsgruppen, Bsp. Substratvorspannungen gewonnen werden.

Benutze wie schon gesagt den Idle- oder Powerdown-Mode, wobei Du darauf achten solltest, wie in diesen Fall die Port-Pins beeinflußt werden, Datenblatt!

Wenn Du 0uA Stromverbrauch brauchst, dann schalte den ganzen Schaltungsteil incl. MC hardwaremäßig ab, dafür reichen einfache FF-Schaltungen aus.

Gruß Max

[irrellevante Sachen]

Bits von PCON:

8:SMOD 7:PDS 6:IDLS 5:- 4,3:GF1,0 2:PDE 1:IDLE
Johannes You can have it: Quick, Accurate, Inexpensive. Pick two.

"John F"

Cool. Danke (an alle natürlich). Werde ich gleich direkt mal ausprobieren, was das bringt.

MfG,

Markus

Markus schrieb:

Mel eine Dumme Idee: Wenn der Takt extern zugef=FChrt wird, diesen einfac= h=20 abknipsen?

GUido

OK, da geb ich dir recht.

Guido

Also muss man das niederwertigste Bit ändern schätz ich mal.

Vorsicht: Auch bei voll-statischen Controllern geht das nicht "einfach" mit einem AND-Gatter oder so. Das abschalten und einschalten muss schon mit dem Takt synchronisiert sein, sonst schneidet man evtl. gerade 'ne halbe Nanosekunde von der nächsten Taktflanke an, und hat 'nen tollen Glitch produziert.

Mal ins Datenblatt gucken.. da ist neben der Frequenz normalerweise auch das einzuhaltende Taktverhältnis, bzw. die kürzeste erlaubte Impulszeit angegeben.

thomas.kindler@gmx.de, www.bredobrothers.de www.microsoft-hellhounds.de

Bingo! 1=idle daher IDL=0x01;

Johannes You can have it: Quick, Accurate, Inexpensive. Pick two.

Ist

PCON|=IDL;

eigentlich _exakt_ das gleiche wie

PCON = PCON & IDL; ?

mit IDL=1;

MfG,

Markus

Nein. Du kennst den Unterschied zwischen UND und ODER?

Variable &= BITMASK läßt die Bits, die in BITMASK gesetzt sind unverändert, die anderen werden gelöscht. Variable |= BITMASK läßt die Bits, die in BITMASK nicht gesetzt sind unverändert, die anderen werden gesetzt.

Übliche Phrasen zum Bit setzen und wieder löschen sind Variable |= BITMASK und Variable &= ~BITMASK.

Gruß Henning

Zudenm was mein vorposter schon schrieb gibt es für |= einen assemblerbefehl der im gegensatz zur obigen kontruktion interruptfest ist:

orl pcon,idl

MFG Gernot

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required