Forum: Compiler & IDEs Sleep Mode einschalten in AVR-GCC


von tomi (Gast)


Lesenswert?

Hallo!

Wollte gern in den Power Down modus gehen.
In Datenblatt steht "execute SLEEP instruction".
Benutze den AVR-GCC compiler.
Wie führe ich die "SLEEP" instruction aus?

DANKE!!!

von Joerg Wunsch (Gast)


Lesenswert?

#include <avr/sleep.h>

...
   set_sleep_mode(SLEEP_MODE_PWR_DOWN); /* je nachdem */
...
   sleep_mode();

von Tomi (Gast)


Lesenswert?

HI!!

Danke, erstmal!

Wollte gern auf den ext level intterupt wieder aufwachen.
Kann mir jemand sagen wie lange der level interrupt anliegen muß
bis der Controller aufwachen kann?

BYE!!!

von Joerg Wunsch (Gast)


Lesenswert?

Ja, das Datenblatt.

Insbesondere muß er so lange anliegen, daß der Oszillator
ordentlich angelaufen ist, wenn Du den abgeschaltet hast.  Du
solltest daran denken, daß die Fuses in aller Regel standardmäßig
so gesetzt sind, daß sie mit konservativer Anlaufzeitabschätzung
des Oszillators arbeiten (also: sehr lange).  Ggf. mußt Du das
also überdenken.

Deine Ausrufezeichentaste klemmt, bitte reparieren. ;-)

von tomi (Gast)


Lesenswert?

Nochmals Danke!

Frage: Warum diese verschiedenen aufwachzeiten?

Was hat das für einen genauen Hitergrnd?

BYE!

von Joerg Wunsch (Gast)


Lesenswert?

Daß der Hersteller des Chips nicht wissen kann, wie lange Dein
Oszillator benötigt, bis er stabil schwingt.  Quarzoszillatoren
benötigen einige Zeit, bis sie sich sauber eingeschwungen haben,
Keramikresonaten auch (aber i. d. R. weniger), RC-Oszillatoren
schwingen vergleichsweise schnell an (dafür weniger langzeitstabil).

von Tomi (Gast)


Lesenswert?

Hi!

Jau, Danke hast mir sehr geholfen.

BYE!!

von Dahohl D. (dahohl)


Lesenswert?

hallo zusammen,

habe ebenfalls das problem, das ich meinen atmega16 nicht in den sleep 
modus bringe :-(

hier ein auszug meines Programmes:

void main(void)
{
  DDRA = 0x00;
  PORTA = 0x00;


  set_sleep_mode(SLEEP_MODE_PWR_DOWN);

  PORTA = 0xFF;
  wait_ms(500);
  sleep_mode();

  while(1);


}

am PortA habe ich 8 led's die nach dem sleep befehl eigentlich dunkel 
sein sollten, oder?
aber sie leuchten dauernd.
was mach ich falsch?

wäre froh um jede hilfe!
habe schon einige artikel in diesem forum über dieses problem gefunden 
aber es hat leider nie funktioniert.

Gruess dahohl

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Dahohl Dahhl wrote:

> habe ebenfalls das problem, das ich meinen atmega16 nicht in den sleep
> modus bringe :-(

Ist doch aber kein Grund, einen uralten Thread wieder aufzuwärmen.

> am PortA habe ich 8 led's die nach dem sleep befehl eigentlich dunkel
> sein sollten, oder?

Wie kommst du auf diesen Dampfer?

Die IO-Pins bleiben auch im Schlaf in ihrem Zustand, und das ist gut so.

von Dahohl D. (dahohl)


Lesenswert?

warum ich auf diesen uralten Thread gekommen bin:
habe eine lösung für mein problem gesucht und hab mich hier 
angeschlossen da es vom thema her gut passte.

habe nun den porta mal auf 0x00 gsetzt.
habe vor dem sleepmodus eine stromaufnahme von ca. 30mA und im 
sleepmodus ca. 7mA. ist das realistisch?

Gruss dahohl

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Dahohl Dahhl wrote:

> habe vor dem sleepmodus eine stromaufnahme von ca. 30mA und im
> sleepmodus ca. 7mA. ist das realistisch?

Dieser hohe Strom ist wohl durch die restliche, uns unbekannte 
Schaltung bedingt.

Im eigentlichen Sleep Mode SLEEP_MODE_PWR_DOWN sollte der µC allein 
nur rund 0,3μA benötigen.

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.