Stromverbrauch Attiny85

OP #4828946
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.
OP #4828966
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?
#4828976
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.
OP #4828989
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.
OP #4828995
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.
OP #4829026
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 :)
OP #4829036
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 :)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren