Forum: Mikrocontroller und Digitale Elektronik Attiny1616: Stromverbrauch im Sleepmode


von Dirk (Gast)


Lesenswert?

Hallo,

ich versuche aktuell den Stromverbrauch meines Attiny1616 soweit, wie 
möglich zu senken.
Laut Datenblatt soll er im Power Down Mode 0,1µA bei 3V benötigen.

Ich messe aktuell jedoch immer mindestens 270µA.
Die Messung erfolgt i.d.R. mit angeschlossenem Atmel ICE, ziehe ich den 
ab, bleiben immer noch 200µA.

Hat jemand eine Idee, was ich vergessen oder übersehen haben könnte?
Main Clock läuft auf 20 MHz (hab auch schon den internen (Ultra Low 
Power) 32kHz Takt verwendet, das macht allerdings keinen Unterschied.

Fuses sind alle im Auslieferungszustand, d.h. BOD und WDT sind auch 
deaktiviert.

Das Programm besteht einfach nur aus folgenden Zeilen, es sollte also 
sämtliche Peripherie deaktiviert sein.
1
int main()
2
{
3
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
4
  sleep_enable();
5
  sleep_cpu();
6
}

Weiterhin ist für den Test keinerlei externe Beschaltung vorhanden (z.B. 
Pullup am Reset)

Messfehler spielen eventuell auch mit rein, aber doch nicht um den 
Faktur 2000?!

Viele Grüße
Dirk

von Gerd E. (robberknight)


Lesenswert?

Dirk schrieb:
> ich versuche aktuell den Stromverbrauch meines Attiny1616 soweit, wie
> möglich zu senken.

Was hast Du denn da außer dem Attiny1616 selbst noch am laufen?

Ein Spannungsregler mit hohem Eigenverbrauch, Leckströme etc. können 
einem in der µA-Größenordung schon ordentlich in die Suppe spucken.

Vielleicht am besten den Schaltplan posten.

> Messfehler spielen eventuell auch mit rein, aber doch nicht um den
> Faktur 2000?!

Wie und womit hast Du gemessen?

von Mark S. (voltwide)


Lesenswert?

Kannst Du die Schaltung mal ohne den Attiny messen?

von Dirk (Gast)


Lesenswert?

Gerd E. schrieb:
> Was hast Du denn da außer dem Attiny1616 selbst noch am laufen?
>
> Ein Spannungsregler mit hohem Eigenverbrauch, Leckströme etc. können
> einem in der µA-Größenordung schon ordentlich in die Suppe spucken.

Das meinte ich mit keine Zusatzbeschaltung. Der Attiny am Netzteil, mehr 
nicht.

>
> Wie und womit hast Du gemessen?
Mit meinem VC870.

> Kannst Du die Schaltung mal ohne den Attiny messen?
Wie gesagt, die Schaltung besteht aus dem Tiny am Netzteil.

von Andreas B. (bitverdreher)


Lesenswert?

Mit "set sleep Mode" schaltest Du nicht die Peripherie ab. Das mußt Du 
manuelll machen.

von Dirk (Gast)


Lesenswert?

Andreas B. schrieb:
> Mit "set sleep Mode" schaltest Du nicht die Peripherie ab. Das
> mußt Du
> manuelll machen.

Ich weiß, aber die Peripherie ist per default aus und ich habe sie nie 
aktiviert (der Code ist so, wie er da steht, auf dem Tiny)

Und selbst wenn, im Power Down Modus würde die Peripherie mit aus gehen.
Im Standby bleibt sie abhängig von den jeweiligen RUNSTBY Flags 
aktiviert.

von Andreas B. (bitverdreher)


Lesenswert?

Ich habe jetzt das DB für diesen Tiny  nicht durchgelesen, aber für die 
anderen Tinys muß man die Peripherie (ADC ect.) explizit ausschalten.
Andere Möglichkeit: Du hast offene Eingänge und der uC wird durch diese 
floatende Eingänge via IRQ wieder aufgeweckt.
Also vorher alle I/Os auf Ausgang setzen.

von Dirk (Gast)


Lesenswert?

Andreas B. schrieb:
> Ich habe jetzt das DB für diesen Tiny  nicht durchgelesen, aber
> für die
> anderen Tinys muß man die Peripherie (ADC ect.) explizit ausschalten.

Bist du dir da sicher? Ich habe gerade nur mal in das DB vom Attiny841 
geguckt, da ist auch alles (I2C, SPI) default deaktiviert.

> Andere Möglichkeit: Du hast offene Eingänge und der uC wird durch diese
> floatende Eingänge via IRQ wieder aufgeweckt.
Das kann ich ausschließen, wenn ich mir noch zusätzliche Code einbaue, 
der nach dem sleep_cpu() nen Pin auf High zieht, um zu messen, kommt da 
nichts.

Außerdem spricht 270µA schon für "nicht an".

> Also vorher alle I/Os auf Ausgang setzen.
Ok, jetzt bin ich ein wenig Sprachlos. Habe einfach mal alles auf 
Ausgang gesetzt, da verlässt der Verbrauch meinen Messbereich und zeigt 
nur noch 0,0µA an.

Das Ergebniss ist auf jeden Fall erstmal grandios, danke dafür!

Aber: Es sind weder auf den Pins noch global Interrupts aktiviert, der 
µC kann also nicht geweckt worden sein. Und es lässt sich ja, wie 
erwähnt, auch nachweisen, dass er schläft.

von Dirk (Gast)


Lesenswert?

Dirk schrieb:
>> Also vorher alle I/Os auf Ausgang setzen.
> Ok, jetzt bin ich ein wenig Sprachlos. Habe einfach mal alles auf
> Ausgang gesetzt, da verlässt der Verbrauch meinen Messbereich und zeigt
> nur noch 0,0µA an.
>

Nicht ganz, 0,05µA ;)

