(→Daten zum Stromverbrauch) |
K (→Stromsparmodi) |
||
(30 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
− | Der Stromverbrauch von CMOS µCs ist etwa proprotional zur Taktfrequenz und Spannung. Für einen geringen Stromverbrauch könnte man also die Frequenz so weit reduzieren | + | Der Stromverbrauch von CMOS µCs ist etwa proprotional zur Taktfrequenz und Spannung. Für einen geringen Stromverbrauch könnte man also die Frequenz so weit reduzieren, dass die Rechengeschwindigkeit gerade noch ausreicht. Sonderlich praktisch ist diese Methode aber nicht. Moderne µCs haben eine Möglichkeit den Stromverbrauch zu reduzieren, wenn keine Rechenzeit nötig ist. Der µC macht dann eine Pause in der deutlich weniger Strom verbaucht wird als im normalen Betrieb. Es ist durchaus üblich, das der größte Teil der Zeit in einem Stromsparmodus verbracht wird. |
− | Eine niedrigere Frequenz kann trotzdem sinnvoll sein, wenn dadruch eine niedrigere Spannung möglich ist und auch wegen weniger Funkstörungen. Eine | + | Eine niedrigere Frequenz kann trotzdem sinnvoll sein, wenn dadruch eine niedrigere Spannung möglich ist und auch wegen weniger Funkstörungen. Eine reduzierte Spannung ist in jedem Fall sinnvoll. |
Der folgende Teil bezieht sich auf die ATMEL AVR Controller. Vieles gilt so ähnlich aber auch für Pic, MSP430 und andere. | Der folgende Teil bezieht sich auf die ATMEL AVR Controller. Vieles gilt so ähnlich aber auch für Pic, MSP430 und andere. | ||
− | + | ||
− | + | ||
= Stromsparmodi = | = Stromsparmodi = | ||
− | Bei den AVRs gibt es verschiedene Stromsparmodi (Sleep Modes). Sie unterscheiden sich dadurch wie viel Perepherie noch läuft und wie der µC wieder in den normalen Zustand zurückkehrt. In der Regel ist dies durch das Auslösen eines Interrupts, der dann als erstes ausgeführt wird. Die Beschreibung bezieht sich im folgenden auf den Atmel Mega48/88/168. | + | Bei den AVRs gibt es verschiedene Stromsparmodi (Sleep Modes). Sie unterscheiden sich dadurch wie viel Perepherie noch läuft und wie der µC wieder in den normalen Zustand zurückkehrt. In der Regel ist dies durch das Auslösen eines Interrupts, der dann als erstes ausgeführt wird. Die Beschreibung bezieht sich im folgenden auf den Atmel Mega48/88/168. Die anderen AVR Controller sind aber recht ähnlich. |
− | 1) | + | 1) '''Idle''' : Dies ist der einfachste Sparmodus. Alle Timer, PWM Signale usw. laufen weiter und jeder Interrupt kann zum Aufwecken genutzt werden. Das aufwecken geht relativ schnell (6 Zyklen), so dass man diesen Mode auch für kürzere Wartezeiten gut nutzen kann. Die Stromaufnahmen reduziert sich immerhin auf etwa 20%-50%. Ein weiterer Vorteil ist es, dass die Antwortzeit auf den Interrupt genau definiert ist, da ja kein angefangener Befehl mehr abgearbeitet werden muß. |
− | 2) Powerdown: Fast alle Takte sind ausgeschaltet. Entsprechend gehen keine Timer, USART usw. | + | 2) '''Powerdown''': Fast alle Takte sind ausgeschaltet. Entsprechend gehen keine Timer, USART usw. Die Möglichkeiten zum Aufwecken sind entsprechend eingeschränkt. Ein Quarz als Takt ist in diesem Fall unpraktisch, denn es dauert etwas bis der Quarz wieder stabil schwingt. Die Verzögerung entspricht der nach einem Reset. Bevorzugt nutzt man hier also den internen Oszillator. Dafür ist der Stromverbauch in diesem Mode auch sehr niedrig (unter 1µA möglich) und es kann zum Teil auf ein echtes ausschalten verzichtet werden. |
− | 3) Powersave: Der Mode ist sehr änlich dem Powerdown, nur das Timer 2 im asyncronen Modus noch geht. | + | 3) '''Powersave''': Der Mode ist sehr änlich dem Powerdown, nur das Timer 2 im asyncronen Modus noch geht. |
− | Die Hauptanwendung ist es Timer 2 mit ein 32 kHz | + | Die Hauptanwendung ist es Timer 2 mit ein 32 kHz Quarz laufen zu lassen, um eine durchlaufende genaue Zeit (Echtzeituhr) zu haben. Der 32 kHz Takt kann dann auch zum kalibrieren des internen Taktes genutzt werden, um z.B. eine UART zu betreiben. |
− | 4) Standby: Ähnlich wie Powerdown, nur ist das Aufwachen schneller und definiert in 6 Zyklen. Nur der Oszillator läuft weiter. Sinnvoll ist das vor allem mit einem Quarz, der ja nicht so schnell starten kann. | + | 4) '''Standby''': Ähnlich wie Powerdown, nur ist das Aufwachen schneller und definiert in 6 Zyklen. Nur der Oszillator läuft weiter. Sinnvoll ist das vor allem mit einem Quarz, der ja nicht so schnell starten kann. |
− | 5) ADC Noise Reduction mode: Dieser Mode dient dazu eine AD Wandlung mit weniger Störungen zu bekommen. Die reduzierte Stromaufnahmen, ähnlich dem | + | 5) '''ADC Noise Reduction mode''': Dieser Mode dient dazu eine [[ADC_(Avr) | AD-Wandlung]] mit weniger Störungen zu bekommen. Die reduzierte Stromaufnahmen, ähnlich dem Idle Mode, ist dabei mehr ein Nebeneffekt. Das Aufwachen erfolgt hier in der Regel wenn die AD-Wandlung fertig ist. |
− | Wenn man im Stromsparmode auf ein | + | Wenn man im Stromsparmode auf ein Ereignis wartet, kann man natürlich auch nicht den Watchdog zurücksetzen. Hier muß man dann eventuell ohne arbeiten, wenn kein passender Zeitgesteuerter Interrupt auftritt. |
− | Der Watchdog kann auch als langsamer Timer benutzt werden, um den µC gelegentlich (z.B. etwa jede Sekunde) aufzuwecken, um Hardware abzufragen. Eine | + | Der Watchdog kann auch als langsamer und sparsamer Timer benutzt werden, um den µC gelegentlich (z.B. etwa jede Sekunde) aufzuwecken, um Hardware abzufragen. Neuere µCs wie Mega88 erlauben dazu über den Watchdogtimer einen Interrupt auszulösen. Eine genaue Zeitmessung ist damit allerdings nicht möglich. |
Die Debugwire Funktion sollte abgeschaltet sein, vor allem für Powerdown und Powersave mode. | Die Debugwire Funktion sollte abgeschaltet sein, vor allem für Powerdown und Powersave mode. | ||
== Aufwachen aus den Stromsparmodes == | == Aufwachen aus den Stromsparmodes == | ||
− | Nicht jeder Interrupt kann zum Aufwachen genutzt werden | + | Nicht jeder Interrupt kann zum Aufwachen genutzt werden; genaueres im Zweifelsfall im Datenblatt nachsehen. Im Idle mode gehen alle Interrupts. |
In allen Modes reichen die folgenden Interrupts zum Aufwachen: | In allen Modes reichen die folgenden Interrupts zum Aufwachen: | ||
− | + | * Pin Change | |
− | + | * Int0 , Int1 , aber nur als Level Interrupt | |
− | + | * [[TWI]] Address match | |
− | + | * [[Watchdog]] timer, auch als Interrupt | |
− | Im | + | Im Powersave mode geht auch ein Interrupt von Timer 2, der in diesem Mode ja gerade weiter laufen kann. |
− | + | Damit das Aufwachen funktioniert muß ein Interrupt auch per SEI freigegeben werden. | |
== Softwarebeispiele == | == Softwarebeispiele == | ||
− | Im Assembler gibt es den Befehl Sleep, um in den im | + | Praktisch immer, wenn auf einen Interrupt gewartet wird, kann ein sleep-mode genutzt werden. Im Extremfall kann man damit sogar die Schleife und das Flag ersetzen. Um das Risiko zu vermindern versehentlich (z.B. ohne Brownout) in den sleep-mode zu gelangen, gibt es ein extra Bit im Register SMCR, um den Sleep mode zu blockieren. |
+ | |||
+ | In Assembler gibt es den Befehl Sleep, um in den im Register SMCR eingestellten Sparmodus zu wechseln. Nach der ISR die den Sparmodus aufgehoben hat, wird hinter dem sleep-Befehl normal weitergemacht. | ||
+ | Bei WinArv (C) werden über #include <avr/sleep.h> die Stromsparfunktionen weitgehend hardwareunabhängig eingebunden. | ||
+ | Ein Beispiel ist bereits hier: [[Timer/Counter_(Avr)#Input_Capture]]. | ||
+ | BASCOM hat für die Stromsparmodi extra Befehle: IDLE und POWERDOWN für einige µCs. Für andere Modes müßte man wohl inline ASM nutzen. | ||
− | = ungenutzte Pins = | + | = Sonstiges zum Stromsparen = |
+ | == ungenutzte Pins == | ||
Ein vermeidbarer weiterer Stromverbraucher sind Eingänge die unbeschaltet sind oder eine etwa mittlere Spannung haben. Besser ist es ungenutzte Pins als Ausgang zu definieren, oder einen definierten H oder L Pegel zu erzeugen, ggf. auch durch die internen Pullup Widerstände. Der eingeschaltete interne Pullup-widerstand braucht an sich noch keinen nennenswerten Strom. | Ein vermeidbarer weiterer Stromverbraucher sind Eingänge die unbeschaltet sind oder eine etwa mittlere Spannung haben. Besser ist es ungenutzte Pins als Ausgang zu definieren, oder einen definierten H oder L Pegel zu erzeugen, ggf. auch durch die internen Pullup Widerstände. Der eingeschaltete interne Pullup-widerstand braucht an sich noch keinen nennenswerten Strom. | ||
− | Bei den | + | Bei den Eingängen für den AD und Comperator kann man den digitalen Eingang meist abschalten. Dies hilft auch gegen den zusätzlichen Stromverbrauch durch eine mittleren Spannungswert. |
− | = Taktquelle = | + | == Taktquelle == |
− | Auch die Takterzeugung braucht Strom. Der interne RC-Takt braucht dabei etwas mehr Strom als ein Quarz. Beim Quarz kann zum Teil zwischen geringem Stromverbrauch und höherer Störfestigkeit gewählt werden. | + | Auch die Takterzeugung braucht Strom. In Standby Mode ist dies sogar der wesenliche Stromverbrauch. Der interne RC-Takt braucht dabei etwas mehr Strom als ein Quarz. Beim Quarz kann zum Teil zwischen geringem Stromverbrauch und höherer Störfestigkeit gewählt werden. |
− | + | Die sparsamste Taktquelle ist in der Regel ein 32 kHz Uhrenquarz oder der Takt vom Watchdog timer. | |
− | + | Bei neueren AVR Controllern kann der Takt intern geteilt werden. Man kann den Teiler auch zur Laufzeit verstellen. Man braucht also nicht den Quarz zu wechseln und kann trotzdem einen sparsameren langsamen Takt wählen. Besonders wenn man den Standby mode nutzt, ist es aber besser gleich den richtigen Quarz zu wählen. | |
− | + | ||
− | + | ||
+ | == IO Module == | ||
+ | Neben der Recheneinheit brauchen auch die IO Module etwas Strom. Viele der Module lassen sich besonders bei neueren µCs einzelen zur Laufzeit abschalten. Bei älteren Modellen geht das wenigstens für den Watchdog, den Brownout Detektor, den analogen [[Analog_Komparator_(Avr)|Komparator]] und ggf. den AD Wandler. Beim AD Wandler und der internen Referenz dauert es nach dem Einschalten aber etwas, bis gute Ergebnisse erzielt werden. | ||
+ | |||
+ | Die Abschaltung des digitalen Teil des AD-Wandlers bei neueren µCs ist etwas trickreich: nur wenn der Takt zum digitalen Teil eingeschaltet ist (Register PRR), kann man auf das Register ADCSRA zum an- und abschalten des analogen Teils zugreifen. | ||
= Daten zum Stromverbrauch = | = Daten zum Stromverbrauch = | ||
− | Die Beispieldaten sind für 3 V | + | Die Wirksamkeit der Stromsparmodi kann man wohl am besten an Beispieldaten abschätzen. |
+ | Die Beispieldaten aus dem Datenblatt (zum Teil aus Kurven abgelesen) sind für 3 V. Die Werte für den Mega16/Mega32 sind ähnlich (etwas höher) dem Mega8. | ||
{| {{Blauetabelle}} style="text-align:center;" | {| {{Blauetabelle}} style="text-align:center;" | ||
Zeile 71: | Zeile 79: | ||
|aktive 32kHz (Q) || 27 µA || 65 µA || ca.20 µA | |aktive 32kHz (Q) || 27 µA || 65 µA || ca.20 µA | ||
|- | |- | ||
− | | | + | |idle 4 MHz (Q) || 360 µA || 1 mA || 260 µA |
|- | |- | ||
− | | | + | |idle 1 MHz (RC) || 160 µA || 300 µA || 140 µA |
|- | |- | ||
− | | | + | |idle 32kHz (Q) || 15 µA || 16 µA || ca. 9 µA |
|- | |- | ||
|power down || 0,25µA || 0,25µA || 0,1 µA | |power down || 0,25µA || 0,25µA || 0,1 µA | ||
Zeile 86: | Zeile 94: | ||
|- | |- | ||
|} | |} | ||
− | Taktquellen: Q = Quarz, RC = interner RC Takt, WD = Watchdog takt, Q2 = Quarz für Timer2 | + | Taktquellen: Q = Quarz, RC = interner RC Takt, WD = Watchdog-takt, Q2 = Quarz für Timer2 |
− | Beim Mega48 u.Ä. lassen sich viele IO Module über das Register PRR einzeln abschalten. Zum Stromverbrauch im aktiven oder | + | Beim Mega48 u.Ä. lassen sich viele IO Module über das Register PRR einzeln abschalten. Zum Stromverbrauch im aktiven oder Idle Mode kommt dann noch etwas dazu. |
Die Daten sind für 3 V und 4 MHz, und in etwa proportional zum Takt: | Die Daten sind für 3 V und 4 MHz, und in etwa proportional zum Takt: | ||
Zeile 110: | Zeile 118: | ||
|ADC ||75 µA || 50 µA | |ADC ||75 µA || 50 µA | ||
|- | |- | ||
+ | |Summe ||424 µA || 227 µA | ||
+ | |- | ||
+ | |||
|} | |} | ||
− | Wenn alles eingeschaltet ist sind das ca. 20 % bzw. 100 % des Stromes im aktiven bzw. | + | Wenn alles eingeschaltet ist, sind das ca. 20% bzw. 100% des Stromes im aktiven bzw. Idle Mode. |
Beim Mega8 lassen sich diese Teile nicht seperat abschalten und der Strom ist schon oben enthalten. | Beim Mega8 lassen sich diese Teile nicht seperat abschalten und der Strom ist schon oben enthalten. | ||
− | Beim Stromverbrauch des ADCs ist das Datenblatt nicht so ganz eindeutig. Man hat einen | + | Beim Stromverbrauch des ADCs ist das Datenblatt nicht so ganz eindeutig. Man hat einen taktunabhängigen Teil und einen der vom Takt abhängt. Eine Unterscheidung nach dem ADC Takt oder ob gerade ein Wandlung stattfindet ist noch nicht gemacht. |
− | + | Die analogen Teilschaltungen haben einen vom Takt unabhängigen Teil des Stromverbrauchs: | |
{| {{Blauetabelle}} style="text-align:left;" | {| {{Blauetabelle}} style="text-align:left;" | ||
+ | |- | ||
+ | | || Mega88 || Mega8L || Mega88PA | ||
|- | |- | ||
|Bandgap Ref. ||10 µA || 10 µA || 10 µA | |Bandgap Ref. ||10 µA || 10 µA || 10 µA | ||
Zeile 129: | Zeile 142: | ||
|ADC ||300 µA||250 µA ||170 µA | |ADC ||300 µA||250 µA ||170 µA | ||
|} | |} | ||
+ | |||
+ | = siehe auch = | ||
+ | [[Interrupt]] | ||
+ | |||
+ | |||
+ | [[Kategorie:Microcontroller]] |
Aktuelle Version vom 19. Juli 2013, 15:09 Uhr
Der Stromverbrauch von CMOS µCs ist etwa proprotional zur Taktfrequenz und Spannung. Für einen geringen Stromverbrauch könnte man also die Frequenz so weit reduzieren, dass die Rechengeschwindigkeit gerade noch ausreicht. Sonderlich praktisch ist diese Methode aber nicht. Moderne µCs haben eine Möglichkeit den Stromverbrauch zu reduzieren, wenn keine Rechenzeit nötig ist. Der µC macht dann eine Pause in der deutlich weniger Strom verbaucht wird als im normalen Betrieb. Es ist durchaus üblich, das der größte Teil der Zeit in einem Stromsparmodus verbracht wird. Eine niedrigere Frequenz kann trotzdem sinnvoll sein, wenn dadruch eine niedrigere Spannung möglich ist und auch wegen weniger Funkstörungen. Eine reduzierte Spannung ist in jedem Fall sinnvoll.
Der folgende Teil bezieht sich auf die ATMEL AVR Controller. Vieles gilt so ähnlich aber auch für Pic, MSP430 und andere.
Inhaltsverzeichnis
Stromsparmodi
Bei den AVRs gibt es verschiedene Stromsparmodi (Sleep Modes). Sie unterscheiden sich dadurch wie viel Perepherie noch läuft und wie der µC wieder in den normalen Zustand zurückkehrt. In der Regel ist dies durch das Auslösen eines Interrupts, der dann als erstes ausgeführt wird. Die Beschreibung bezieht sich im folgenden auf den Atmel Mega48/88/168. Die anderen AVR Controller sind aber recht ähnlich.
1) Idle : Dies ist der einfachste Sparmodus. Alle Timer, PWM Signale usw. laufen weiter und jeder Interrupt kann zum Aufwecken genutzt werden. Das aufwecken geht relativ schnell (6 Zyklen), so dass man diesen Mode auch für kürzere Wartezeiten gut nutzen kann. Die Stromaufnahmen reduziert sich immerhin auf etwa 20%-50%. Ein weiterer Vorteil ist es, dass die Antwortzeit auf den Interrupt genau definiert ist, da ja kein angefangener Befehl mehr abgearbeitet werden muß.
2) Powerdown: Fast alle Takte sind ausgeschaltet. Entsprechend gehen keine Timer, USART usw. Die Möglichkeiten zum Aufwecken sind entsprechend eingeschränkt. Ein Quarz als Takt ist in diesem Fall unpraktisch, denn es dauert etwas bis der Quarz wieder stabil schwingt. Die Verzögerung entspricht der nach einem Reset. Bevorzugt nutzt man hier also den internen Oszillator. Dafür ist der Stromverbauch in diesem Mode auch sehr niedrig (unter 1µA möglich) und es kann zum Teil auf ein echtes ausschalten verzichtet werden.
3) Powersave: Der Mode ist sehr änlich dem Powerdown, nur das Timer 2 im asyncronen Modus noch geht. Die Hauptanwendung ist es Timer 2 mit ein 32 kHz Quarz laufen zu lassen, um eine durchlaufende genaue Zeit (Echtzeituhr) zu haben. Der 32 kHz Takt kann dann auch zum kalibrieren des internen Taktes genutzt werden, um z.B. eine UART zu betreiben.
4) Standby: Ähnlich wie Powerdown, nur ist das Aufwachen schneller und definiert in 6 Zyklen. Nur der Oszillator läuft weiter. Sinnvoll ist das vor allem mit einem Quarz, der ja nicht so schnell starten kann.
5) ADC Noise Reduction mode: Dieser Mode dient dazu eine AD-Wandlung mit weniger Störungen zu bekommen. Die reduzierte Stromaufnahmen, ähnlich dem Idle Mode, ist dabei mehr ein Nebeneffekt. Das Aufwachen erfolgt hier in der Regel wenn die AD-Wandlung fertig ist.
Wenn man im Stromsparmode auf ein Ereignis wartet, kann man natürlich auch nicht den Watchdog zurücksetzen. Hier muß man dann eventuell ohne arbeiten, wenn kein passender Zeitgesteuerter Interrupt auftritt.
Der Watchdog kann auch als langsamer und sparsamer Timer benutzt werden, um den µC gelegentlich (z.B. etwa jede Sekunde) aufzuwecken, um Hardware abzufragen. Neuere µCs wie Mega88 erlauben dazu über den Watchdogtimer einen Interrupt auszulösen. Eine genaue Zeitmessung ist damit allerdings nicht möglich.
Die Debugwire Funktion sollte abgeschaltet sein, vor allem für Powerdown und Powersave mode.
Aufwachen aus den Stromsparmodes
Nicht jeder Interrupt kann zum Aufwachen genutzt werden; genaueres im Zweifelsfall im Datenblatt nachsehen. Im Idle mode gehen alle Interrupts. In allen Modes reichen die folgenden Interrupts zum Aufwachen:
- Pin Change
- Int0 , Int1 , aber nur als Level Interrupt
- TWI Address match
- Watchdog timer, auch als Interrupt
Im Powersave mode geht auch ein Interrupt von Timer 2, der in diesem Mode ja gerade weiter laufen kann. Damit das Aufwachen funktioniert muß ein Interrupt auch per SEI freigegeben werden.
Softwarebeispiele
Praktisch immer, wenn auf einen Interrupt gewartet wird, kann ein sleep-mode genutzt werden. Im Extremfall kann man damit sogar die Schleife und das Flag ersetzen. Um das Risiko zu vermindern versehentlich (z.B. ohne Brownout) in den sleep-mode zu gelangen, gibt es ein extra Bit im Register SMCR, um den Sleep mode zu blockieren.
In Assembler gibt es den Befehl Sleep, um in den im Register SMCR eingestellten Sparmodus zu wechseln. Nach der ISR die den Sparmodus aufgehoben hat, wird hinter dem sleep-Befehl normal weitergemacht.
Bei WinArv (C) werden über #include <avr/sleep.h> die Stromsparfunktionen weitgehend hardwareunabhängig eingebunden. Ein Beispiel ist bereits hier: Timer/Counter_(Avr)#Input_Capture.
BASCOM hat für die Stromsparmodi extra Befehle: IDLE und POWERDOWN für einige µCs. Für andere Modes müßte man wohl inline ASM nutzen.
Sonstiges zum Stromsparen
ungenutzte Pins
Ein vermeidbarer weiterer Stromverbraucher sind Eingänge die unbeschaltet sind oder eine etwa mittlere Spannung haben. Besser ist es ungenutzte Pins als Ausgang zu definieren, oder einen definierten H oder L Pegel zu erzeugen, ggf. auch durch die internen Pullup Widerstände. Der eingeschaltete interne Pullup-widerstand braucht an sich noch keinen nennenswerten Strom. Bei den Eingängen für den AD und Comperator kann man den digitalen Eingang meist abschalten. Dies hilft auch gegen den zusätzlichen Stromverbrauch durch eine mittleren Spannungswert.
Taktquelle
Auch die Takterzeugung braucht Strom. In Standby Mode ist dies sogar der wesenliche Stromverbrauch. Der interne RC-Takt braucht dabei etwas mehr Strom als ein Quarz. Beim Quarz kann zum Teil zwischen geringem Stromverbrauch und höherer Störfestigkeit gewählt werden. Die sparsamste Taktquelle ist in der Regel ein 32 kHz Uhrenquarz oder der Takt vom Watchdog timer.
Bei neueren AVR Controllern kann der Takt intern geteilt werden. Man kann den Teiler auch zur Laufzeit verstellen. Man braucht also nicht den Quarz zu wechseln und kann trotzdem einen sparsameren langsamen Takt wählen. Besonders wenn man den Standby mode nutzt, ist es aber besser gleich den richtigen Quarz zu wählen.
IO Module
Neben der Recheneinheit brauchen auch die IO Module etwas Strom. Viele der Module lassen sich besonders bei neueren µCs einzelen zur Laufzeit abschalten. Bei älteren Modellen geht das wenigstens für den Watchdog, den Brownout Detektor, den analogen Komparator und ggf. den AD Wandler. Beim AD Wandler und der internen Referenz dauert es nach dem Einschalten aber etwas, bis gute Ergebnisse erzielt werden.
Die Abschaltung des digitalen Teil des AD-Wandlers bei neueren µCs ist etwas trickreich: nur wenn der Takt zum digitalen Teil eingeschaltet ist (Register PRR), kann man auf das Register ADCSRA zum an- und abschalten des analogen Teils zugreifen.
Daten zum Stromverbrauch
Die Wirksamkeit der Stromsparmodi kann man wohl am besten an Beispieldaten abschätzen. Die Beispieldaten aus dem Datenblatt (zum Teil aus Kurven abgelesen) sind für 3 V. Die Werte für den Mega16/Mega32 sind ähnlich (etwas höher) dem Mega8.
. | Mega48/88 | Mega8L | Mega88PA |
aktive 4 MHz (Q) | 1,7 mA | 6,8 mA | 1,6 mA |
aktive 1 MHz (RC) | 550 µA | 1,8 mA | 450 µA |
aktive 128kHz (WD) | 60 µA | n.A. | 45 µA |
aktive 32kHz (Q) | 27 µA | 65 µA | ca.20 µA |
idle 4 MHz (Q) | 360 µA | 1 mA | 260 µA |
idle 1 MHz (RC) | 160 µA | 300 µA | 140 µA |
idle 32kHz (Q) | 15 µA | 16 µA | ca. 9 µA |
power down | 0,25µA | 0,25µA | 0,1 µA |
power down+watchdog | 4 µA | 20 µA | 4 µA |
powersave, 32 kHz(Q2) | 7 µA | 10 µA | 1 µA |
Standby 4 MHz (Q) | 80 µA | 70 µA | 65 µA |
Taktquellen: Q = Quarz, RC = interner RC Takt, WD = Watchdog-takt, Q2 = Quarz für Timer2
Beim Mega48 u.Ä. lassen sich viele IO Module über das Register PRR einzeln abschalten. Zum Stromverbrauch im aktiven oder Idle Mode kommt dann noch etwas dazu.
Die Daten sind für 3 V und 4 MHz, und in etwa proportional zum Takt:
IO-Module | Mega 48/88/168 | Mega88PA |
USART | 51 µA | 21 µA |
TWI | 75 µA | 46 µA |
Timer0 | 24 µA | 10 µA |
Timer1 | 32 µA | 25 µA |
Timer2 | 72 µA | 35 µA |
SPI | 95 µA | 40 µA |
ADC | 75 µA | 50 µA |
Summe | 424 µA | 227 µA |
Wenn alles eingeschaltet ist, sind das ca. 20% bzw. 100% des Stromes im aktiven bzw. Idle Mode. Beim Mega8 lassen sich diese Teile nicht seperat abschalten und der Strom ist schon oben enthalten.
Beim Stromverbrauch des ADCs ist das Datenblatt nicht so ganz eindeutig. Man hat einen taktunabhängigen Teil und einen der vom Takt abhängt. Eine Unterscheidung nach dem ADC Takt oder ob gerade ein Wandlung stattfindet ist noch nicht gemacht.
Die analogen Teilschaltungen haben einen vom Takt unabhängigen Teil des Stromverbrauchs:
Mega88 | Mega8L | Mega88PA | |
Bandgap Ref. | 10 µA | 10 µA | 10 µA |
Brownout incl. Bandgap. | 23 µA | 15 µA | 20 µA |
AComperator | 80 µA | 60 µA | 55 µA |
ADC | 300 µA | 250 µA | 170 µA |