Forum: Mikrocontroller und Digitale Elektronik Sleep Mode


von Michael (Gast)


Lesenswert?

kann mir jemand sagen was ich hier vergessen oder falsch mache?

#include <avr/sleep.h>

//PowerDown
set_sleep_mode(SLEEP_MODE_IDLE);
sleep_mode();
while(1);

von johnny.m (Gast)


Lesenswert?

> kann mir jemand sagen was ich hier vergessen...?

Ja, Du hast vergessen, uns mitzuteilen, was das Programm machen soll
und was es Deiner Meinung nach nicht macht, und dass so ein
Codeschnipselchen wirklich nicht besonders aussagekräftig ist...

Außerdem hast Du anscheinend vergessen, dass es hier ein extra
GCC-Forum gibt...

von Michael (Gast)


Lesenswert?

ok nächstes mal im GCC-Forum.
Ich möchte den atmega 128 in den idlemode versetzen.
Stromaufnahme ändert sich aber nicht, also gehe ich davon aus dass das
so nicht geht.

von johnny.m (Gast)


Lesenswert?

Wenn irgendein Ereignis den Mega wieder aufweckt, tut sich an der
Stromaufnahme auch nix. Deshalb solltest Du vielleicht mal das
komplette Programm schicken, damit man sieht, was da evtl. reinhauen
kann!

von stephan (Gast)


Lesenswert?

ist vielleicht das sleep enable Bit nicht gesetzt?

von johnny.m (Gast)


Lesenswert?

@stephan:
Das macht die Funktion sleep_mode() automatisch...

von Michael (Gast)


Lesenswert?

wie muß konfiguriert werden dass nicht mit int7 oder int3 aufgeweckt
wird?

von johnny.m (Gast)


Lesenswert?

INT7 und INT3 vor dem sleep deaktivieren...

von Michael (Gast)


Lesenswert?

so:

EIMSK = 0;

von Hannes L. (hannes)


Lesenswert?

Soviel ich weiß, spart Sleep-Mode IDLE keinen Strom, denn es wird nur
die ALU angehalten, Timer, I/O, ADC usw. erhalten weiter ihren Takt.
Inzwischen nutze ich in fast allen meinen Programmen Sleep, allerdings
in ASM.

...

von Michael (Gast)


Lesenswert?

wenn ich in den Power Down mode schalte bleibt die Stromaufnahme
trotzdem gleich.
Atmega128 8Mhz 3,3V = 8mah entspricht auch dem Datenblatt.

von Hannes L. (hannes)


Lesenswert?

Mit Mega8 arbeite ich nicht, aber wenn ich den Mega48 in den
Power-Down-Mode schalte, dann ist die Stromaufnahme mit einem
Billig-DVM nicht mehr messbar.
http://www.hanneslux.de/avr/mobau/7ksend/7ksend02.html

...

von Hannes L. (hannes)


Lesenswert?

Sorry, Korrektur, sollte heißen:
Mit Mega128 arbeite ich nicht, ...

...

von Tom (Gast)


Lesenswert?

.....//gewünschten Sleep-mode wählen (ist bei dir
     //NICHT Power-Down mode!)
.....//Sleep-enable setzen
asm volatile ("sleep"::);  //uc in den Sleepmode schicken

zzzZZZ :)

Funktioniert zumindest beim AtMega48 so :)

Grüße

von Tom (Gast)


Lesenswert?

Autor: ...HanneS... Lux (HanneS)
Datum: 25.08.2006 15:19

Mit Mega8 arbeite ich nicht, aber wenn ich den Mega48 in den
Power-Down-Mode schalte, dann ist die Stromaufnahme mit einem
Billig-DVM nicht mehr messbar.

Ohne Brown-Out detection warens bei mir so um die 10 - 20 uA. Die Brown
out detection zieht ca 25uA.

von Michael (Gast)


Lesenswert?

ich glaube der controller geht auch in den power down mode, wacht aber
sofort wieder auf.
Beim Power Down Mode kann er ja nur über TWI oder ext. Interrupt
aufwachen.
TWI ist disabled.
Kann ich die Interrupts mit cli() vor dem sleep befehl ausschalten?
Wenn ja dürfte er nicht mehr aufwachen oder?

von Hannes L. (hannes)


Lesenswert?

