Forum: Mikrocontroller und Digitale Elektronik AtTiny48 Stromprobleme im PowerDown (ASM)


von Fritzl W. (friz)


Angehängte Dateien:

Lesenswert?

Hy, ich programmiere zwar nicht zum ersten mal AVR´s aber ich mache 
gerade mein erstes ernsthaftes Projekt mit einem AtTiny48 und habe das 
erste mal Sleep benutzt. Das funktioniert ja alles recht gut, auch mit 
schlafenlegen und Stromsparen.

Doch: Ich komme einfach nicht unter 17uA Stromverbrauch.

Bin seit einer Woche am lesen, Googln und ausprobieren doch er geht 
nicht runter. Heute hab ich einen 2ten, gebrauchten, Tiny in Dip-Gehäuse 
mit dem selben Programm ausprobiert um auf nummer sicher zu gehen, und 
siehe da, 450 uA Stromverbrauch. Es ist zum Mäuse melken.

Habe meines Wissens alles abgeschaltet ausser die PCINT Eingänge zum 
aufwachen. Da sind die Pullups an und die Eingänge hängen in der Luft 
bis jemand den Taster drückt(gegen Masse). Habs auch schon andersrum 
ausprobiert (gegen VCC), ohne Erfolg.

Kann es sein das ich mit Dip-Gehäuse nicht auf die >0,1uA bei 1,8V komme 
wie es im DatenBlatt steht? Müsste nach meinen Überlegungen egal sein 
welches Gehäuse. Mich irritiert auch die enorme Schwankung zwischen 2 
Tinys die aus der gleichen Verpackung und vom gleichen Shop kommen.

Häng mal ein Bisschen Code an damit man sich ein Bild machen kann.

Vielen Dank erstmals fürs lesen und eventuell Helfen!
1
//*********Pin Change Interrupt ******************//
2
ldi     r16,  (1<<pcint0|1<<pcint1|1<<pcint2|1<<pcint3)
3
sts     pcmsk0, r16                    //Tasten [4-1] als Interrupt Qelle
4
ldi  r16,  (1<<pcie0)
5
sts  pcicr,  r16                       //Interrupt PCINT0 freigeben
6
//***************Analog Digital Converter*******//
7
ldi  r16, (1<<refs0|1<<adlar|0<<mux3|0<<mux2|0<<mux1|0<<mux0)
8
sts  admux,  r16
9
ldi  r16,  (1<<aden|0<<adps2|1<<adps1|1<<adps0)
10
sts  adcsra,  r16                      //AD-Wandler einschalten
11
//*****************Sleep Mode ******************//
12
ldi  r16,  (1<<sm1|0<<sm0|1<<se)
13
out  smcr, r16                         //Power Down Modus aktiviert
14
//*****************Power Reduction *************//
15
ldi  r16,  (1<<prtwi|1<<prtim0|1<<prtim1|1<<prspi)
16
sts  prr,  r16                         //TWI, SPI, Timer [0-1] ausschalten
17
ldi  r16,  (1<<acd)
18
out  acsr,  r16                        //Analog Comperator ausschalten
19
//***********Digitl Input Disable Register******//
20
ldi  r16,  (0<<ain1d|0<<ain0d)
21
sts  didr1,  r16                       //Digitale Signale an PD[6-7] zulassen
22
ldi  r16,  255
23
sts  didr0,  r16                       //keine Digitalen Signale an PortC zulassen
24
//***************Stack Pointer*****************//
25
ldi  r16,  HIGH(RAMEND)
26
out  sph,  r16
27
ldi  r16,  LOW(RAMEND)
28
out  spl,  r16
29
30
//****************Sleep Mode vorbereitung*******************//
31
schlafenszeit:
32
ldi  r16,  0
33
out  portd,  r16      
34
cbi  portb,  6
35
cbi  portb,  7                        //PullUps aus für Dil-Schalter
36
    
