Sleep mode funktioniert nicht

Gast #2143925
Lesenswert?
• ▲
▼
Hallo

Ich arbeite mit einem Tiny13 und möchte diesen gelegentlich in den 
Sleepmode setzten und zwar so:
1
...
2
if( sleepMode )
3
{
4
...
5
sleepMode = 0;
6
// go to sleepMode
7
MCUCR |= (1 << SM1);
8
MCUCR |= (1 << SE);
9
}    
10
...

Die If-Bedingung wird ab und zu zweifelslos erfüllt (gebe im IF-Block 
noch was aus, vor dem Schlafen legen), dennoch setzt sich der uC nicht 
in den Sleepmode (die Anzeige wird weiterhin munter verändert durch 
Funktionen, die ausserhalb der sleep-IF-Schleife stehen => kein sleep 
mode aktiviert)

Im Datenblatt des Tiny13 steht über das "MCUCR – MCU Control Register" 
beim  "Bit 5 – SE: Sleep Enable":
"To avoid the MCU entering the sleep mode unless it is the programmer’s
purpose, it is recommended to write the Sleep Enable (SE) bit to one 
just before the execution of the SLEEP instruction and to clear it 
immediately after waking up."
Muss ich nun also noch eine SLEEP instruction ausführen? Aber was soll 
das sein? Hab dazu im Datenblatt keine weiteren nützlichen Infos 
gesehen. Könnt ihr mir weiterhelfen?

Vielen Dank
Markus
Gast #2143984
Lesenswert?
• ▲
▼
ok, vielen dank, die Version
1
#include <avr/sleep.h>
2
...
3
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
4
sleep_enable();
5

6
sleep_cpu();
funktioniert, aber mit einzelnen Bits setzen sollte doch auch 
funktionieren oder? Wo liegt da mein Fehler?

In diesem Zusammenhang stellt sich auch die Frage nach der Bedeutung der 
Funktion "sleep_disable()". Wenn ich durch einen Interrupt aus dem 
sleep-mode rauskomme, bin ich ja nicht mehr im Sleepmode, wozu also die 
Funktion???
Gast #2144034
Lesenswert?
• ▲
▼
hab nun zusammen mit dem Thread 
Beitrag "Bekomme ADC Noise Canceler beim ATMega16 nicht zum laufen" und dem Datenblatt 
rausgefunden, dass die im ersten Post erwähnte "Sleep instruction" 
entweder wie im vorgängigen Post mit "sleep_cpu();" oder mit "asm 
volatile ("sleep")" aufgerufen wird. Der Assembler-sleep-Befehl ist eine 
"MCU CONTROL INSTRUCTION" (s. Datenblatt unter "Instruction Set 
Summary")

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.