Hi,
ich habe eine Frage, die hoffentlich nicht als zu dämlich empfunden
wird:
Ich habe da auf einer Platine einen µC ATmega. Ich programmiere den mit
dem AVRstudio 4 und WinAVR in C.
Der µC initialisiert nach dem Reset ein paar andere IC's und hat dann
nix mehr zu tun.
Bisher schicke ich den µC mit
1
while(1){}
schlafen.
Wie kann ich den µC ganz abschalten, um Strom zu sparen und
Schaltstörungen vom Oszillator zu verhindern?
Wenn man den µC komplett abschalten möchte, kann man auch zb PORTB.0 als
Ausgang definieren und auf 1 setzen, einen Optokoppler ranpacken, der
die Stromzufuhr zum µC ggf. unterbrechen kann. Wenn alle Aufgaben
abgeschlossen sind, setzt du PORTB.0 auf 0, der Optokoppler schaltet ab
und der µC verbraucht keinen Strom mehr. Allerdings musst du, damit
PORTB.0 überhaupt 1 sein kann, beim Anschalten kurz den Optokoppler
überbrücken (etwa mit nem Taster, wenn du die Schaltung in ein Gehäuse
einbauen willst).
IMP schrieb:> Wenn alle Aufgaben> abgeschlossen sind, setzt du PORTB.0 auf 0, der Optokoppler schaltet ab> und der µC verbraucht keinen Strom mehr.
Das erscheint mir ausgesprochen elegant!
Leider ist meine Hardware schon fertig, kann nix mehr dran geändert
werden.
Christian O. schrieb:> Ich weiß nicht welche Version der avr-libc du hast,
wie kann ich das rauskriegen?
> aber mitset_sleep_mode (SLEEP_MODE_PWR_DOWN);> sleep_mode ();(oder ähnlich) sollte das gehen.
mich würde mal interressieren, was sich speziell für meinen µC ATmega128
dahinter verbirgt.
Welche Register-Bits werden da gesetzt?
Wie kann ich das rauskriegen, ausser Datenblatt lesen?
In welcher Lib-Datei steht das?
Wurstwasser schrieb:> Früher hat man das mit einem Relais gemacht. Power On: Selbsthaltung.> Nach getaner Arbeit: Relais fällt ab. Das ist aber wohl heute zu> einfach.
Ging das auch 1000 mal pro Sekunde?
> Ging das auch 1000 mal pro Sekunde?
Nein, und das weisst Du auch, also frag nicht unnötig blöde.
Gegenfrage:
Schickst DU einen Controller denn 1000x pro Sekunde in den Sleep?
Oder was sollte der pampige Einwand?
Joe
Jetzt melde ich mich noch mal zu Wort,
Michi schrieb:
>>ich hoffe das war ein witz??
Mein voller Ernst. Diese Methode funktioniert tadellos bei mir und ich
kann sie uneingeschränkt weiterempfehlen.
Selbst im Sleep Mode verbraucht der µC ein paar µA, bei meiner Methode
wäre die Stromversorgung sogar komplett weg.
@Threadstarter:
Schade, wenn an der Hardware nichts mehr geändert werden kann, ist die
Lösung wohl hinfällig :)
Gruß, IMP
Wurstwasser schrieb:> Früher hat man das mit einem Relais gemacht. Power On: Selbsthaltung.> Nach getaner Arbeit: Relais fällt ab. Das ist aber wohl heute zu> einfach.
Wozu externe Hardware, egal ob Optokoppler, FET oder gar Relais,
aufwenden wenn es der Controller auch gratis macht? Platz auf dem Board
spart man auch.
IMP schrieb:> Selbst im Sleep Mode verbraucht der µC ein paar µA
Das braucht meine ez430 Chronos, die 4x in der Sekunde aufwacht. Ein
Attiny13 braucht im Tiefschalf bei 3V gerade mal 150nA. Die
Selbstentladung der Batterie ist höher.
Karl Moik schrieb:> Anstelle eines Optokopplers könnte man vieleicht auch diese Schaltung> nehmen.
Man kann auch die Batterien rausnehmen.
Die Frage des TO bezieht sich auf den Sleepmode des Controllers. Im
Gegensatz zu all den tollen Schaltungen, die hier vorgeschlagen wurden,
kann der Controller sich aus diesem nämlch wieder selbst aufwecken.
mfg.
Kommt drauf an, was man will:
Soll er noch auf Interrupts reagieren und irgendwie von selbst wieder
angehen oder nicht.
Die Selbstabschaltung kann zum Stromsparen durchaus Sinn machen, wenn
sowieso mit nem Taster etc wieder neu gestart werden soll (wird dafür
auch häufig benutzt).
Für ein paar stromreduzierte Wartezyklen eignet sich das natürlich
nicht.
Joe M. schrieb:>> Ging das auch 1000 mal pro Sekunde?>> Nein, und das weisst Du auch, also frag nicht unnötig blöde.
Na gut, ich hätte von vornherein sagen können, dass der Einwurf mit dem
Relais Troll-Stumpfsinn ist. Ein großes Bauteil extern anschließen um
das zu tun, was der Controller alleine mit zwei Zeilen C-Code auch kann.
Nicht nur das, man kann es auch zum Stromsparen im Betrieb einsetzen, im
Gegensatz zum Relais.
> Gegenfrage:> Schickst DU einen Controller denn 1000x pro Sekunde in den Sleep?> Oder was sollte der pampige Einwand?
Wenn der Controller keine langen Berechnungen macht sondern nur kurz was
in Interrupts, die 1000 mal pro Sekunde kommen, dann ja, natürlich. In
der main() wäre nach der Initialisierung eine Endlosschleife, die in den
Sleep geht. Was sonst?
Wenn man natürlich Energie ohne Ende zum Verbraten hat (mein Strom kommt
aus der Steckdose!) ist es ja egal. Zumindest bei Mikrocontrollern wo eh
kaum was an Strom rumkommt, im PC gewinnt man mit NOP Schleifen als Idle
gelinde gesagt keinen Blumentopf mehr.
Andreas B. schrieb:> Na gut, ich hätte von vornherein sagen können, dass der Einwurf mit dem> Relais Troll-Stumpfsinn ist. Ein großes Bauteil extern anschließen um> das zu tun, was der Controller alleine mit zwei Zeilen C-Code auch kann.> Nicht nur das, man kann es auch zum Stromsparen im Betrieb einsetzen, im> Gegensatz zum Relais.
Es gibt durchaus Anwendungen, bei denen man den µC wirklich komplett
abschalten will. Auch eine Dauerstromaufnahme im µA-Bereich kann zu viel
sein, je nach Anwendung.
Die Verwendung eines Relais dürfte eher nicht sinnvoll sein (die
Stromaufnahme im Betrieb ist so viel größer als die einzusparenden µA,
dass die Einschaltdauern extrem kurz und selten sein müssten). Die
Schaltung mit den externen Transistoren kann je nach Anwendung dagegen
durchaus sinnvoll sein.
Beide Ansätze haben aber den Vorteil, dass man neben dem µC auch den
Rest der Schaltung ausmachen kann.
Luk4s K. schrieb:> Max G. schrieb:>> Dauerstromaufnahme im µA-Bereich>> Es geht hier längst nicht mehr um µA, nA ist der Stand der Technik.
Bei welchem µC? Der eingangs genannte ATmega ist jedenfalls irgendwo bei
50µA.
Der MSP430F2012 (TI) kommt runter bis ca. 100 nA, ist aber auch explizit
auf solche Anwendungen ausgelegt.