Code:
while (1)
{
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_mode();
if (button_down)
{
PORTB = (1<<3); // LED ON
taste=1;
}
else
{
PORTB = (0<<3); // LED OFF
}
}
Kann nicht funktionieren, da du den AVR zwar erfolgreich in den Power-Down-Mode versetzt, aber nicht mehr aufweckst. Zum Aufwecken benutzt man Interrupts, wenn sie ausgelöst werden, wird der µC wieder reaktiviert.
Durch dein sei() kann ich entnehmen, dass du das auch vohattest, aber noch nicht wirklich weißt, wie es funktioniert. Für Interrupts deklariert man nämlich eine eigene Interruptbehandlungsroutine.
(siehe: http://www.rn-wissen.de/index.php/Avr-gcc#Interrupts und http://www.mikrocontroller.net/artic...mit_Interrupts )
Welcher Sleep-Mode sich für deinen Zweck eignet (nicht alle können durch einen spezifischen Interrupt beendet werden) kannst du dem Datenblatt unter Power Management entnehmen (siehe: http://www.atmel.com/dyn/resources/p...ts/doc2543.PDF )
Code:
MCUCR = 0b00100000; // sleep-mode enable (SE-Bit = 1)
Das brauchst du nicht.
Außerdem benutze bitte für deine nächsten Codes, die du postest die Code-Tags ([code ] und [/code ] (ohne Leerzeichen), damit es übersichtlicher wird.
Lesezeichen