Lohnt sich das beim Mega128 überhaupt? Die älteren ATmegas sind noch
nicht so auf Stromsparen optimiert.

...

von Axel R. (Gast)


Lesenswert?

<<Ohne Brown-Out detection warens bei mir so um die 10 - 20 uA. Die
Brown
out detection zieht ca 25uA.
>>
Tach zusammen.
Ein Mega168 nimmt bei 1.8Volt und 128Khz internem Takt 12.5uA im
aktiven Betrieb. Zum Test hatte ich die demo.c aus der WINAVR
Distribution und zur Kontrolle ein Oszi drann (PWM hochrunter). Bei
2.8Volt waren es dann schon 320uA.
Nächste Woche schreibe ich, was im Sleep passiert. (habe schon
Feierabend und das hier zu spät gelesen...:-)

Gruß
Axel

Nein, mein Messgerät im Labor ist bestimmt nicht defekt gg

von Tom (Gast)


Lesenswert?

Mein Mikrocontroller wurde beim dem Test mit 3,3V versorgt.

von Vlad S. (sempai)


Lesenswert?

Michael wrote:
> wenn ich in den Power Down mode schalte bleibt die Stromaufnahme
> trotzdem gleich.
> Atmega128 8Mhz 3,3V = 8mah entspricht auch dem Datenblatt.

Datenblatt, Seite 49:
1
If the On-chip debug system is enabled by the OCDEN Fuse and the chip enter Power down or
2
Power save sleep mode, the main clock source remains enabled. In these sleep modes, this will
3
contribute significantly to the total current consumption. There are three alternative ways to
4
avoid this:
5
• Disable OCDEN Fuse.
6
• Disable JTAGEN Fuse.
7
• Write one to the JTD bit in MCUCSR.

PS. Ich habe gestern den ganzen Tag dran mit dem ATmega128 im 
Sleep-Modus gesessen, man musste einfacht JTAG abschalten, dann läuft 
der Hauptoszillator nicht mehr und der Stromverbrauch sinkt drastisch 
ab.

von Falk B. (falk)


Lesenswert?

Guter Hinweis, werd ich gleich mal in den Artikel einbauen.

MfG
Falk

von Gottfried (Gast)


Lesenswert?

Hallo

sleep_mode();  // Wie sieht die Routine aus?

// Verlässt er die obige Routine, so verweilt er in einer Endlosschleife
while(1);

von Jan M. (jam2001)


Lesenswert?

Hallo,
was machen die Ports eines XMEGA im Sleepmode
-Power-Down
-Power Save

Behalten diese ihre Zustände, oder gehen die auf LOW/High
Wie ist dieser Zustand definiert.

Grüsse
Jan

von Maik O. (bastler_maik)


Angehängte Dateien:

Lesenswert?

Vlad S. schrieb:
> Michael wrote:
>> wenn ich in den Power Down mode schalte bleibt die Stromaufnahme
>> trotzdem gleich.
>> Atmega128 8Mhz 3,3V = 8mah entspricht auch dem Datenblatt.
>
> Datenblatt, Seite 49:
>
>
1
If the On-chip debug system is enabled by the OCDEN Fuse and the 
2
> chip enter Power down or
3
> Power save sleep mode, the main clock source remains enabled. In these 
4
> sleep modes, this will
5
> contribute significantly to the total current consumption. There are 
6
> three alternative ways to
7
> avoid this:
8
> • Disable OCDEN Fuse.
9
> • Disable JTAGEN Fuse.
10
> • Write one to the JTD bit in MCUCSR.
>
> PS. Ich habe gestern den ganzen Tag dran mit dem ATmega128 im
> Sleep-Modus gesessen, man musste einfacht JTAG abschalten, dann läuft
> der Hauptoszillator nicht mehr und der Stromverbrauch sinkt drastisch
> ab.

Habe das gleiche Problem beim Mega328P. Ich versetze ihn in Idle-Modus 
und am Strom ändert sich jedoch nichts.
1
  set_sleep_mode(SLEEP_MODE_IDLE);
2
  sleep_mode();

Bin deutlich über 1mA. Takt ist intern (1MHz) + Asynchroner Timer2 mit 
Uhrenquarz für Sekunden-Interrupt.

Alle besonderen Fuses sind aus (siehe Bild).
Kann man noch was optimieren?

: Bearbeitet durch User
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.