Forum: Mikrocontroller und Digitale Elektronik Mega16 verbraucht im Power-Down 0,5 mA - das kann nicht sein


von Frank Wolf (Gast)


Angehängte Dateien:

Lesenswert?

hi, also warscheinlich hänge ich einfach - aber schon seit Stunden...

Folgendes: ich habe eine Platine bei der es darauf ankommt mit einem
Handyakku 3 monate hinzukommen - also lege ich den mega 16 schlafen,
bei der Messung waren dann 550 mA auf dem Messgerät (und ich sauer),
da ich davon ausging das es andere Bauteile der Platine sind habe
ich einen mega 16 schweben lassen und per hand verdrahtet:
- siehe Bild im Dateianhang -

bei meinem Minimalaufbau zeigt das Messgerät jetzt sogar .575 mA an.

Ich werd wahnsinnig, der Fehler liegt also vorrausichtlich im Programm.
Eigentlich bin ich davon ausgegangen das der Atmel mit den
Default-Werten nicht noch irgendeine Heizung an hat...

Sourcecode kommt gleich im nächsten Dateianhang... sekunde...

von Peter Küsters (Gast)


Lesenswert?

Ja, das Problem hatte ich auch schon.
Abhilfe: vor dem Powerdown sämtliche Ports schließen, sonst fliesst
auch im Powerdown noch Strom über die internen Pullup-Widerstände.

Dann reduziert sich der Strom auf wenige µA.

Peter

von Frank Wolf (Gast)


Angehängte Dateien:

Lesenswert?

Hier der Sourcecode im Anhang...

Im Prinzip starte ich den AVR nur und gehe dann schlafen:

_setport MCUCR,0b01100101 ; sleep zulassen und INT einstellen
sei                       ; enable global interrupts
sleep                     ; susse traume


Hab ich vergessen noch etwas auszuschalten ?
oder einschalten ?

Gebt mir mal nen klaps auf den Hinterkopf!

von Frank Wolf (Gast)


Lesenswert?

@Peter

_setport DDRB,0b00000000  ; PortB - Sicherung rausdrehen
_setport MCUCR,0b01100101 ; sleep zulassen und INT einstellen
sei                       ; enable global interrupts
sleep                     ; susse traume

jetzt bin ich auf .535 hat tatsächlich .040 gespart ;(
muss ich noch den comperator abschalten oder so was?

@cdg --> cdg = ~~~strange~~~
@jens no ned provozieren lassen ;)

von dicky (Gast)


Lesenswert?

An Peter: ...alle ports schliessen... wie meinst du das ? als input
schalten ? pull-up widerstände ?

von dave (Gast)


Lesenswert?

Datenblatt:
Power Consumption at 1 MHz, 3V, 25°C for ATmega32L
– Active: 1.1 mA
– Idle Mode: 0.35 mA
&#8211; Power-down Mode: < 1 µA

Deine Angabe kommt doch ganz nah an den Idle Mode..
110 = Standby
010 = Power Down

Bei Standby ist der Haupttakt noch an, bei PowerDown nicht, probiers
damit mal.


Musst du nicht auch Bit7 aktivieren?
&#8226; Bit 7 &#8211; SE: Sleep Enable
The SE bit must be written to logic one to make the MCU enter the sleep
mode when the
SLEEP instruction is executed. To avoid the MCU entering the sleep mode
unless it is
the programmers purpose, it is recommended to write the Sleep Enable
(SE) bit to one
just before the execution of the SLEEP instruction and to clear it
immediately after waking
up.

dave

von Frank Wolf (Gast)


Lesenswert?

@dave
Vorsicht der Mega16 nicht der Mega32!

Beim Mega 16:
• Bit 6 – SE: Sleep Enable

MCUCR Mega16:
7   6   5   4   3    2     1     0
SM2 SE SM1 SM0 ISC11 ISC10 ISC01 ISC00
0   0   0   0   0     0     0    0

ich habe eingestellt:
SM2 SE SM1 SM0 ISC11 ISC10 ISC01 ISC00
0   1   1   0   0    1     0     1

IMHO -->
SM2 SM1 SM0 Sleep Mode
0   0   0   Idle
0   0   1   ADC Noise Reduction
0   1   0   Power-down <-------eingestellt!!!!!!!!!!
0   1   1   Power-save
1   1   0   Standby(1)
1   1   1   Extended Standby(1)

