Forum: Mikrocontroller und Digitale Elektronik ATtiny44A - Problem beim sleep mode


von M. G. (ixil96)


Lesenswert?

Hallo,

um Strom zu sparen möchte ich meinen Tiny44A in den power down modus 
versetzen. Ich habe mich nun einige Zeit damit rumgespielt, komme aber 
nicht einmal in die Nähe von <1µA.

Ich habe nun ein Testboard genommen, wo außer dem Controller nichts 
läuft. Keine Spannungsteiler o.ä. was Strom verbrauchen kann.

Der Controller läuft mit 1MHz bei 3V. Außer CLKDIV8 sind keine Fusebits 
gesetzt. Rein zum Test habe ich diesen Code verwendet und den Controller 
im ISP Modus geflasht. Es hängt bei der Messung kein Debugger dran. 
Meine Messung ergab 28µA!
1
#include <avr/io.h>
2
#include <avr/sleep.h>
3
4
int main(void)
5
{
6
  DDRA = 0x00;
7
  DDRB = 0x00;
8
  
9
  MCUCR |= (1<<SE);            // Sleep enable
10
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);  // Sleep Mode "power down" vorbereiten
11
  
12
    while (1) 
13
    {
14
      sleep_mode();             // Start sleep mode
15
    }
16
}

Kann mir bitte jemand weiterhelfen?

von Peter II (Gast)


Lesenswert?

m. g. schrieb:
> Kann mir bitte jemand weiterhelfen?

Was hast du mit den IO-Pins gemacht? Floaten die rum?

von S. Landolt (Gast)


Lesenswert?

Davon ausgehend, dass Peter II mit
> Floaten die rum
Recht hat, ist
> Meine Messung ergab 28µA
doch ein sehr guter Wert!

Mal
PORTA = 0xFF;
PORTB = 0xFF;
einfügen und nochmals messen.

von Loban (Gast)


Lesenswert?

Das PRR – Power Reduction Register enthält einige Bits, mit denen der 
Takt einiger Module abgeschaltet werden kann.

Im Datenblatt, Seite 37 (Rev. 8183F–AVR–06/12), steht mehr.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

m. g. schrieb:
> Meine Messung ergab 28µA!

Mit welchem Messgerät?

von M. G. (ixil96)


Lesenswert?

Da ich keinen Timer  ADC  USI  aktiviert habe, brauche ich hier auch 
nichts deaktivieren.

Dadurch dass ich mit
PORTA = 0x00;
PORTB = 0x00;

alle IO auf null gesetzt habe hat sich auch nichts geändert!

Der Stromverbrauch ist nach wie vor 28µA-

von M. G. (ixil96)


Lesenswert?

Frank M. schrieb:
> m. g. schrieb:
>> Meine Messung ergab 28µA!
>
> Mit welchem Messgerät?

FLUKE 867B

von Loban (Gast)


Lesenswert?

ACSR – Analog Comparator Control and Status Register

Bit 7 – ACD: Analog Comparator Disable, schaltet den Komparator ab.

von S. Landolt (Gast)


Lesenswert?

> PORTA = 0x00;
> PORTB = 0x00;

Wie kamen Sie denn auf diese Idee?

von S. Landolt (Gast)


Lesenswert?

> Da ich keinen Timer  ADC  USI  aktiviert habe, brauche ich
> hier auch nichts deaktivieren.
> Dadurch dass ich mit
> PORTA = 0x00;
> PORTB = 0x00;

sind Irrtümer.


Zusammenfassend:

Peter II, pullups:
PORTA = 0xFF;
PORTB = 0xFF;

Loban, power-reduction:
PRR = (1<<PRTIM1)|(1<<PRTIM0)|(1<<PRUSI)|(1<<PRADC);
ACSR = (1<<ACD);

von M. G. (ixil96)


Lesenswert?

Also ich habe meinen Code nun dahingehend umgeändert. Am Stromverbrauch 
hat sich aber leider nichts geändert. Nach wie vor 28µA!
1
#include <avr/io.h>
2
#include <avr/sleep.h>
3
4
int main(void)
5
{
6
  DDRA = 0x00;
7
  PORTA = 0x00;
8
  DDRB = 0x00;
9
  PORTB = 0x00;
10
  
11
  PRR = (1<<PRTIM1)|(1<<PRTIM0)|(1<<PRUSI)|(1<<PRADC);  // power reduction register -> set all functions OFF
12
  
13
  MCUCR |= (1<<SE);            // Sleep enable
14
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);  // Set Sleep Mode "power down"
15
  
