Hallo zusammen, ich würde gerne den Power-Down-Stromverbrauch meiner Atmega168-Schaltung noch weiter vermindern. Die angeratenen Sachen wie disable von UART, Watchdog etc. habe ich angewandt, trotzdem verbaucht die Schaltung im power-down-Mode noch ca. 0,75mA. Das einzige was mir noch einfällt ist die Reduzierung des Taktfrequenz, allerdings funktioniert das Programm überhaupt nicht mehr, wenn ich das Häkchen in der CKDIV-Fusebit drinlasse. Standardmäßig ist das Fuse ja gesetzt, und der Takt durch 8 geteilt, was ich für einen geringeren Stromverbrauch ja bräuchte, nur leider funktioniert es eben nicht. Könnt ihr mir vielleicht einen Tip geben ? Danke, Michael
Michael schrieb: > trotzdem verbaucht die Schaltung im power-down-Mode noch ca. > 0,75mA. Das klingt so, als würde da noch ein Ausgang Strom verlangen. Jedes mA, was der MC im Powerdown am Ausgang liefern muss, geht in die Bilanz. Auch vor sich hin floatende Eingänge ziehen oft Strom. Michael schrieb: > allerdings funktioniert das Programm überhaupt nicht mehr, wenn ich das > Häkchen in der CKDIV-Fusebit drinlasse. Tja, das ist wohl für 8MHz geschrieben. Ohne das ganze auf 1MHz umzutippen (und das betrifft z.B. auch etwaige Timereinstellungen) und neu zu kompilieren, wird das nichts.
Michael schrieb: > Das einzige was mir noch einfällt ist die Reduzierung des Taktfrequenz Hat bei Powerdown keinen Sinn, denn da sind die Oszillatoren sowieso ausgeschaltet. 0,75 mA sind für Powerdown eindeutig zu viel. Wenn man dir helfen soll, musst du aber mehr verraten.
@ Michael (Gast) >angewandt, trotzdem verbaucht die Schaltung im power-down-Mode noch ca. >0,75mA. Dann stimmt was nicht. Offene Eingänge? Angeschlossene Lasten? Falscher Sleep Mode? >Das einzige was mir noch einfällt ist die Reduzierung des Taktfrequenz, Nö, denn im Power Down sind ALLE Oszillatoren ausgeschaltet, siehe Sleeep Mode. >allerdings funktioniert das Programm überhaupt nicht mehr, wenn ich das >Häkchen in der CKDIV-Fusebit drinlasse. Weil dein Prgramm auf die hohe, korrekte Taktdrequenz angewiesen ist, wie die meisten Programme. >Könnt ihr mir vielleicht einen Tip geben ? https://www.mikrocontroller.net/articles/Ultra_low_power
Vielen Dank für die raschen Antworten. O.K., dann liegts nicht an der Taktfrequenz, spielen die data direction bits dann eine Rolle ? Kann ich hier Strom sparen, indem ich diese während des sleeps verändere im Vergleich zum Standard-Modus ?
Michael schrieb: > Kann ich hier Strom sparen, indem ich diese während des sleeps verändere > im Vergleich zum Standard-Modus ? Jein. Nochmal: du musst schon ein wenig mehr über dein Projekt schreiben, was hängt an den Ausgängen dran, was passiert mit den Dingen, die da dran hängen. Sleep bedeutet nicht, dass irgendwelche Ausgangstreiber abgeschaltet werden, sondern alle IOs bleiben so, wie sie zuvor waren.
Plenken ist ein sehr schlechte Angewohnheit. Das nicht posten von Quelltexten auch.
Die Angaben zwischen 5V und 3V bzw 1,8V sind auch Relevant. Das Optimum erreicht man nur bei 1,8V/1Mhz. Hab die Tabelle zufällig auf da ich auch auf 100uA kommen möchte. Ich bin noch mit nem 32khz Quarz, 8Mhz Intern im Powersave Modus bei 8ma, mein Plan ist nun alles wegschalten und auf Bedarf TWI wieder zuschalten und notfalls auch auf die 1Mhz runter. Im Prinzip biste doch schon gut dabei.
@ Michael (Gast) >spielen die data direction bits dann eine Rolle ? Ja! ALLE unbenutzen IOs müssen entweder als Ausgang oder als Eingang mit aktiviertem, internen Pull-Up Widerstand konfiguriert werden. >Kann ich hier Strom sparen, indem ich diese während des sleeps verändere >im Vergleich zum Standard-Modus ? Nein. Es reicht, das einmal richtig einzustellen.
Bald schrieb: > Plenken ist ein sehr schlechte Angewohnheit. Das nicht posten von > Quelltexten auch. Das nicht nur der Controller Strom zieht, sondern die komplette Schaltung ist mir klar. Doch diese kann ich ja nicht mehr weiter reduzieren. Eigentlich kann ich ja nur noch an den Ausgängen Strom sparen, indem ich eben die Ausgangstrieber vielleicht ausschalte (wie geht das ?), während des Sleep-Modus. Konrket hängt über SPI ein Sensor und ein DOG-Display (braucht ca. 0,2mA) und ein Taster (zum Aufwachen) an der Schaltung. Muss ich hier die DD-Register auf high oder low schalten um hier Strom zu sparen ? Oder bringst was, wenn ich die Portpins, an denen der SPI hängt, auf low schalte ?
Falk B. schrieb: > Ja! ALLE unbenutzen IOs müssen entweder als Ausgang oder als Eingang mit > aktiviertem, internen Pull-Up Widerstand konfiguriert werden. Danke, das werde ich (leider heute nicht mehr) ausprobieren. Ob Eingang oder Ausgang wird stromspartechnisch egal sein, oder ?
Philipp K. schrieb: > Das Optimum erreicht man nur bei 1,8V/1Mhz. Keineswegs. Bei 1 MHz brauchst du eben auch 8mal so lange zum Rechnen wie bei 8 MHz, entsprechend kannst du dich nicht so lange schlafen legen. Was wirklich dabei das Optimum ist, hängt von einer Reihe Einflussfaktoren ab. > Hab die Tabelle zufällig auf da ich auch auf 100uA kommen möchte. Du sprichst von Idle mode, der TE von Powerdown. Das sind zwei sehr verschiedene Paar Schuhe.
Michael schrieb: > Ob Eingang oder Ausgang wird stromspartechnisch egal sein, oder ? Solange der Ausgang keinen Strom zieht oder treibt: ja. Strom treiben kann ein Ausgang auch durch Kriechströme (feucht werdende Flussmittelreste). Das spielt aber erst eine Rolle, wenn du auf 1 µA oder weniger runter kommen willst.
Du kannst auch an den Eingängen Strom sparen, indem du sicherstellst, dass sie einen eindeutigen Logikpegel haben. Ganz schlecht sind unbeschaltete unbenutzte Eingänge. Die schaltest du besser als Ausgang um oder aktivierst Pull-Up Widerstände. Siehe http://www.ti.com/lit/an/scba004c/scba004c.pdf
Jörg W. schrieb: > Du sprichst von Idle mode, der TE von Powerdown. Das sind zwei sehr > verschiedene Paar Schuhe. Ich spreche von Power_Save und nicht Idle. Jörg W. schrieb: > Keineswegs. Bei 1 MHz brauchst du eben auch 8mal so lange zum Rechnen > wie bei 8 MHz, entsprechend kannst du dich nicht so lange schlafen > legen. Wer jeden uA sparen will rechnet nicht viel und ist eigentlich selten Powered. Sonst würde das ja auch keinen Sinn machen.
Unter 300µA muss ich mit dem Stromverbrauch gar nicht können. Leider muss ich bei 5V Spannungsversorgung bleiben wegen des Sensors. Die unbeschalteten, unbenutzten Portpins sind aktuell noch undefiniert, hätte nicht gedacht, dass sich das auf den Stromverbrauch auswirkt. Das werde ich noch ändern.
Philipp K. schrieb: > Ich spreche von Power_Save und nicht Idle. Das passt nicht zur von dir markierten Stelle (da steht „Idle“) und auch nicht zu deiner Aussage: bei Powerdown (und Powersave genauso) läuft der Hauptoszillator nicht, daher spielt seine Frequenz keine Rolle. > Wer jeden uA sparen will rechnet nicht viel und ist eigentlich selten > Powered. > Sonst würde das ja auch keinen Sinn machen. Irgendwas will man ja auch berechnen, sonst bräuchte man keine CPU. Was beim AVR allerdings auf jeden Fall stimmt ist, dass man mit geringerer Versorgungsspannung immer spart. Man muss dann nur sehen, ob mit der noch zulässigen Taktfrequenz die Aufgabe erfüllbar ist.
Michael schrieb: > Die angeratenen Sachen wie disable von UART, Watchdog etc. habe ich > angewandt, trotzdem verbaucht die Schaltung im power-down-Mode noch ca. > 0,75mA. > Könnt ihr mir vielleicht einen Tip geben ? Du bist zufällig stolzer Besitzer eines Atmel Ice oder eines anderen Debuggers? Im Debug Wire Mode tut der Controller nur so als wäre im Sleep.
Philipp K. schrieb: > Im Prinzip biste doch schon gut dabei. Ich glaube, hier verwechselst du was. Es geht um den PowerDown-Mode. Da steht in der Tabelle eine Stromaufnahme von 0.1µA und bei Michael fließen aber 0.75mA - das ist ca. 7500mal so viel! :-))
Michael schrieb: > Die unbeschalteten, unbenutzten Portpins sind aktuell noch undefiniert, > hätte nicht gedacht, dass sich das auf den Stromverbrauch auswirkt. Wenn sie floaten, dann schalten sie u. U. ständig zwischen zwei Pegeln. Bei CMOS kosten vor allem die Schaltvorgänge den Hauptanteil des Stroms (zumindest bei Strukturgrößen der klassischen AVRs, bei denen Leckströme noch nicht die Rolle spielen).
Wenn man nur einen Taster zum anschmeissen benutzt kann man doch bestimmt ne sparsamere Schaltung aufbauen als den AVR unbedingt in den PowerDown zu schicken. Wobei PowerDown ist doch PowerDown.. alles was da mehr zieht sind externe Komponenten und man brauch erst garnicht anfangen zu diskutieren.. Zitat zum PowerDown wenn Watchdog deaktiviert ist: Die Stromaufnahme wird nur noch von den Leckströmen bestimmt und liegt typisch bei 300 nA.
Offene Eingänge spielen nur dann eine Rolle, wenn sie für die Beendigung vom Sleep relevant sind. Andernfalls klemmt die Innenschaltung den Pin per Transmission Gate ab und hängt die Folgeschaltung auf GND. Floatende Pins führen also im Powerdown nicht zu erhöhtem Stromverbrauch.
:
Bearbeitet durch User
A. K. schrieb: > Ansonsten klemmt die Innenschaltung den Pin per Transmission Gate ab und > hängt die Folgeschaltung auf GND. Stimmt natürlich. Allerdings ist beim Signal DIEOVxn nicht wirklich erklärt, wann es gesetzt wird. Da beim ATmega168 alle IO-Pins einen Pin-Change-Interrupt triggern können, müssen diese unter bestimmten Umständen den Eingang schon öffnen. Man sollte hoffen, dass das Signal nur dann generiert wird, wenn das entsprechende PCINTnn-Bit gesetzt ist. Aber dennoch eine interessante Anmerkung. Philipp K. schrieb: > Wenn man nur einen Taster zum anschmeissen benutzt kann man doch > bestimmt ne sparsamere Schaltung aufbauen als den AVR unbedingt in den > PowerDown zu schicken. Nicht unbedingt. Da AVRs relativ wenig Leckstrom haben, ist ein AVR im Powerdown + externer Interrupt zum Aufwachen gar keine schlechte Variante in vielen Fällen.
Jörg W. schrieb: > Man sollte hoffen, dass das > Signal nur dann generiert wird, wenn das entsprechende PCINTnn-Bit > gesetzt ist. Behauptet zumindest das Datasheet: "SLEEP is overridden for port pins enabled as external interrupt pins. If the external interrupt request is not enabled, SLEEP is active also for these pins."
:
Bearbeitet durch User
Jörg W. schrieb: > Da beim ATmega168 alle IO-Pins einen > Pin-Change-Interrupt triggern können, müssen diese unter bestimmten > Umständen den Eingang schon öffnen. Man sollte hoffen, dass das > Signal nur dann generiert wird, wenn das entsprechende PCINTnn-Bit > gesetzt ist. Aber nur die, die mit den Maskenregistern gesetzt werden. Wer dann keine Pullups setzt, sondern die Eingänge offen lässt, ist selber Schuld.
Jörg W. schrieb: > Signal nur dann generiert wird, wenn das entsprechende PCINTnn-Bit > gesetzt ist. Ist so, wie aus der Detailbeschreibung der GPIO Steuerung hervorgeht.
OK, das wäre erstmal eine genügend fundierte Aussage. Danke, ich wusste zwar, dass man bei einigen neueren AVRs die Eingänge generell abklemmen kann, aber dass dies auch beim SLEEP passiert, war mir so nicht bewusst. Gerade nachgesehen, AT90S1200 und ATmega103 hatten das noch nicht, beim ATmega163 und ATmega128 scheint man es eingeführt zu haben.
> Wenn sie floaten, dann schalten sie u. U. ständig zwischen > zwei Pegeln. Schlimmer noch, es kann passieren, dass sowohl der High-Side Transistor als auch der Low-Side Transistor gleichzeitig leiten. Dann fließt ein verhältnismäßig hoher Strom direkt von VCC nach GND (durch die beiden Transistoren). Das kann bei einem AVR durchaus mehrere Milliampere bewirken. In der Ausbildung hatte ich lernen müssen, das CMOS Chips durch diesen Effekt sogar durchbrennen können - habe ich im realen leben allerdings noch nicht erlebt.
Stefan U. schrieb: > Schlimmer noch, es kann passieren, dass sowohl der High-Side Transistor > als auch der Low-Side Transistor gleichzeitig leiten. Wie sollte sowas bei einem Eingang mit Schmitt-Trigger-Verhalten auftreten können? Die Eingangsstufen sind ja auch nicht anders, wenn man einen Eingang als ADC benutzt, und dort darf man sehr wohl jeden Pegel zwischen GND und Vcc anlegen. Davon abgesehen, hatte A. K. uns ja drauf hingewiesen, dass die Digitaleingänge während des Schlafs vom Pin abgetrennt sind.
Jörg W. schrieb: > Wie sollte sowas bei einem Eingang mit Schmitt-Trigger-Verhalten > auftreten können? Wenn die AVRs grundsätzlich Schmitt-Trigger-Eingänge haben, um so besser. Bei einem Renesas RH850 mach ein offener Eingang im Deepstop Mode ca 300..500 µA aus. Grundsätzlich sollte man sich angewöhnen, Controllerpins entweder auf Ausgang zu schalten oder über Pullups mit einem definierten Pegel zu versehen.
@ Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite >> Schlimmer noch, es kann passieren, dass sowohl der High-Side Transistor >> als auch der Low-Side Transistor gleichzeitig leiten. >Wie sollte sowas bei einem Eingang mit Schmitt-Trigger-Verhalten >auftreten können? Ein weit verbreiteterr Irrtum, dem auch ich erlegen bin ;-) Miss mal die Stromauchnahme eines 74HC14 bei langsam steigender Spannung ein einem Eingang und staune. >Die Eingangsstufen sind ja auch nicht anders, wenn man einen Eingang >als ADC benutzt, und dort darf man sehr wohl jeden Pegel zwischen >GND und Vcc anlegen. >Davon abgesehen, hatte A. K. uns ja drauf hingewiesen, dass die >Digitaleingänge während des Schlafs vom Pin abgetrennt sind. Nicht bei allen AVRs und nicht immer, dazu muss man ein paar Registerbist richtig setzen.
Falk B. schrieb: > Nicht bei allen AVRs Laut Doku seit dem ATmega163/128. Die alten AT90Sxxx, die es noch nicht haben, dürften heute keine Rolle mehr spielen. > und nicht immer, dazu muss man ein paar > Registerbist richtig setzen. Welche denn? Laut Doku sollte es andersrum sein, also by default sind im Sleep die Eingangsstufen immer abgetrennt. Die Abtrennung wird nur verhindert, wenn der Eingang zum Aufwecken benutzt werden soll.
@ Jörg Wunsch >> Nicht bei allen AVRs >Laut Doku seit dem ATmega163/128. Die alten AT90Sxxx, die es noch >nicht haben, dürften heute keine Rolle mehr spielen. Ist lange her, daß ich mich explizit um das Thema gekümmert habe. Die letzte Messung war glaub ich an einem ATmega32, dort konnte man mit offenen Eingängen noch mA fließen lassen. Die Pull-Ups dort einzuschalten ist auf jedden Fall nicht falsch. >> und nicht immer, dazu muss man ein paar >> Registerbist richtig setzen. >Welche denn? Weiß ich nicht, mit den diversen Power Reduction Bits hab ich mich auch nie beschäftigt, nur mal überflogen ;-) >Laut Doku sollte es andersrum sein, also by default sind im Sleep >die Eingangsstufen immer abgetrennt. Die Abtrennung wird nur >verhindert, >wenn der Eingang zum Aufwecken benutzt werden soll. Theroetisch ja, praktisch scheint aber beim OP was zu klemmen. Entweder offene Einänge bei einem älteren AVR oder angeschlossene ICs ziehen den Strom, im Zweifel parasitär durch die Schutzdioden der IOs.
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.