Mega16 verbraucht im Power-Down 0,5 mA - das kann nicht sein

Gast #160684
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...
Angehängte Dateien:
Gast #160685
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
Gast #160686
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!
Angehängte Dateien:
Gast #160687
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 ;)
Gast #160689
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
Gast #160690
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 ;)    !!
Gast #160692
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
Gast #160693
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.
Gast #160694
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.
Gast #160696
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.
Gast #160697
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).
Gast #160698
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]
Angehängte Dateien:

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