16
    while (1) 
17
    {
18
       sleep_mode();
19
    }
20
}

von S. Landolt (Gast)


Lesenswert?

Haben Sie den gestrigen Beitrag von 17:20 Uhr gelesen? Ich geb's auf.

von Peter D. (peda)


Lesenswert?

Ständige Stromverbraucher sind Watchdog, Brownout-Reset und 
Analog-Komparator, die mußt Du alle ausschalten.
Floatende Pins stören nicht, solange sie nicht als Aufwachinterrupt 
konfiguriert sind.

von M. G. (ixil96)


Lesenswert?

S. Landolt schrieb:
> Haben Sie den gestrigen Beitrag von 17:20 Uhr gelesen? Ich geb's auf.

Hallo S. Landolt,

im Forum sprechen wir uns grundsätzlich nicht per "Sie " an!
Aus deinem kurzen Kommentar weiß ich jetzt nicht so recht was du mir 
damit sagen möchtest!

Könntest du mir bitte deine Gedanken etwas ausführlicher erläutern?

von M. G. (ixil96)


Lesenswert?

Peter D. schrieb:
> Ständige Stromverbraucher sind Watchdog, Brownout-Reset und
> Analog-Komparator, die mußt Du alle ausschalten.
> Floatende Pins stören nicht, solange sie nicht als Aufwachinterrupt
> konfiguriert sind.

Die habe ich ja gar nicht aktiviert!

von Christian D. (chris83)


Lesenswert?

Der Analog-Komparator ist aber per default aktiv.
Und muss abgeschaltet werden.

von Peter D. (peda)


Lesenswert?

m. g. schrieb:
> Die habe ich ja gar nicht aktiviert!

Dann mußt Du nur den Analog-Komparator aussschalten, denn der wird nach 
dem Reset eingeschaltet.

von Loban (Gast)


Lesenswert?

m. g. schrieb:

> im Forum sprechen wir uns grundsätzlich nicht per "Sie " an!

1. Du sprichst nicht für mich, also ist das "WIR" fehl am Platze.

2. Wenn Herr Landolt andere siezt, dann signalisiert er, dass auch er 
gesiezt werden möchte.

3. Beitrag "Re: ATtiny44A - Problem beim sleep mode"

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Loban schrieb:
> 2. Wenn Herr Landolt andere siezt, dann signalisiert er, dass auch er
> gesiezt werden möchte.

Auszug aus https://de.wikipedia.org/wiki/Netiquette

   "Siezt man, kann das als Ausdruck von Distanz verstanden werden."

Im Usenet, dem Urvater aller Foren, wurde das Siezen übrigens als 
Stilmittel verwendet, um dem Gegenüber zu signalisieren, dass man ihn 
einfach nur scheiße findet. Daher wird das Siezen auch in Foren meist 
eher als Unhöflichkeit empfunden. Aber nicht jeder kannn über seinen 
Schatten springen: Wenn man bereits mehrere Beiträge von Herrn Landholt 
gelesen hat, dann weiß man auch, dass er grundsätzlich jeden siezt. Dann 
muss man das auch so akzeptieren.

Wenn aber jemand vom "Du" auf "Sie" wechselt, dann bedeutet es das oben 
beschriebene.

von M. G. (ixil96)


Lesenswert?

Loban schrieb:
> m. g. schrieb:
>
>> im Forum sprechen wir uns grundsätzlich nicht per "Sie " an!
>
> 1. Du sprichst nicht für mich, also ist das "WIR" fehl am Platze.
>
> 2. Wenn Herr Landolt andere siezt, dann signalisiert er, dass auch er
> gesiezt werden möchte.
>
> 3. Beitrag "Re: ATtiny44A - Problem beim sleep mode"


Ach du meine Güte...was für Sorgen!

Nun die Herren, wie SIE wünschen.

von Ralf G. (ralg)


Lesenswert?

Frank M. schrieb:
> Wenn aber jemand vom "Du" auf "Sie" wechselt, dann bedeutet es das oben
> beschriebene.
m. g. schrieb:
> Nun die Herren, wie SIE wünschen.
(Und dann auch noch rumbrüllen...)

von S. Landolt (Gast)


Lesenswert?

an m.g.:

