Forum: Mikrocontroller und Digitale Elektronik Spart Atmega mit CLKDIV8 Strom?


von richiM (Gast)


Lesenswert?

Hallo,

bei einem Bastelprojekt mit einem Atmega, auf dem ein zeitunkritisches 
Programm läuft, stelle ich mir die Frage, ob es für den Energieverbrauch 
des Atmega einen Unterschied macht, ob ich die CLKDIV8-Fuse setze oder 
nicht.

Der Atmega läuft mit internen 8MHz. Wenn man die CLKDIV8-Fuse nicht 
setzt, läuft der Controller mit einem Takt von 8MHz, setzt man die 
CLKDIV8-Fuse, läuft der Controller intern mit 1MHz Takt, richtig?

1MHz Taktfrequenz hätte gegenüber 8MHz Taktfrequenz den Vorteil, dass 
der Controller weniger Strom zieht - oder?

Außerdem müsste der Controller dann auch mit einer niedrigeren 
Versorgungsspannung auskommen - nehme ich an? Oder gilt das nur bei 
einem externen 1MHz-Takt?

von Ulrich F. (Gast)


Lesenswert?

richiM schrieb:
> Wenn man die CLKDIV8-Fuse nicht
> setzt,
Default ist 1MHz interner Takt
Das gilt für (fast) alle ATMega




richiM schrieb:
> 1MHz ...  weniger Strom zieht
Ja, höchstvermutlich

richiM schrieb:
> Außerdem müsste der Controller dann auch mit einer niedrigeren
> Versorgungsspannung auskommen - nehme ich an? Oder gilt das nur bei
> einem externen 1MHz-Takt?
Was steht dazu im Datenblatt?
wird da zwischen extern und intern unterschieden?

von richiM (Gast)


Lesenswert?

Danke für die Antwort!

Ulrich F. schrieb:
>> Wenn man die CLKDIV8-Fuse nicht
>> setzt,
> Default ist 1MHz interner Takt

Stimmt, hatte ich verwechselt!

Ulrich F. schrieb:
> richiM schrieb:
>> Außerdem müsste der Controller dann auch mit einer niedrigeren
>> Versorgungsspannung auskommen - nehme ich an? Oder gilt das nur bei
>> einem externen 1MHz-Takt?
> Was steht dazu im Datenblatt?
> wird da zwischen extern und intern unterschieden?

So, wie ich das sehe, nein.

Also läuft ein Atmega mit internem Takt (oder externem Takt) von 1MHz 
stromsparender und auch mit einer niedrigeren Versorgungsspannung als 
bei internen (oder externen) 8MHz.

Das klingt doch gut! :-)

von Christian (dragony)


Lesenswert?

Das spart sogar eine ganze Menge. Der Core zieht mit 8 MHz genau 8 mal 
so viel Strom wie mit 1 MHz. Die Gesamtstromaufnahme ist nicht so 
linear, da es intern noch jede Menge Module hat, die von diesem Takt 
nicht betroffen sind. Im Grunde brauchst du aber nur noch ca. 25% der 
Energie. Wenn es dir darum geht, so wenig wie möglich an Energie zu 
verbrauchen, kannst du den internen Resonator auch komplett still legen 
und vom Watchdog-Oszillator leben. Der läuft nur mit (je nach Modell) 
132kHz und braucht so gut wie gar kein Strom mehr.

Praxisbeispiel mit ATtiny13A:
128kHz + DIV8 + PRTIM0 + PRADC + ACD = 10.9uA im ACTIVE MODE(!)
Gibt genug Anwendungen, die mit 32kHz auskommen.

: Bearbeitet durch User
von Lurchi (Gast)


Lesenswert?

Bei vielen AVRs hat man noch den 128 kHz Takt vom Watchdog zur Auswahl. 
Der ist noch etwas sparsamer, aber auch weniger genau. Dafür muss man 
aber die Fuses verstellen und ggf. den ISP Takt reduzieren. Die 
Umschaltung 1 MHz / 8 MHz kann man auch noch in Software zur Laufzeit 
verändern. Die Div8 Fuse setzt nur den Startwert (i.A: auf 1 MHz) so 
dass der µC auch mit niedriger Spannung laufen kann.

Wenn man in Wartezeiten den µC in einen sleep mode versetzt kann man 
noch einiges mehr an Strom sparen. Dann macht es ggf. auch wenig aus ob 
der µC mit 1 oder 8 MHz läuft.

von Karl H. (kbuchegg)


Lesenswert?