37
ldi  r16,  0
38
out  ddrc,  r16
39
out  portc,  r16                      //P0rtC Eingänge PullUps aus
40
41
cbi  ddrb,  4
42
cbi  ddrb,  5
43
sbi  portb,  4 
44
sbi  portb,  5                        //unbenutzte Ausgänge
45
46
ldi  r16,  (0<<aden)
47
sts  adcsra,  r16                     //ADC ausschalten
48
49
ldi  r16,  (1<<ain1d|1<<ain0d)
50
sts  didr1,  r16                      //Digitale Signale an PD[6-7] ausschalten
51
52
ldi  r16,  (1<<pradc)
53
sts  prr,  r16                        //ADC ausschalten
54
55
sei
56
    
57
sleep

: Bearbeitet durch User
von Flo311 (Gast)


Lesenswert?

Interessant wäre eventuell auch wie dein Schaltplan aussieht. Du kannst 
durchaus allein schon durch Pull-Ups an nem FET oder ähnlichem einen 
gewissen Strom "verbrauchen".

von Fritzl W. (friz)


Angehängte Dateien:

Lesenswert?

Das is zwar kein richtiger Schaltplan, aber is auch nicht viel dran. Sry

von Falk B. (falk)


Lesenswert?

@ friedrich werdnik (friz)

>    Sleepmode.PNG
>    Sleepmode1.PNG
>    20 KB, 15 Downloads

Schon mal was von Netiquette gehört? Und Bildformaten? Warum 
posten andere Leute einfach den Quelltext als Textdatei im Anhang?

>Doch: Ich komme einfach nicht unter 17uA Stromverbrauch.

In welchem Modus?

>siehe da, 450 uA Stromverbrauch. Es ist zum Mäuse melken.

Wenn deine DIPs eingeschaltet sind und damit die Pins auf GND ziehen, 
fließt über den internen Pull-Up eine Strom, ist ja logisch.
Lösung. An den Pins, die LOW sind, die Pull Ups abschalten.

PORTD &= PIND;

Die Pull-Ups ganz auszuschalten ist schlecht, denn dann floaten deine 
Eingänge!

>Kann es sein das ich mit Dip-Gehäuse nicht auf die >0,1uA bei 1,8V komme
>wie es im DatenBlatt steht?

Nein, daran liegt es nicht.

>Müsste nach meinen Überlegungen egal sein
>welches Gehäuse.

Ist es auch.

>Häng mal ein Bisschen Code an damit man sich ein Bild machen kann.

Ein BILD ist hier aber nicht das Mittel der Wahl.

von Fritzl W. (friz)


Lesenswert?

Sorry, ich bekomm die Fotos nicht raus.
Falls die jemand löschen kann, dann bitte ich darum.
Ich wollte die FuseBits gleich mitPosten. War nicht bös gemeint.

Bei den DIL_Schaltern sind die Pullups aus, nur an den Tasten sind sie 
an um aufwachen zu können.


Falk Brunner schrieb:
> PORTD &= PIND;
??

von Manfred H. (eas)


Lesenswert?

Hallo

ich habe ein ähnliches Problem gehabt. Der Stromverbrauch war im 
Spleepmode wesentlich höher als angegeben.
Das Problem war der Brownout Detector. Brownout in den Fuses abschalten 
und der Stromverbrauch sollte unter die Messgrenze fallen, außer man hat 
Highend Messgeräte.

von c-hater (Gast)


Lesenswert?

Manfred H. schrieb:

> ich habe ein ähnliches Problem gehabt. Der Stromverbrauch war im
> Spleepmode wesentlich höher als angegeben.
> Das Problem war der Brownout Detector. Brownout in den Fuses abschalten

Der Brownout-Detektor hat tatsächlich einen signifikanten 
Energieverbrauch. Trotzdem ist es nicht unbedingt das Klügste, ihn 
einfach über die Fuses abzuschalten. Die Leute, die das tun, sind dann 
auch die, die sich darüber aufregen, daß plötzlich "unerkärlicherweise" 
Teile des EEPROM oder Flash mit Müll gefüllt sind.

