Forum: Mikrocontroller und Digitale Elektronik Komponenten im AVR, die viel Strom verbrauchen


von ecl (Gast)


Lesenswert?

Hallo,

für ein Projekt würde ich gerne die Stromaufnahme eines AVR aufzeichnen.
Hardware ist vorhanden.
Um das ganze besonders deutlich zu machen (und weil ich kein AVR Experte 
bin) würde ich gerne Komponenten nutzen, die besonders viel Strom im AVR 
brauchen.
Ich stell mir das quasi so vor
1
while(1){
2
 BraucheVielStrom();
3
 delay_ms(10);
4
 BraucheWenigStrom();
5
 delay_ms(10);
6
}

 Das ganze soll evtl. nicht solange dauern (jeweils max 100ms), damit 
man die Ergebnisse schön visualisieren kann. Jemand ne Idee was ich 
nutzen kann/soll (intern, das ich ne LED anschließen kann ist mir 
bewusst ;)

von spess53 (Gast)


Lesenswert?

Hi

> Das ganze soll evtl. nicht solange dauern (jeweils max 100ms), damit
>man die Ergebnisse schön visualisieren kann.

Womit willst du die Stromaufnahme messen?

MfG Spess

von Irgendwer (Gast)


Lesenswert?

Wie so oft hilft eine blick ins Datenblatt. Da steht drin auch einiges 
zum Stromverbrauch der Hardware drin.

Und viel Spaß dabei eine delay_ms zu schreiben die nicht mit 100% 
CPU-Last vor sich hin heizt.

von Lukas T. (tapy)


Lesenswert?

Wenig Stromverbrauch wäre bspw. mit einem Sleep-Modus erreichbar. Da 
gibt es verschiedene (Datenblatt), die verschieden lange zum "wieder 
hoch kommen" brauchen.

"Viel Strom" (Sehr relativ) braucht beispielsweise der ADC und alles mit 
ordentlich hohem Takt.

von Horst (Gast)


Lesenswert?

Ist das bei einem AVR, bei dem man die einelnen Komponenten nicht 
abschalten kann, nicht ziemlich sinnfrei?
Bei einem ARM würd ich das ja noch verstehen.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Moderne AVR besitzen ein PRR Register, über das man unbenutzte Blöcke 
des MC abschalten kann. Beim z.B. Tiny 24/44/84 sind das der ADC, das 
USI und die beiden Timer 0 und 1.
Die grössten Stromverbraucher sind aber im allgemeinen die Portpins, 
über die Strom in die Peripherie fliesst.

: Bearbeitet durch User
von Edi (Gast)


Lesenswert?

Unter Minimizing Power Consumption oder so ähnlich im Datenblatt steht, 
was man alles abschalten kann. Bei einigen AVRs kann man auch den BOD 
via Software im Sleep abschalten. Der kann schon mehrere zehn 
Mikroampere ziehen.

von Peter D. (peda)


Lesenswert?

Das Datenblatt des konkreten AVRs ist da recht geschwätzig, was das 
Stromsparen angeht.
Z.B. beim ATmega328PB die Abschnitte:
12.10. System Clock Prescaler
14. PM - Power Management and Sleep Modes
14.10. Minimizing Power Consumption

von Hubert G. (hubertg)


Lesenswert?

Du kannst alle Pin auf Eingang ohne PullUp stellen und die Eingänge 
offen lassen. Am besten funktioniert das auf einem Steckbrett. Dann die 
PullUp zuschalten, das macht etliche mA aus.

von Andreas B. (bitverdreher)


Lesenswert?

Hubert G. schrieb:
> Du kannst alle Pin auf Eingang ohne PullUp stellen und die Eingänge
> offen lassen.

Genau so eben nicht. Offene Eingänge neigen zum Schwingen. Auf Ausgang 
oder auf Eingang mit Pullup schalten verbraucht den wenigsten Strom.

Gruß
Andreas

von spess53 (Gast)


Lesenswert?

Hi

>Offene Eingänge neigen zum Schwingen

??????

MfG Spess

von hhi (Gast)


Lesenswert?

spess53 schrieb:
> Womit willst du die Stromaufnahme messen?

Über einen 1 Ohm Widerstand in der Spannungsversorgung, an dem ich den 
Spannungsfall betrachte.

von ecl (Gast)


Lesenswert?

Aber Danke schonmal an alle für die Hinweise

von Andreas B. (bitverdreher)


Lesenswert?

spess53 schrieb:
> Hi
>
>>Offene Eingänge neigen zum Schwingen
>
> ??????
>
> MfG Spess

