erstellt 04.02.2011 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Strom
sparen - Sleep Modus |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Um beim
Einsatz von Mikroprozessoren Strom zu sparen , in der Hauptsache wenn
man gedenkt die Schaltung mit einer Batterie zu speisen, gibt es einige
sehr nützliche Hilfsmaßnahmen die z. Teil sogar schon vom Prozessor bereitgestellt werden. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Eine der Möglichkeiten beim
Atmega 8 und auch beim Atmega 32 , und wohl auch bei einigen anderen
ist
der sogenannte Sleep-Modus ( Schlaf-Option). Beim Sleep-Modus hat man die Möglichkeit Teile des Prozessors außer Funktion zu setzen wenn man sie nicht oder momentan nicht benötigt um sie bei Bedarf wieder zu aktivieren. Der Atmega besteht in seinem Innern aus einer Vielzahl separater Funktionsblöcke, wie z.B. Timer, Schnittstellentreiber , A-D Wandler, Watchdog und vieles mehr. Wenn z.B. in der betreffenden Schaltung nicht alle Funktionsblöcke gebraucht werden, lassen sie sich abschalten und senken so den Stromverbrauch. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Abschalten lassen sich diese
Funktionen indem man sich des Register MCUCR bedient. Ein Register ist ein bestimmter Adressbereich indem durch eine 8 Bit Zahl einige Funktionen im inneren des Atmega's eingestellt werden können. Durch folgende Anweisung lässt sich das Register einstellen: MCUCR=&B00000000 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
MCUCR steht für MCUControlRegister das &B steht für Binärsystem , das heißt die folgende Zahl ist eine Binärzahl, es könnte z.B. auch &H stehen , was dann bedeutet das es sich um eine Hexadezimalzahl handelt. Die folgenden acht Ziffern sind die 8 Bits mit der sich das Register einstellen lässt, die Zählweise fängt mit dem niedrigen Wert auf der rechten Seite an. Somit ist links der höhere Wert. Also die ganz rechte Null ist BIT Null, die zweit Null von Rechts ist BIT 1, dann BIT3 Bit4 usw. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Register MCUCR |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Die für den Stromsparfunktion notwendigen Einstellungen sind hier in Fetter Schrift dargestellt |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Der Sleep Modus wird mit der Assembler
Instruktion " !Sleep" eingeleitet. Das Ausrufezeichen gibt dem Compiler an das es sich um einen Assembler Befehl handelt, aufgeweckt wird das Programm auf jeden Fall durch einen Externen Interrupt INT0 oder INT1. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Strom sparen kann man auch durch diverse andere
Maßnahmen, so z.B. das man den internen Oszillator und keinen
Externen Quarz benutzt, oder indem man die Betriebsspannung
möglichst niedrig hält. Auch bei niedriger Taktrate verringert sich die Stromaufnahme. Angeschlossenen Led's sollte man nur möglichst kurz einschalten , es reichen schon Einschalt-Zeiten von ca. 5 Millisekunden. Die Stromaufnahme verringert sich auch wenn man nicht benötigte Pins als Eingänge Konfiguriert und den PullUp Widerstand einschaltet. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Es gibt Atmega Prozessoren die besonders wenig
Strom verbrauchen und mit einer sehr viel geringerer Betriebsspannung
arbeiten können, diese Atmega's besitzen zu der normalen Bezeichnung noch ein nachgestelltes V was auf eine geringen Stromverbrauch hindeutet. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Kleines
Testprogramm |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Benutzt wird der interne
1 Mhz Takt Display an folgenden Ports: Enable = Port C.4 RS = Port C.5 DB7 = Port C.7 DB6 = Port C.6 DB5 = Port C.3 DB4 = Port C.2 Leds an folgenden Ports Gelb an A.6 Blau an A.7 Externer Interrupt0 an Input D.2 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Programmzeile |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
$baud = 9600 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
$regfile "m32def.dat" |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
$crystal = 1000000 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
$hwstack = 32 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
$swstack = 10 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
On
Int0
Wecken
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Portd
=
&B00000100
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Mcucr = &B10000010 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Gicr
=
&B01000000
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Sreg.7
=
1
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Ddra
=
&B11111111
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Config
Lcd
=
16
*
2
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.6 , Db7 = Portc.7 , Rs = Portc.5 , E = Portc.4 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Dim A As Byte | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Do | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Do | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
If A = 20 Then Exit Do | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
A = A + 1 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Porta.6 = 1 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Waitms 500 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Porta.6 = 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Loop | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
!Sleep | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Loop | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Wecken: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Porta.7 = 1 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Wait 1 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Porta.7 = 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
A = 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Return | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Funktion |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Nach dem Einschalten blinkt die gelbe Led und der
Wert der in der Variable A enthalten ist erscheint auf dem
Display. Nach 20 maligem Blinken der gelben Led wird der Atmega in den Schlafmodus versetzt. Durch einen Externen Interrupt am Anschluss INT0 wird der Prozessor wieder geweckt und die gelbe Led blinkt erneut. !Sleep ist eine Assembler Instruktion was durch das vorangegangen Ausrufungszeichen verdeutlicht wird Im Schlafzustand bleiben die Inhalte des SRAM und alle Register erhalten. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Es gibt auch noch den IDLE Modus,
auch das ist ein Stromsparmodus bei dem der Systemtakt der CPU
abgekoppelt wird , allerdings bleibt der Serielle Port und die Timer aktiv. Der Idle Modus wird durch externe Interrupts, ADC,Timer Watchdog oder Reset wieder aufgehoben. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PowerDown: Im Powerdown Modus wird der externe Quarz gestoppt er kann wieder aktiviert werden durch den Watchdog, externen Reset oder externen Interrupt. Entweder es wird über das Register Mcucr eingegeben oder als Bascom Anweisung "PowerDown". |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Powersave
-Modus ist nicht in allen Atmegas vorhanden wohl aber im Atmega 8. Als
Bascom Anweisung gibt man einfach "Powersave" ein. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
aktualisiert am 27.01.2019 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Copyright by Manfred Schrod 2009 |