Forum: Mikrocontroller und Digitale Elektronik µC schlafen schicken


von Karl Moik (Gast)


Angehängte Dateien:

Lesenswert?

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?

von Kai S. (hugstuart)


Lesenswert?


von Christian O. (derbrain)


Lesenswert?

Ich weiß nicht welche Version der avr-libc du hast, aber mit
1
set_sleep_mode (SLEEP_MODE_PWR_DOWN);
2
sleep_mode ();
(oder ähnlich) sollte das gehen.

von IMP (Gast)


Lesenswert?

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).

von Michi (Gast)


Lesenswert?

@IMP

ich hoffe das war ein witz??

von Karl Moik (Gast)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

Wieder mal viele Kasper unterwegs. Wie man es richtig macht, siehe 
Sleep Mode.

von Karl Moik (Gast)


Lesenswert?

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?

von Lukas K. (carrotindustries)


Lesenswert?

Karl Moik schrieb:
> In welcher Lib-Datei steht das?

in <avr/sleep.h>

von Karl Moik (Gast)


Lesenswert?

Falk Brunner schrieb:
> Wieder mal viele Kasper unterwegs.

Was meinst du?
Ist deiner Meinung nach:
1
set_sleep_mode (SLEEP_MODE_PWR_DOWN);
2
sleep_mode ();
blöd und/oder Spannung mit Optokoppler abschalten?

von Wurstwasser (Gast)


Lesenswert?

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.

von Andreas B. (Gast)


Lesenswert?

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?

von Joe M. (nachdenklicher)


Lesenswert?

> 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

von Karl Moik (Gast)


Lesenswert?

Bitte macht meinen schönen Thread nicht kaputt!

Btw: habe gerade gefunden wo die sleep.h Datei ist:
C:\WinAVR-20090313\avr\include\avr

von Falk B. (falk)


Lesenswert?

@  Karl Moik (Gast)

>set_sleep_mode (SLEEP_MODE_PWR_DOWN);
>sleep_mode ();

Ist OK.

Der Rest ziemlicher Quark.

von IMP (Gast)


Lesenswert?

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

von Lukas K. (carrotindustries)


Lesenswert?

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.

von Karl Moik (Gast)


Angehängte Dateien:

Lesenswert?

Anstelle eines Optokopplers könnte man vieleicht auch diese Schaltung 
nehmen.

von Thomas E. (thomase)


Lesenswert?

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.

von (Gast) (Gast)


Lesenswert?

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.

von Ulknudel (Gast)


Lesenswert?

Es gibt den Befehl!

AAAAABBB ins Beeett!

von Andreas B. (Gast)


Lesenswert?

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.

von Max G. (l0wside) Benutzerseite


Lesenswert?

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.

von Lukas K. (carrotindustries)


Lesenswert?

Max G. schrieb:
> Dauerstromaufnahme im µA-Bereich

Es geht hier längst nicht mehr um µA, nA ist der Stand der Technik.

von Max G. (l0wside) Benutzerseite


Lesenswert?

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.

von avion23 (Gast)


Lesenswert?

50µA im power down Modus? Wie kommst du zu der Aussage.

Ohne brown out detector und watchdog kommt man tatsächlich auf < 1µA.

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
Noch kein Account? Hier anmelden.