Der Eingang nimmt jedes beliebige Potential an, was gerade in der Luft 
"hängt". Und das ist alles andere als stabil.

Gruß
Andreas

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Andreas B. schrieb:
> Der Eingang nimmt jedes beliebige Potential an, was gerade in der Luft
> "hängt". Und das ist alles andere als stabil.
Von "Schwingen" ist das aber noch weit entfernt. Denn dafür wäre eine 
Mittkopplung nötig.

Der Grund des Übels ist ein Stück weiter im IC zu finden: wenn man sich 
die Eingangstreiberstudfe mal genau ansieht, dann findet man dort einen 
P-Kanal und einen N-Kanal Mosfet, deren Gates zusammengeschaltet sind. 
Und wenn sich nun die Eingangsspannung auf Vcc/2 einpendelt, leiten 
beide Transistoren "ein wenig". Deshalb fließt ein deutlicher Strom 
direkt von Vcc nach GND...

: Bearbeitet durch Moderator
von Erwin D. (Gast)


Lesenswert?

Andreas B. schrieb:
> Der Eingang nimmt jedes beliebige Potential an, was gerade in der Luft
> "hängt". Und das ist alles andere als stabil.

Das stimmt zwar, aber das würde ich nicht als "Schwingen" bezeichnen. 
Die AVR-Eingänge sind doch meist (oder sogar immer?) als Schmitt-Trigger 
ausgebildet. Durch die Hysterese kann eigentlich nichts schwingen, weil 
die sich normalerweise nicht im verbotenen Bereich aufhalten können.

von Peter R. (pnu)


Lesenswert?

Andreas B. schrieb:
> Genau so eben nicht. Offene Eingänge neigen zum Schwingen.

Ein Schwingen ist nicht das Problem, das passiert eher bei 
CMOS-Logikschaltungen durch kapazitives Übersprechen aus benachbarten 
Leitungen.

Die übliche Eingangsstufe beim µC enthält einen Inverter mit einem p- 
und einem n-Kanal-Mosfet.

Bei einwandfreiem Null oder Eins ist entweder der N- oder der P-Mosfet 
ganz gesperrt und kein Querstrom fließt.

Bei offenem Eingang stellt sich aber leicht ein Zwischenzustand ein, bei 
dem beide Mosfets nicht ganz gesperrt sind. Dann fließt ein Querstrom 
wie z.B. bei einer bipolaren Komplementär-Stufe, der erheblich höher ist 
als bei eindeutigem Pegel.

Mit einem internen pullup werden die Eingänge eindeutig auf Vcc 
gestellt. Ebenso gehts natürlich mit pulldown (extern) nur darf da 
natürlich der interne pullup nicht hergestellt sein.

von spess53 (Gast)


Lesenswert?

Hi

>Und das ist alles andere als stabil.

Na und? In den ATMEL-Datenblättern gibt es lediglich 'Empfehlungen' für 
den Umgang mit nicht angeschlossenen PINs. Von einem Fehlverhalten steht 
da kein Wort. Deckt sich auch mit meinen fast 20 jährigen Erfahrungen 
mit AVRs.

MfG Spess

von Birgit (Gast)


Lesenswert?

"Und viel Spaß dabei eine delay_ms zu schreiben die nicht mit 100%
CPU-Last vor sich hin heizt."

wo ist das Problem, bei einer Vergleichsmessung spielt das doch gar 
keine Rolle.
Pilzkopf

von Andreas B. (bitverdreher)


Lesenswert?

spess53 schrieb:
> Hi
>
>>Und das ist alles andere als stabil.
>
> Na und? In den ATMEL-Datenblättern gibt es lediglich 'Empfehlungen' für
> den Umgang mit nicht angeschlossenen PINs. Von einem Fehlverhalten steht
> da kein Wort. Deckt sich auch mit meinen fast 20 jährigen Erfahrungen
> mit AVRs.
>
> MfG Spess

Na ok. Aber den Pullup am Eingang einzuschalten tut doch nicht weh, 
oder?
Ich gebe auch zu, das ist bei mir eine Gewohnheit aus TTL Zeitemn.

Gruß
Andreas

von Εrnst B. (ernst)


Lesenswert?

hhi schrieb:
> Über einen 1 Ohm Widerstand in der Spannungsversorgung, an dem ich den
> Spannungsfall betrachte.

Dann bist du noch nicht recht weit mit dem Stromsparen.