Christian S. schrieb:
> Das spart sogar eine ganze Menge. Der Core zieht mit 8 MHz genau 8 mal
> so viel Strom wie mit 1 MHz. Die Gesamtstromaufnahme ist nicht so
> linear, da es intern noch jede Menge Module hat, die von diesem Takt
> nicht betroffen sind. Im Grunde brauchst du aber nur noch ca. 25% der
> Energie.

Ganz so einfach ist die Sache aber nicht.
Denn ein mit 8Mhz getakteter Mega, arbeitet auch seine Befehle 8 mal so 
schnell ab, wie ein mit 1Mhz getaktere. D.h. er braucht zwar 8 mal so 
viel Strom, ist aber auch 8 mal so schnell mit seiner Arbeit fertig und 
kann sich wieder schlafen legen :-)

von Jay (Gast)


Lesenswert?

Theoretisch sind niedrigere Taktfrequenzen für den Stromverbrauch immer 
besser, da die Verluste in den internen Kapazitäten bei niedrigeren 
Taktfrequenzen geringer sind.

In der Praxis ist der Effekt durch andere Effekte überlagert. 
Beispielsweise kannst du bei einer hohen Taktfrequenz und bei gleicher 
Aufgabe schneller zurück in den Sleep-Modus. In der Praxis musst du 
daher messen, was wirklich besser ist (schnelle oder langsame 
Taktfrequenz).

Dabei merkst du dann, dass das Messen an der Grasnarbe (sehr niedrige 
Ströme, besonders im Sleep-Modus) eine Sache für sich ist, und das die 
am Controller angeschlossene Peripherie auch ungewollt das ein oder 
andere Elektron bewegt.

von Christian (dragony)


Lesenswert?

Karl H. schrieb:
> Christian S. schrieb:
>> Das spart sogar eine ganze Menge. Der Core zieht mit 8 MHz genau 8 mal
>> so viel Strom wie mit 1 MHz. Die Gesamtstromaufnahme ist nicht so
>> linear, da es intern noch jede Menge Module hat, die von diesem Takt
>> nicht betroffen sind. Im Grunde brauchst du aber nur noch ca. 25% der
>> Energie.
>
> Ganz so einfach ist die Sache aber nicht.
> Denn ein mit 8Mhz getakteter Mega, arbeitet auch seine Befehle 8 mal so
> schnell ab, wie ein mit 1Mhz getaktere. D.h. er braucht zwar 8 mal so
> viel Strom, ist aber auch 8 mal so schnell mit seiner Arbeit fertig und
> kann sich wieder schlafen legen :-)

Stimmt zwar, aber bei Batteriebetrieb ist es für die Chemie besser, wenn 
wenig Strom gezogen wird. Im Endeffekt halten die Batterien so länger. 
Ausserdem gibt es auch immer wieder Programme, die mit delays ohne Sleep 
arbeiten, und da spart es auch Energie.

von richiM (Gast)


Lesenswert?

Christian S. schrieb:
> Praxisbeispiel mit ATtiny13A:
> 128kHz + DIV8 + PRTIM0 + PRADC + ACD = 10.9uA im ACTIVE MODE(!)
> Gibt genug Anwendungen, die mit 32kHz auskommen.

Ah, klingt interessant!


Leute, ich danke euch für die vielen aufschlussreichen Antworten!!!

von Christian (dragony)


Lesenswert?

Ups, verrechnet. 128/8 ist immernoch 16 kHz :)
Naja, um Sensoren auszulesen und mal ein FET zu schalten reichts dicke. 
Das DIV8 ist aber auch nur eine Faulheit, weil es einfacher ist, eine 
Fuse zu setzen als den CLKPR Register zu ändern. Wenn man die 32kHz 
braucht, setzt man CLKPR einfach auf 2.

Auch lustig: CLKPR auf 8 setzen und sich mit 500Hz Takt begnügen. Der 
Upload des Programms dauert dann halt n bissl länger ;)

: Bearbeitet durch User
von Paul B. (paul_baumann)


Lesenswert?

Christian S. schrieb:
> Auch lustig: CLKPR auf 8 setzen und sich mit 500Hz Takt begnügen. Der
> Upload des Programms dauert dann halt n bissl länger ;)

Die Kontroller werden wie ihre Anwender ja auch älter und können nicht 
mehr so schnell wie früher, als das Hertz/Kreislaufsystem noch 16MHz 
abkonnte.
Das sind dann sozusagen Schalt-Greise.

MfG Paul

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.