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 ;)
An Peter: ...alle ports schliessen... wie meinst du das ? als input schalten ? pull-up widerstände ?
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
@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 ;) !!
:( 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.
"oder die Brown-Out Detection enabled" ??? Ich habe einen Atmega16, aber über das Feature habe ich noch nichts gehört. Was macht dieser Detektor?
> 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]
vergiss die selbstentladung der batterie nicht ! siehe wiki ultra low power
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.