Sobald du Sleep-Mode & co ausgereizt hast, nimm statt dem 
1-Ohm-Widerling eher einen 100 KILO-Ohm Widerstand, damit da wenigstens 
ein bischen Spannung zum Messen rumkommt.

Tipp: Parallel dazu eine 1N4148 (keine Schottky), um die 
Abblock-Kondensatoren am µC schneller aufzuladen.

von Besucher (Gast)


Lesenswert?

ecl schrieb:
> Jemand ne Idee was ich
> nutzen kann/soll (intern, das ich ne LED anschließen kann ist mir
> bewusst ;)
Atmel hat einen solchen Versuch in dem Papier "Picopower Basics" kurz 
beschrieben, vielleicht finden sich dort noch Anhaltspunkte.
Auch erinnere ich mich an einen Artikel in der Elektor, mit dem Titel 
"Jedes Mikrojoule zählt" oder so. Da ging's ebenfalls darum AVRs 
möglichst stromsparend zu bekommen. Aber frag mich jetzt nicht mehr 
welche Ausgabe das war, ist schon ein paar Jahre her...

http://www.atmel.com/Images/doc8349.pdf
http://www.atmel.com/images/avr4013.zip

von Arduinoquäler (Gast)


Lesenswert?

Lothar M. schrieb:
> Von "Schwingen" ist das aber noch weit entfernt. Denn dafür wäre eine
> Mittkopplung nötig.

Und die findet statt über Gnd und Vcc, je nach schlechter
Entkopplung. Die Mitkopplung bestätigst du hier ja auch:

Lothar M. schrieb:
> Deshalb fließt ein deutlicher Strom direkt von Vcc nach GND...

Und daher kann es auch zu Schwingungen kommen. Die bei offenen
74LSxxx und anderen (Stromfresser-)Gattern durchaus üblich waren.

von Erwin D. (Gast)


Lesenswert?

Arduinoquäler schrieb:
> Und daher kann es auch zu Schwingungen kommen. Die bei offenen
> 74LSxxx und anderen (Stromfresser-)Gattern durchaus üblich waren.

Die hatten aber auch keine Schmitt-Trigger an den Eingängen.
Ich kenn das auch, daß man Gatter in den verbotenen Bereich gequält hat 
(VCC/2) und die dann z.B. als NF-Verstärker mißbraucht hat. Aber eben 
nur reine Gatter. Mit Triggern am Eingang kann nichts schwingen...

von Schorsch (Gast)


Lesenswert?

Das hauptproblemist die Tacktquelle. ist diese aus braucht der fast gar 
keinen Strom mehr

von ASM Superprofi (Gast)


Lesenswert?

Die Stromaufnahme des Kerns hängt von der Spannung ab. Ein 
Spannungsabfall verursacht demnach eine geringere Stormaufnahme.

Obendrein steigt der Stromverbrauch ziemlich linear mit der Taktfrequenz 
an.

Im Datenblatt liest man die Werte einfach unter Typical Characteristics 
ab. Das misst man nicht, weil das schon jemand anders gemacht hat und 
das obendrein professionell.

Daumenregel: Mehr als 10mA zieht kein AVR. Die untere Grenze bei einem 
aktiven AVR liegt bei 120nA.

von ecl (Gast)


Lesenswert?

Ich danke euch für die vielen wirklich produktiven Beiträge.
Mal wieder ein Thread wo wirklich hauptsächlich Antworten kommen mit 
denen man was anfangen kann :)

von Andreas B. (bitverdreher)


Lesenswert?

ASM Superprofi schrieb:
> Die Stromaufnahme des Kerns hängt von der Spannung ab. Ein
> Spannungsabfall verursacht demnach eine geringere Stormaufnahme.
>
> Obendrein steigt der Stromverbrauch ziemlich linear mit der Taktfrequenz
> an.
>
> Im Datenblatt liest man die Werte einfach unter Typical Characteristics
> ab. Das misst man nicht, weil das schon jemand anders gemacht hat und
> das obendrein professionell.
>
> Daumenregel: Mehr als 10mA zieht kein AVR. Die untere Grenze bei einem
> aktiven AVR liegt bei 120nA.

Wie definierst Du einen aktiven AVR? 150nA bei 63kHz hatte ich schon.
1 Hz? Sollte dann eigentlich noch weiter runter gehen.

Gruß
Andreas

von Andreas B. (bitverdreher)


Lesenswert?

Besucher schrieb:

>
> http://www.atmel.com/Images/doc8349.pdf


