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

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 21380|回复: 3

Arduino pro mini 休眠与看门狗唤醒

[复制链接]
发表于 2015-2-28 20:55 | 显示全部楼层 |阅读模式
本帖最后由 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
[mw_shl_code=cpp,true]/*
* 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();
}[/mw_shl_code]




发表于 2016-6-13 22:09 来自手机 | 显示全部楼层
楼主,那些库找不到啊,你是在哪下载的
发表于 2015-3-1 13:47 | 显示全部楼层
一楼,待会试试
发表于 2019-12-30 16:14 | 显示全部楼层
感谢楼主分享!请问这个休眠时长可以任意设定吗?再次深表感谢!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 08:26 , Processed in 0.087943 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表