繁体   English   中英

ATTiny 13从睡眠模式唤醒

[英]ATTiny 13 wake up from sleep mode

我试图将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);
}

您必须在通用中断屏蔽寄存器中启用INT0中断。 在此处输入图片说明

添加行...

GIMSK |= _BV( PCIE );

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

请注意,使用所示的代码,我不确定您是否能够说出CPU已经唤醒。 尝试在入睡之前在引脚上将输出设为高电平,然后在唤醒时使其变为低电平,这样您便会知道发生了这种情况。

我相信您将问题从掉电模式中唤醒后交叉发布了。 在这里验证我对其他问题的答案是否对您有用,即您由于掉电时缺少I / O时钟而无法使用INT0上的下降沿检测从掉电中唤醒。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM