首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ATTINY 85睡眠模式

ATTINY 85睡眠模式
EN

Stack Overflow用户
提问于 2020-01-25 10:55:08
回答 1查看 1.4K关注 0票数 0

我对微控制器的编程很陌生,我刚刚开始使用Attiny85。我正试图建立一个电路的LED与触觉开关。每次按下触觉开关,它就会跳过LED到下一种工作状态。由于它是电池操作,当LED关闭,我希望命运85消耗尽可能低的电流。到目前为止,它正在消耗4mA时,LED是关闭没有睡眠模式。所以我试了一下Attiny 85的断电模式,但是我还是被困在了断电模式中。

代码语言:javascript
复制
if(count == 8){
          analogWrite(0,LOW);
          //Serial.println("I am OFF");
          //Serial.println(count);
          set_sleep_mode(SLEEP_MODE_PWR_DOWN); //Power down everything
          sleep_mode();
          sleep_disable();
        }

它成功地进入了睡眠模式,但我无法摆脱它。能请人帮忙吗。当触觉开关再次被按下时,我想要凹槽85脱离睡眠模式。开关在第7引脚上,即命运85的PB2。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-29 14:35:20

请参阅数据表,7.1节睡眠模式,在第34页。

在表中可以看到,在断电模式下,只有3个源可以唤醒CPU:

  1. INT0,只有级别中断和引脚更改中断
  2. USI模块启动条件
  3. 看门狗中断

这意味着,如果您希望该部分唤醒时按钮已按下,那么最好的选择将是配置引脚更改中断。

首先,您需要配置中断服务例程(ISR)。ISR只需要处理中断事件,如果没有中断事件,程序将被重新启动。由于不需要采取行动,ISR可以是空的:

代码语言:javascript
复制
#include <avr/interrupt.h>

EMPTY_INTERRUPT(PCINT0_vect);

接下来,您需要配置引脚更改中断(请参阅数据表中的9.2 External Interrupts部分),例如:

代码语言:javascript
复制
// I don't know which pin do you use for the button
// Let's assue it is PB0 which corresponds to PCINT0 
// (see section 1. Pin Configurations)
PCMSK = (1 << PCINT0); // set pin change mask to PCINT0
GIMSK = (1 << PCIE); // enable pin change interrupt
sei(); // enable global interrupts

就这样。在配置中断之后,输入端的任何逻辑级别的更改都会导致CPU苏醒。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59908541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档