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 ;)
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
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.
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.
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.
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.
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.
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
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.
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
spess53 schrieb:> Womit willst du die Stromaufnahme messen?
Über einen 1 Ohm Widerstand in der Spannungsversorgung, an dem ich den
Spannungsfall betrachte.
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
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...
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.
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.
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
"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
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
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.
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.pdfhttp://www.atmel.com/images/avr4013.zip
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.
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...
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.
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 :)
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
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
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.
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
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).
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
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.
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.
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?
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?
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..
>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.
> 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.
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