Arduino pro mini 休眠与看门狗唤醒-Arduino中文社区 - Powered by Discuz! Archiver

sbndjgg 发表于 2015-2-28 20:55

Arduino pro mini 休眠与看门狗唤醒

本帖最后由 sbndjgg 于 2015-2-28 20:58 编辑

学习Arduino休眠与定时唤醒,在其他网站上找到的教程,与大家分享。之前听说bootload不支持看门狗,但我直接用Arduino 1.06 连接 USB转TTL 写入,
没有用USBISP,亲测正常执行,没有问题。
休眠时电流1.3ma,亮灯时2.2ma(板上两个LED的限流电阻由1k换为5.6k)

转自http://donalmorrissey.blogspot.t ... -5-wake-up-via.html
/*
* Sketch for testing sleep mode with wake up on WDT.
* Donal Morrissey - 2011.
* 看门狗程式的介绍,以及沉睡10秒之后亮一下LED
*/
#include <avr/sleep.h>
#include <avr/power.h>
#include <avr/wdt.h>

#define LED_PIN (13)
volatile int f_wdt=1;
ISR(WDT_vect){//看门狗唤醒执行函数
f_wdt++;
}
void enterSleep(void){
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_enable();
sleep_mode();/* Now enter sleep mode. */
/* The program will continue from here after the WDT timeout*/
sleep_disable(); /* First thing to do is disable sleep. */
power_all_enable();/* Re-enable the peripherals. */
}
void setup(){
digitalWrite(LED_PIN,LOW);
pinMode(LED_PIN,OUTPUT);
/*** Setup the WDT ***/   
MCUSR &= ~(1<<WDRF);/* 清除复位标志. */
/* In order to change WDE or the prescaler, we need to
   * set WDCE (This will allow updates for 4 clock cycles).
   */
WDTCSR |= (1<<WDCE) | (1<<WDE);
/* 设置新的看门狗超时时间 */
WDTCSR = 1<<WDP1 | 1<<WDP2; /* 1.0 seconds */
/*设置为定时中断而不是复位*/
WDTCSR |= _BV(WDIE);
}
void loop(){
if(f_wdt>=10){
      digitalWrite(LED_PIN,HIGH);
      delay(20);
      digitalWrite(LED_PIN,LOW);
      f_wdt=0;   
}
enterSleep();
}




杨小挑 发表于 2016-6-13 22:09

楼主,那些库找不到啊,你是在哪下载的

Ayiucheong 发表于 2015-3-1 13:47

一楼,待会试试

wangsm 发表于 2019-12-30 16:14

感谢楼主分享!请问这个休眠时长可以任意设定吗?再次深表感谢!
页: [1]
查看完整版本: Arduino pro mini 休眠与看门狗唤醒