Forum: Mikrocontroller und Digitale Elektronik Stromverbrauch Attiny85


von Sascha M. (sfx2k)


Lesenswert?

Hallo zusammen,

ich bin gerade etwas verwirrt und hoffe, dass Ihr für Aufklärung sorgen 
könnt.

Bevor ich jetzt ins Detail gehe; vielleicht könnt Ihr sofort sagen "Ja, 
das ist möglich", oder "Nein, das ist unmöglich".

Kann ein Attiny85 in einer Grundschaltung, in der er nur per ISP mit 
einem Programmierboard (5V) verbunden ist, und einem Programm, welches 
nichts macht (

int main(void)
{
    /* Replace with your application code */
    while (1)
    {
    }
}

)

einen Stromverbrauch von ~3mA haben?

Achso, was ich noch erwähnen sollte: der µC läuft mit internem 
Oszillator auf 1MHz.

Das posten eines Schaltplans spare ich mir jetzt erstmal, wenn Ihr den 
aber benötigt, bekommt Ihr ihn natürlich.

: Bearbeitet durch User
von Thordy (Gast)


Lesenswert?


von holger (Gast)


Lesenswert?

>und einem Programm, welches nichts macht

Das Programm macht aber was. Eine leere while(1) Schleife
bedeutet nicht das der Prozessor nichts tut. Er führt die
Schleife aus.

von Uwe D. (monkye)


Lesenswert?

Ja, siehe Datenblatt - im Idle typisch 2mA und ca. 8mA im Active Mode 
bei 8MHz und 5V Spannungsversorgung.

von Sascha M. (sfx2k)


Lesenswert?

Thordy schrieb:
> 
http://www.atmel.com/images/atmel-2586-avr-8-bit-microcontroller-attiny25-attiny45-attiny85_datasheet.pdf
>
> PDF Seite 162

Okay, wenn ich das richtig verstehe, dürfte er nicht soviel verbrauchen.
Hast Du eine Idee, warum das so sein könnte?

holger schrieb:
>>und einem Programm, welches nichts macht
>
> Das Programm macht aber was. Eine leere while(1) Schleife
> bedeutet nicht das der Prozessor nichts tut. Er führt die
> Schleife aus.

Okay, stimmt. Aber rechtfertigt das den hohen Stromverbrauch?

von Sascha M. (sfx2k)


Lesenswert?

Uwe D. schrieb:
> Ja, siehe Datenblatt - im Idle typisch 2mA und ca. 8mA im Active Mode
> bei 8MHz und 5V Spannungsversorgung.

Ja, hatte meinen ersten Beitrag editiert. Er läuft auf 1MHz.
Hatte sogar einmal mit 128 KHz probiert, da waren es ~2mA.

Was kann denn da bloss nicht stimmen? :(

von Uwe D. (monkye)


Lesenswert?

Also man kann ja den Timer und auch die ADCs abschalten, da sparst Du 
noch ein paar Mikroampere...

Faustregel: Pro MHz je 1mA

von THOR (Gast)


Lesenswert?

Schon die Peripherie abgeschaltet? Analog Comp, ADC?

Siehe: 
https://learn.sparkfun.com/tutorials/reducing-arduino-power-consumption

von Thomas E. (thomase)


Lesenswert?

Sascha M. schrieb:
> einen Stromverbrauch von ~3mA haben?

Da mußt du schon etwas konkreter werden. Mit einem Programm, was nichts 
macht, kannst du den Controller in den Powerdown Mode legen und dein 
Stromverbrauch geht nochmals um mind. Faktor 1000 zurück.

Da ein Controller den Hauptteil seines Controllerlebens meistens damit 
fristet, auf irgendwas zu warten, kann man ihn während dieser 
Wartezeiten in den Sleep versetzen. Damit kommt es nicht darauf an, 
wieviel Strom er im Maximum verbraucht, sondern wie oft und wie lange. 
Der sich daraus ergebende Durchschnittsverbrauch liegt häufig deutlich 
unter den von dir angesetzten 3mA.

von Uwe D. (monkye)


Lesenswert?

Bei 1 MHz reichen locker 2V und dann sind es nur noch 0,5mA... Und wie 
gerade von @Thor und @Thomas angeregt, einfach alles nicht benötigte 
Peripherie-Gedöns abschalten...

von Sascha M. (sfx2k)


Lesenswert?

Also, selbst im IDLE-Mode sind es noch immer 2,5 mA.

Peripherie habe ich, soweit ich das verstanden habe jetzt mal 
abgeschaltet.
Mein Code sieht jetzt folgendermaßen aus:

int main(void)
{

  ADCSRA &= ~(1 << ADEN);

  PRR |= (1 << PRADC) | (1 << PRUSI);

  ACSR |= (1 << ACD);

  set_sleep_mode(SLEEP_MODE_IDLE);
  sleep_mode();

  /* Replace with your application code */
  while (1)
  {

  }
}

und es schwankt immer noch um 2,5 mA.

Setze ich ihn in Power-Down, sind es 0 mA, was sicherlich richtig ist.

von Uwe D. (monkye)


Lesenswert?

...und den Watchdog Timer benutzen, damit der Prozessor alle 1..2 
Sekunden aufwacht, etwas macht und weiterpennt - dann geht problemlos 
Batteriebetrieb.

: Bearbeitet durch User
von Sascha M. (sfx2k)


Lesenswert?

Also es geht mir jetzt hier nicht darum, eine stromsparende Anwendung zu 
schreiben. Ich wollte sehen, wieviel der AVR bei meinem Programm so 
frisst und wollte dazu einen Test machen, was er verbraucht, wenn er bis 
auf die leere Schleife gar nichts macht.
Daher bin ich jetzt erwas überrascht, dass es so viel ist.

von Uwe D. (monkye)


Lesenswert?

Sascha M. schrieb:
> Also, selbst im IDLE-Mode sind es noch immer 2,5 mA
> Setze ich ihn in Power-Down, sind es 0 mA, was sicherlich richtig ist.

Ja, und bei welcher Spannung?

von Sascha M. (sfx2k)


Lesenswert?

Die Spannung kommt vom Programmierboard und beträgt fix 5V

von Thomas E. (thomase)


Lesenswert?

Sascha M. schrieb:
> wenn er bis
> auf die leere Schleife gar nichts macht

Der Controller macht nie gar nichts. Dabei ist es vollkommen egal, ob 
der das Wetter von morgen berechnet oder auf der Stelle hüpft.
Eine leere Schleife läuft mit 100% Prozessorlast!

von Uwe D. (monkye)


Lesenswert?

Sascha M. schrieb:
> Daher bin ich jetzt erwas überrascht, dass es so viel ist.

OK, das "viel" ist relativ.

Auf jeden Fall laufen moderne CPU's mit immer kleineren Spannungen, eben 
weil es um das Stromsparend geht. Und wenn Du den "Motor" im Leerlauf 
weiterleihern lässt, dann verbraucht er auch... ist wie im echten Leben 
?

von Peter D. (peda)


Lesenswert?

Mal die Pullups einschalten, damit die Eingänge nicht floaten.

von Sascha M. (sfx2k)


Lesenswert?

Peter D. schrieb:
> Mal die Pullups einschalten, damit die Eingänge nicht floaten.

Ei guck an. Habe den Code erweitert um

  PORTB |= (1 << PORTB0);
  PORTB |= (1 << PORTB1);
  PORTB |= (1 << PORTB2);
  PORTB |= (1 << PORTB3);
  PORTB |= (1 << PORTB4);
  PORTB |= (1 << PORTB5);

und schon sind es nur noch 542 uA :)

