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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren