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.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 } }
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 )
Das brauchst du nicht.Code:MCUCR = 0b00100000; // sleep-mode enable (SE-Bit = 1)
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.







Zitieren
Lesezeichen