von Andreas B. (bitverdreher)


Lesenswert?

Dirk schrieb:
> Aber: Es sind weder auf den Pins noch global Interrupts aktiviert, der
> µC kann also nicht geweckt worden sein. Und es lässt sich ja, wie
> erwähnt, auch nachweisen, dass er schläft.

Offene Eingänge können schwingen, latchups erzeugen und viele unschöne 
Dinge mehr. Daher grundsätzlich nichtbenutzte Eingänge auf Ausgang 
schalten, pullup aktivieren oder extern auf definierten Pegel setzen. 
Das gilt für alle digitalen Schaltungen, nicht nur uCs.

von Andreas B. (bitverdreher)


Lesenswert?

Dirk schrieb:
> Bist du dir da sicher? Ich habe gerade nur mal in das DB vom Attiny841
> geguckt, da ist auch alles (I2C, SPI) default deaktiviert.

Tiny25-85:
PRR – Power Reduction Register
The Power Reduction Register provides a method to reduce power 
consumption by allowing peripheral clock sig-
nals to be disabled.
Bit 7 6 5 4 3 2 1 0
0x20 – – – – PRTIM1 PRTIM0 PRUSI PRADC
Read/Write R R R R R/W R/W R/W R/W
Initial Value 0 0 0 0 0 0 0 0
PRR
• Bits 7:4 – Res: Reserved Bits
These bits are reserved bits in the ATtiny25/45/85 and will always read 
as zero.
• Bit 3 – PRTIM1: Power Reduction Timer/Counter1
Writing a logic one to this bit shuts down the Timer/Counter1 module. 
When the Timer/Counter1 is enabled, opera-
tion will continue like before the shutdown.
• Bit 2 – PRTIM0: Power Reduction Timer/Counter0
Writing a logic one to this bit shuts down the Timer/Counter0 module. 
When the Timer/Counter0 is enabled, opera-
tion will continue like before the shutdown.
• Bit 1 – PRUSI: Power Reduction USI
Writing a logic one to this bit shuts down the USI by stopping the clock 
to the module. When waking up the USI
again, the USI should be re initialized to ensure proper operation.
• Bit 0 – PRADC: Power Reduction ADC
Writing a logic one to this bit shuts down the ADC. The ADC must be 
disabled before shut down. Note that the ADC
clock is also used by some parts of the analog comparator, which means 
that the analogue comparator can not be
used when this bit is high.

Muß nicht überall so sein. Ich habe mir angewöhnt alles grundsätzlich so 
zu setzen wie ich es haben möchte. Ich gehöere aber auch zu den Leuten, 
die Variablen in C auch mit 0 initialisieren. ;-)

von c-hater (Gast)


Lesenswert?

Dirk schrieb:

> Ich weiß, aber die Peripherie ist per default aus und ich habe sie nie
> aktiviert (der Code ist so, wie er da steht, auf dem Tiny)

Er meinte wohl die Peripherie jenseits der Innereien des ATtiny selber. 
Für die ist NIX garantiert. Jedenfalls nix, was nicht im DB der 
jweiligen Peripherie steht. Dabei ist insbesondere zu berücksichtigen, 
dass die allerwenigste Peripherie nach einem PowerUp inmittelbar in den 
stromsparendsten Zustand geht. Nein, das genaue Gegenteil ist der 
Regelfall, man muss sie erstmal aktiv dazu bewegen...

Aber auch der Tiny selber nimmt nicht automatisch den für den 
Stromverbrauch günstigsten Zustand an. Das betrifft inbesondere alle 
unbeschalteten IO-Pins. Die sind standardmäßig als "offener" Eingang 
konfiguriert. Dank der ziemlich hohen Eingangsimpedanz sorgt dann jeder 
EMV-Schmutz aus der Umgebung für ein lustiges Toggeln der Eingangsstufe, 
was je nach Frequenz des dominierenden EMV-Signals für durchaus 
merklichen Stromverbrauch sorgen kann.

Also: erste Maßnahme: alle unbenutzen Pins entweder hardwaremäßig auf 
ein definiertes Potential legen (VCC oder GND ist egal) oder 
softwaremäßig entweder als Ausgang konfigurieren (für stark 
EMV-belastete Umgebungen) oder zumindest den PullUp aktivieren.

> Und selbst wenn, im Power Down Modus würde die Peripherie mit aus
> gehen.

Lies' das verdammte Datenblatt, um eine Peilung für die Realität zu 
bekommen. Längst nicht alles geht einfach aus im PowerDown. Garantiert 
aus geht nur der IO-Takt. Für alles andere bist du selber 
verantwortlich...

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.