Hier sehe ich gerade die Empfehlung von Atmel, eben doch Pullups an den 
Eingängen zu verwenden (5.2).
Also haben die alten Regeln doch noch ihre Gültigkeit.

Gruß
Andreas

Edit: Da wir gerade dabei sind: Wo findet man eigentlich die Infos zu 
den Ein- und Ausgangsstufen der AVRs

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

Andreas B. schrieb:
> Edit: Da wir gerade dabei sind: Wo findet man eigentlich die Infos zu
> den Ein- und Ausgangsstufen der AVRs

Im Eisschrank. Notfalls auch im jeweiligen Datasheet unter I/O-Ports.

: Bearbeitet durch User
von spess53 (Gast)


Lesenswert?

Hi

>Hier sehe ich gerade die Empfehlung von Atmel, eben doch Pullups an den
>Eingängen zu verwenden (5.2).
>Also haben die alten Regeln doch noch ihre Gültigkeit.

Kann man so pauschal nicht sagen. Hier aus dem Forum hat das mal jemand 
vor Jahren nachgemessen. Er kam auf ein paar µA pro offenen Pin. Da ist 
es schon ein Unterschied, ob der AVR in einem Gerät, das mit Energy 
Harvesting betrieben wird oder in einer Anlage mit mehrstelligen 
kW-Verbrauch verbaut ist. Im ersten Fall ist das interessant, im 
letzteren Fall interessiert das den Gasmann.

MfG Spess

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

Lesenswert?

Arduinoquäler schrieb:
> Die Mitkopplung bestätigst du hier ja auch:
> Lothar M. schrieb:
>> Deshalb fließt ein deutlicher Strom direkt von Vcc nach GND...
Das ist aber eine recht freie und tendenziell falsche Interpretation 
meiner Worte.
Die Eingangsstufe sieht prinzipiell so aus:
1
     Vcc --------o-----------
2
                 |
3
               |-|
4
           .---|>'
5
           |   |-.
6
           |     |
7
   Pin  ---o     o--------
8
           |     |
9
           |   |-'
10
           '---|<.
11
               |-|
12
                 |
13
    GND  --------o------------
Und wenn dort am "Pin" irgendwas im Bereich um Vcc/2 anliegt, dann 
leiten beide FETs. Das treibt den Strom ohne jegliche Schwingung rein 
statisch nach oben.
Irgendwelche Mitkopplungen, die unglücklicherweise noch dazukommen 
könnten, machen die Bilanz nicht besser.

> Und daher kann es auch zu Schwingungen kommen. Die bei offenen
> 74LSxxx und anderen (Stromfresser-)Gattern durchaus üblich waren.
Offene 74LS-Gatter haben nicht geschwungen, denn die Dinger sind dank 
der Transistoren stromgesteuert. Erst mit den CMOS-Gattern und der bei 
den TTL-Gattern gelernten Designpraxis (gelernt: offener Eingang = High) 
begann das Problem...

Andreas B. schrieb:
> Hier sehe ich gerade die Empfehlung von Atmel, eben doch Pullups an den
> Eingängen zu verwenden (5.2).
> Also haben die alten Regeln doch noch ihre Gültigkeit.
Theoretisch sollte das huetzutage nicht mehr nötig sein, denn der 
Eingangstreiber wird bei aktuellen CPUs (mega324) per Transmission Gate 
abgeklemmt und der Eingangstreiber per Fet auf Low-Pegel gezogen (im 
Screenshot die Ecke links unten).

: Bearbeitet durch Moderator
von (prx) A. K. (prx)


Lesenswert?

Lothar M. schrieb:
> per Tristatebuffer abgeklemmt

Ich nehme an, das sollte Transmission Gate heissen.

von Andreas B. (bitverdreher)


Lesenswert?

A. K. schrieb:
> Andreas B. schrieb:
>> Edit: Da wir gerade dabei sind: Wo findet man eigentlich die Infos zu
>> den Ein- und Ausgangsstufen der AVRs
>
> Im Eisschrank. Notfalls auch im jeweiligen Datasheet unter I/O-Ports.

Witzbold. Ich meine natürlich den genauen internen Aufbau.

spess53 schrieb:
Er kam auf ein paar µA pro offenen Pin. Da ist
> es schon ein Unterschied, ob der AVR in einem Gerät, das mit Energy
> Harvesting betrieben wird oder in einer Anlage mit mehrstelligen
> kW-Verbrauch verbaut ist. Im ersten Fall ist das interessant, im
> letzteren Fall interessiert das den Gasmann.
>
> MfG Spess