Schade! Ich wünschte mir das die Lösung so einfach währe
das ich einfach das Datenblatt verwechselt habe ;)    !!

von dave (Gast)


Lesenswert?

:( Ich dachte, ich lad mir nicht extra das Datenblatt... Atmel kanns
einem aber auch schwer machen ;)

Haste mal alle Eingänge als Ausgänge gesetzt?

dave

von Frank Wolf (Gast)


Lesenswert?

@dave
versuche ich morgen als erstes, ich hatte vor 3 monaten kurz
einen mega8 probiert der hatte igendwas um die 50 im uA angezeigt
komisch das der mega16 so störrisch ist :(

@all
warum kann hier keiner mal schreiben:
"Wolf du bist ein Säckel, setz einfach das Bit X im Register Y!"

heul

von Freak5 (Gast)


Lesenswert?

Wolf du bist ein Säckel, setz einfach das Bit X im Register Y!
g
Das musste ich einfach schreiben.

Naja, ich habe keine Ahnung. Ich fange selber erst an und kenne die
Spezialfunktionen noch nicht. Außerdem programmiere ich manchmal etwas
umständlich.

Wenn das hier nicht passt, dann könnt ihr diesen Beitrag auch einfach
löschen.

von René König (Gast)


Lesenswert?

Wenn ich das richtig sehe, hast Du jede Menge offene Eingänge. Diese
Eingänge mußt Du auf Pegel bringen. Am Einfachsten ist es, wenn Du die
eingebauten PullUp-Widerstände aktivierst (das wird erst dann zum
Problem, wenn am PIN etwas angeschlossen ist; in diesem Fall könnte
Strom über den Widerstand aus dem PIN heraus durch die externe
Beschaltung fliessen).

Alternativ kannst Du, wie bereits vorgeschlagen, die PINs als Ausgänge
konfigurieren. Ob Du hierbei besser eine Null oder eine Eins ausgibst,
ist von der externen Beschaltung abhängig (und in Deinem Fall egal).

Wenn der Mega8 im PowerDown satte 50 µA verbraucht, sind noch der
Analog-Comparator und/ oder die Brown-Out Detection enabled. Schalte
das aus, wenn Du's nicht brauchst. Darauf mußt Du übrigens auch beim
Mega16 achten.

von Freak5 (Gast)


Lesenswert?

"oder die Brown-Out Detection enabled"
???
Ich habe einen Atmega16, aber über das Feature habe ich noch nichts
gehört. Was macht dieser Detektor?

von René König (Gast)


Lesenswert?

> Was macht dieser Detektor?

Er überwacht die Betriebsspannung und löst beim Unterschreiten eines
bestimmten Wertes einen Reset aus. Die genaue Erklärung findest Du im
aktuellen Dateblatt des Mega16 auf Seite 38.

von René König (Gast)


Lesenswert?

Da fällt mir noch ein: Das JTAG-Interface darf nicht enabled sein, wenn
da nichts dranhängt. Also erstmal das Bit JTRF in MCUCSR checken und
dann, wenn das Bit nicht gesetzt ist, zwei mal JTD setzen (ebenfalls
MCUCSR).

von Frank Wolf (Gast)


Angehängte Dateien:

Lesenswert?

DANKE! TNX! die Eingänge waren es!

- siehe Bild im Anhang -

Ich habe alle offenen Eingänge zu Ausgängen (Low) definiert
--> 1 uA

Mann, da währ ich in 10 Jahren nicht drauf gekommen,
ich hatte eigentlich gedenkt das ein I/O als Eingang
nicht mehr verbraucht als als Ausgang...

Meine eigenliche Platine verbraucht jetzt .169 mA
(2,3 Spannungsteiler...) damit komme ich 6 Monate
locker hin freu

Nochmal Danke an alle ;) Peace! [int]

von marcel (Gast)


Lesenswert?

vergiss die selbstentladung der batterie nicht ! siehe wiki ultra low
power

von dicky (Gast)


Lesenswert?

man hast du viele handies...

von Jörn G. (Gast)


Lesenswert?

Analogen Comparator abschalten spart auch gut:

ACSR = (1<<ACD);    //Set "Analog Comparator Disable"-Flag

jörn g.

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.