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...
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
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!
@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 ;)
Datenblatt:
Power Consumption at 1 MHz, 3V, 25°C for ATmega32L
– Active: 1.1 mA
– Idle Mode: 0.35 mA
– 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?
• Bit 7 – 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
:( 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
@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
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.
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.
> 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.
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).
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]
Eine eigene Frage?
Dieser Thread ist über 21 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.