Es ging ja wohl ums Energie sparen. Da ich bei meiner o.g. Anwendung im 
Ruhezustand 0.2uA gebraucht habe, wären ein paar uA ein K.O Kriterium. 
Also der Gasmann kann ruhig Zuhause bleiben ;-)

Gruß
Andreas

von (prx) A. K. (prx)


Lesenswert?

Andreas B. schrieb:
>> Im Eisschrank. Notfalls auch im jeweiligen Datasheet unter I/O-Ports.
>
> Witzbold. Ich meine natürlich den genauen internen Aufbau.

Die Funktionsweise von CMOS-Technik setzt Atmel als bekannt voraus.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

A. K. schrieb:
> Ich nehme an, das sollte Transmission Gate heissen.
Ok, wer den Fachbegriff kennt...  ;-)
Das ganze Ding ist natürlich ein etwas komplexerer Tristatebuffer. Ich 
war so frei und habe den Fehler in meiner Beschreibung korrigiert, damit 
keiner auf mentale Abwege kommt.

: Bearbeitet durch Moderator
von Andreas B. (bitverdreher)


Lesenswert?

A. K. schrieb:
> Andreas B. schrieb:
>>> Im Eisschrank. Notfalls auch im jeweiligen Datasheet unter I/O-Ports.
>>
>> Witzbold. Ich meine natürlich den genauen internen Aufbau.
>
> Die Funktionsweise von CMOS-Technik setzt Atmel als bekannt voraus.

Also gehts Du davon aus, daß die Ein- und Ausgangsstufen genauso 
aussehen wie anno dazumal CD40xx?

von (prx) A. K. (prx)


Lesenswert?

Andreas B. schrieb:
> Also gehts Du davon aus, daß die Ein- und Ausgangsstufen genauso
> aussehen wie anno dazumal CD40xx?

Ja. Hast du einen anderen Vorschlag?

von Thomas E. (thomase)


Lesenswert?

Lothar M. schrieb:
> habe den Fehler in meiner Beschreibung korrigiert, damit
> keiner auf mentale Abwege kommt.

Puh, ich war schon kurz vor einer Krise.

Stromfresser sind auch BOD und der WD-Osz..

von neuer PIC Freund (Gast)


Lesenswert?

>Daumenregel: Mehr als 10mA zieht kein AVR

Nö. Hatte mal einen Benchmark bei 5V gemacht. Jede ms einen Wert vom ADC 
als printf über 115200 usart versenden. ADC + USART + 1 Timer immer an, 
ansonsten Däumchendrehen in der Mainloop, kein sleep. Alle Systeme mit 
11.0592MHZ Quarz betrieben. Kerntakt bei allen auch die 11MHz, d.h. der 
PIC hatte die 4-fach PLL an.

ATmega644                  18.8 mA
ATmega324P                 16.2 mA
ATmega328P                 13.0 mA
STM8S105C6                 10.6 mA
PIC18F45K50                 7.2 mA

AVR sind wahre Stromfresser unter den 8-bittern (oberhalb 3,6V). Sind 
halt alt. Da macht der STM auch keine gute Figur, als neuzeitliche 
Erscheinung.

von stefanus (Gast)


Lesenswert?

Komisch, so viel Strom mehmen meine AVR's nur mit offenen Eingängen auf.

von S. Landolt (Gast)


Lesenswert?

> ATmega328P                 13.0 mA

Diese eine Angabe wollte ich mal verifizieren, kann sie aber nicht 
bestätigen; stattdessen messe ich 7.4 mA, was übrigens recht gut mit dem 
Datenblatt übereinstimmt.

von neuer PIC Freund (Gast)


Lesenswert?

Shame on me. Die AVR-Messungen sind in der Tat für den Ar... Eines 
meiner Messgeräte liegt herrlichst daneben. Insofern danke S. Landolt.
:-)

von Peter D. (peda)


Lesenswert?

Ich hatte hier mal den Strom gemessen(ATmega48):
Beitrag "Re: AVR Sleep Mode / Knight Rider"

von Andreas B. (bitverdreher)


Lesenswert?

Leute,
warum glaubt ihr nicht einfach dem Datenblatt.
Da hat sich schon jemand die Mühe gemacht. Wenn das nicht stimmt, dann 
stimmt der Aufbau nicht. 100%.

Gruß
Andreas

von (prx) A. K. (prx)


Lesenswert?

Andreas B. schrieb:
> warum glaubt ihr nicht einfach dem Datenblatt.

Wir leben bekanntlich im postfaktischen Zeitalter. ;-)

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.