Was ich meinte war Folgendes: Sie sollten einfach mal die gesammelten 
Maßnahmen, wie sie im Beitrag von 17:20 Uhr vorgestellt wurden, in Ihr 
Programm einfügen und schauen, was passiert. (Danach könnte man in einem 
zweiten Schritt eine nach der anderen wieder herausnehmen und so 
feststellen, welche wieviel gebracht hat.)

von Operator S. (smkr)


Lesenswert?

S. Landolt schrieb:
> Mal
> PORTA = 0xFF;
> PORTB = 0xFF;
> einfügen und nochmals messen.

m. g. schrieb:
> Dadurch dass ich mit
> PORTA = 0x00;
> PORTB = 0x00;
>
> alle IO auf null gesetzt habe hat sich auch nichts geändert!

S. Landolt schrieb:
>> PORTA = 0x00;
>> PORTB = 0x00;
>
> sind Irrtümer.
>
> Zusammenfassend:
>
> Peter II, pullups:
> PORTA = 0xFF;
> PORTB = 0xFF;

m. g. schrieb:
> Also ich habe meinen Code nun dahingehend umgeändert.
>
> int main(void)
> {
>   DDRA = 0x00;
>   PORTA = 0x00;
>   DDRB = 0x00;
>   PORTB = 0x00;

Omg

von M. G. (ixil96)


Lesenswert?

Fehler gefunden!

Es war ein überbrückter Linearregler, der Strom gesaugt hat.

Stromverbrauch nun 0,1µA

von S. Landolt (Gast)


Lesenswert?

Ich habe mir nun den Sachverhalt selbst angeschaut mit einem 
ATtiny84A-PU von 1127 bei 3.0 V, und bin etwas irritiert: folgendes 
(Assembler-)Programm
1
  ldi   tmp0,(1<<SE)+(1<<SM1)+(0<<SM0)  ; power-down
2
  out   MCUCR,tmp0
3
   sleep
4
  rjmp  pc-1
ergibt bereits eine Stromaufnahme von 0.11 uA.

von M. G. (ixil96)


Lesenswert?

Sieht doch i.O. aus!
Lt. Datenblatt rund 0,1µA

von S. Landolt (Gast)


Lesenswert?

Nein, ich verstehe es nicht ganz.

Dass das mit den pull-ups bei power-down nicht mehr nötig ist, hatte ich 
mal gewusst (aber wieder vergessen).
Dass das mit dem PRR nichts Messbares bringt, erklärt sich daraus, dass 
kein Takt mehr anliegt.
Was ist aber mit der band-gap-Referenz für den AC? Dass diese 
anscheinend auch abgeschaltet wird, wusste ich nicht.


(Trotzdem empfehlen sich alle drei Maßnahmen; spätestens bei einem 
anderen Power-save-mode als power-down werden sie wichtig)

von M. G. (ixil96)


Lesenswert?

Der AC wird im power down mode automatisch abgedreht.

Datenblatt 7.4.2 auf Seite 35

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Christian D. schrieb:
> Der Analog-Komparator ist aber per default aktiv.
> Und muss abgeschaltet werden.

Peter D. schrieb:
> Dann mußt Du nur den Analog-Komparator aussschalten, denn der wird nach
> dem Reset eingeschaltet.

 Wenn sich der Tiny in Sleep Mode befindet, wird Analog Comparator
 automatisch ausgeschaltet.
 Was nicht ausgeschaltet wird, sind ADC, BOD, WDT und Internal Voltage
 Reference.

von S. Landolt (Gast)


Lesenswert?

Ah - jetzt - ja.
'ACBG: Analog Comparator Bandgap Select' steht ja defaultmäßig auf 0.

von S. Landolt (Gast)


Lesenswert?

Da nun alles Wesentliche gesagt scheint, noch eine kleine Anmerkung zu
> Wenn aber jemand vom "Du" auf "Sie" wechselt, dann bedeutet
> es das oben beschriebene.

"Du, wat schreibs du da? Zeich dat emal her!"
  Hans Pfeiffer war gemeint. Er hatte bereits gehört, daß Bömmel seine 
Schüler bis in die Oberprima hinein duzte; nur wenn er ernstlich böse 
war, sagte er "Sie" und sprach hochdeutsch. Hans zeigte sein Schreibwerk 
und machte ein scheinheiliges Gesicht.
  "Bist du aber ne fleißige Jung! Damit du dat aber janz jenau behälts 
und dein Lebjottstag nit verjiß, da scheibste dat zu Haus fünfundzwanzig 
mal ab. Haben Sie mich verstanden?"

aus  Spoerl: Die Feuerzangenbowle

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.