ATTiny 13从睡眠模式唤醒

时间:2017-11-13 10:56:05

标签: c avr attiny

我试图将我的ATTiny置于睡眠模式而不是将其唤醒。我使用这段代码让它入睡:

void go_to_sleep(){
is_sleeping = true;
RED_HIGH;
YELLOW_HIGH;
GREEN_HIGH;
sleep_enable();
sei();
sleep_cpu();
sleep_disable();

}

比我使用外部中断但没有任何反应。

ISR(INT0_vect)
{
    if(is_sleeping){
        awake();
    }
    if(BUTTON_LOW){ // przycisk wciśnięty?
        _delay_ms(80);
        if(BUTTON_LOW){ // nadal wciśnięty?
            do_thing();
        }
    }
}
void awake(){
    is_sleeping = false;
    RED_LOW;
    YELLOW_HIGH;
    GREEN_HIGH;
}

欢迎任何想法。

我添加main以表明中断工作正常,我已经在没有睡眠模式的情况下对其进行了测试:

int main(void)
{
MCUCR |= 1<<SE; // zezwolenie na sleep mode
GIMSK |= 1<<INT0; // int0 enable
MCUCR |= 0<<ISC00 | 1<<ISC01; //przerwanie zboczem opadającym
sei(); // zezwolenie na przerwania

//OUTPUTS
DDRB |= RED | YELLOW  | GREEN;
//INPUTS
DDRB &= ~BUTTON;
// Podciągnięcie przycisku do VCC
PORTB |= BUTTON;

set_sleep_mode(SLEEP_MODE_PWR_DOWN); // ustaw tryb sleep modu, ta linijka nie uruchamia go

//Stan początkowy
RED_LOW;
YELLOW_HIGH;
GREEN_HIGH;

timer0(TIMER_PRESCALER_1024,255);

while(1);
}

1 个答案:

答案 0 :(得分:0)

You must enable the INT0 interrupt in the General Interrupt Mask Register.... enter image description here

添加行...

GIMSK |= _BV( PCIE );

...在您进入休眠状态并激活INT0引脚(默认情况下具有低电平)之前,应将MCU从休眠状态唤醒。

请注意,使用您显示的代码,我不确定您是否能够告诉CPU已经唤醒了。在睡觉之前尝试在引脚上输出高电平,然后在唤醒时让它变低,这样你就会知道它发生了。