AVR电源管理及睡眠模式范例程序
/***********************************************
**** AVR电源管理及睡眠模式范例程序 ***
**** ***
**** 作者: HJJourAVR ***
**** 编译器:WINAVR20050214 ***
***********************************************/
/*
本程序简单的示范了如何令AVR ATMEGA16进入睡眠状态及唤醒
电源管理及睡眠模式的介绍
进入最低耗电的掉电模式
关闭各种模块
外部中断唤醒
M16掉电模式的耗电情况(看门狗关闭),时钟为内部RC 1MHz
0.9uA@Vcc=5.0V [手册的图表约为1.1uA]
0.3uA@Vcc=3.3V [手册的图表约为0.4uA]
//测量的数字万用表是FLUKE 15B,分辨率0.1uA
这个程序需要MCU进入休眠状态,为实现最低功耗,JTAG接口会被关闭,只能通过LED的变化来观察程序的运行。
这个实验里面,用STK500(AVRISP) ISP下载线来烧录更方便。
熔丝位设置
1 关断BOD功能 BODEN=1
2 如果用ISP方式烧录,就可以完全关闭JTAG口了 OCEEN=1,JTAGEN=1
*/
#include
#include
#include
#include
//时钟定为内部RC 1MHz,F_CPU=1000000 也可以采用其他时钟
#include
/*
sleep.h里面定义的常数,对应各种睡眠模式
#define SLEEP_MODE_IDLE 0
空闲模式
#define SLEEP_MODE_ADC _BV(SM0)
ADC 噪声抑制模式
#define SLEEP_MODE_PWR_DOWN _BV(SM1)
掉电模式
#define SLEEP_MODE_PWR_SAVE (_BV(SM0) | _BV(SM1))
省电模式
#define SLEEP_MODE_STANDBY (_BV(SM1) | _BV(SM2))
Standby 模式
#define SLEEP_MODE_EXT_STANDBY (_BV(SM0) | _BV(SM1) | _BV(SM2))
扩展Standby模式