Nunja, bei Mega48 gibt's keine andere Möglichkeit, aber es gibt ja auch 
einen Haufen modernere Megas. Und die bieten die Möglichkeit, den 
Detektor nur im Sleepmodus lahmzulegen. Das ist sehr viel besser, denn 
bei laufendem Takt bleibt dessen Schutzfunktion erhalten und bei 
stehendem Takt (wenn der Detektor sowieso nutzlos ist) spart man eben 
Strom.

von Chris (Gast)


Lesenswert?

Hast du den Analog Comparator ausgeschaltet?
Der ist per default eingeschaltet und verbaucht auch etwas Strom.

von Falk B. (falk)


Lesenswert?

@ friedrich werdnik (friz)

>Bei den DIL_Schaltern sind die Pullups aus,

Was falsch ist.

>> PORTD &= PIND;
>??

Damit schaltet man nur die Pull-Ups aus, die vom DIP-Schalter auf LOW 
gezogen werden! Die restlichen Pins, die NICHT auf LOW gezogen werden 
müssen aktive Pull-Ups behalten!

Für Assemblerleute

in r16, pind
in r17, portd
or r17, r16
out portd, r17

von Fritzl W. (friz)


Lesenswert?

Dank erstmal für die Anregungen.

BrownOut ist deaktiviert über FUSE´s und habe ich schon mit Software 
deaktiviet was aber keinen unterschied brachte. Ich hab das auch über 
die Simulation im AtmelStudio kontrolliert, ob er auch deaktiviert war.

ADC und AC habe ich deaktiviert (sofern ich das richtig gemacht habe):
friedrich werdnik schrieb:
> ldi  r16,  (0<<aden)
> sts  adcsra,  r16                     //ADC ausschalten
friedrich werdnik schrieb:
> ldi  r16,  (1<<acd)
> out  acsr,  r16                       //Analog Comperator ausschalten

@Falk:
Den Ansatz werde ich mal probiern sobald die neuen Tiny´s da sind.

Die neuen werde ich mit Handschuhen und isolierter Pinzette einsetzen um 
auf nummer sicher zu gehen. Die schwankungen zwischen den Beiden Tiny´s 
(450uA vs.17uA bei gleichen Fuse und Programm) kommen mir komisch vor . 
Hab da anscheinend irgendwas kaputt gemacht.

von Falk B. (falk)


Lesenswert?

@ friedrich werdnik (friz)

>Die neuen werde ich mit Handschuhen und isolierter Pinzette einsetzen um
>auf nummer sicher zu gehen.

Nicht nötig. Vermeide aber ESD-Quellen wie Acrylpullover etc.

>Die schwankungen zwischen den Beiden Tiny´s
>(450uA vs.17uA bei gleichen Fuse und Programm) kommen mir komisch vor .
>Hab da anscheinend irgendwas kaputt gemacht.

Nein, das kann auch einfach ein offener IO-Pin sein, der einmal zufällig 
nahe 0V oder VCC "schwebt" oder auch nahe VCC/2 und damit ordentlich 
Querstrom im AVR erzeugt.

von Fritzl W. (friz)


Lesenswert?

Es ist vollbracht!

Heute habe ich 2 neue Tiny´s bekommen.
Diese brauchen jetzt auch weniger als 1uA.

Die beiden Alten brauchen mit dem gleichen Programm noch immer 17 bzw. 
380uA. Dürfte bei denen echt was kaputt gemacht haben.

Alle Pins sind jetzt Ausgänge auf Masse, ausser den Tasten, diese haben 
Pullups .

Vielen Dank nochmal an alle die sich mit meinem Problem beschäftigt 
haben.

Ps.: Hat ein wenig länger gedauert bis es geklappt hat. Musste im 
Atmelstudio 6.0 ein neues Projekt mit neuem Namen anlegen und den 
Quelltext hineinkopieren, erst dann hat es die Änderungen übernommen. 
Komisch, is aber so. Das musste ich schon öfter machen. Weiss vieleicht 
jemand woran das liegen könnte?
Hab eine Verknüpfung mit dem Ordner wo die Projekte angelegt werden am 
Desktop liegen, denke aber nicht das stören sollte.

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.