CPU Schlafenlegen?

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

Reply to
Markus
Loading thread data ...

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
Reply to
Christian Zietz

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

Reply to
Wolfgang Draxinger

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
Reply to
Georg Acher

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
Reply to
Gernot Fink

"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

Reply to
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
Reply to
Gernot Fink

"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

Reply to
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.
Reply to
MaWin

"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

Reply to
Max Karlich

[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.
Reply to
John F

"John F"

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

MfG,

Markus

Reply to
Markus

Markus schrieb:

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

GUido

Reply to
Guido Grohmann

OK, da geb ich dir recht.

Guido

Reply to
Guido Grohmann

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

Reply to
Markus

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
Reply to
Thomas Kindler

Bingo! 1=idle daher IDL=0x01;

--
Johannes
You can have it:
Quick, Accurate, Inexpensive.
Pick two.
Reply to
John F

Ist

PCON|=IDL;

eigentlich _exakt_ das gleiche wie

PCON = PCON & IDL; ?

mit IDL=1;

MfG,

Markus

Reply to
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

Reply to
Henning Paul

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
Reply to
Gernot Fink

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.