Vielen Dank Peter!
Und natürlich auch an die anderen für Eure Denkanstösse :)

von Sascha M. (sfx2k)


Lesenswert?

Das war übrigens dann auch der Grund, warum der Stromverbrauch nicht 
stabil war sondern immer gesprungen ist.

Jetzt pendelt der sich super ein :)

Peripherie aus und Idle: 542 µA
Peripherie aus und Active: 1,19 mA
Peripherie ein und Idle: 630 µA
Peripherie ein und Active: 1,27 mA

Alles bei 1 MHz int. Oszi. und 5V Spannung.

Das ist das, was ich mir so vorgestellt habe :)

: Bearbeitet durch User
von Alexander S. (alex998)


Lesenswert?

Gerade mal selber ausprobiert:

1MHz, 5V, am ISP, Pullups an, ADC usw. aus:


ohne Sleep:            ~1,4mA
SLEEP_MODE_IDLE:       ~1,3mA
SLEEP_MODE_PWR-DOWN    ~200uA

von Thomas E. (thomase)


Lesenswert?

Alexander S. schrieb:
> SLEEP_MODE_PWR-DOWN    ~200uA

Dann zieh mal den Programmer ab. Dann siehst du, wie wenig er wirklich 
verbraucht. 200µa im PD ist eher eine Katastrophe.

von Alexander S. (alex998)


Lesenswert?

Ohne ISP:

IDLE:       1,7mA
PWR_Down:   0,48uA

Sind die 0,48uA reell oder täuscht mich mein preiswertes Multimeter?
Wusste garnicht dass er ~400uA über den ISP zieht (im Idle)??

von Sascha M. (sfx2k)


Lesenswert?

Alexander S. schrieb:
> Ohne ISP:
>
> IDLE:       1,7mA
> PWR_Down:   0,48uA
>
> Sind die 0,48uA reell oder täuscht mich mein preiswertes Multimeter?
> Wusste garnicht dass er ~400uA über den ISP zieht (im Idle)??

Also bei mir sind es im Power-Down-Mode 0,3µA

von Alexander S. (alex998)


Lesenswert?

Ok, hätte mir die Frage auch selbst beantworten können, laut DB ungefähr 
0,5uA ohne WD bei 25°C. Da erscheinen  deine 0,3uA etwas wenig, Sascha.

von (prx) A. K. (prx)


Lesenswert?

Unbedingt reklamieren!

von Sascha M. (sfx2k)


Lesenswert?

Alexander S. schrieb:
> Ok, hätte mir die Frage auch selbst beantworten können, laut DB ungefähr
> 0,5uA ohne WD bei 25°C. Da erscheinen  deine 0,3uA etwas wenig, Sascha.

Okay, dann lügt wohl mein Billig-Multimeter :)

von Johannes S. (8n1)


Lesenswert?

Kommt auch auf die Spannung an. 0.5uA bei 5v @25 Grad, 0.3uA bei 3v.

Da ist ne schöne Grafik im DB.

von Johannes S. (8n1)


Lesenswert?

Oh. Stimmt nicht ganz. Es sind demnach sogar nur etwas unter 0.2uA bei 
3v.

: Bearbeitet durch User
von M. K. (sylaina)


Lesenswert?

Alexander S. schrieb:
> Sind die 0,48uA reell oder täuscht mich mein preiswertes Multimeter?

Könnte hinkommen aber hier wird dein Multimeter sicher auch schätzen. 
Selbst mein U1253B schätzt in dem Bereich ja mehr als es misst.

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.