|
AVR电源管理——睡眠模式范例
/*********************************************** **** AVR 电源管理_睡眠模式范例 *** **** *** **** 作者: HJJourAVR *** **** 编译器:WINAVR20050214 *** **** *** **** www.OurAVR.com 2005.9.26 *** ***********************************************/ /* 本程序简单的示范了如何令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 <avr/io.h> #include <avr/signal.h> #include <avr/interrupt.h> #include <avr/delay.h> //时钟定为内部RC 1MHz,F_CPU=1000000 也可以采用其他时钟 #include <avr/sleep.h> /* 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模式 函数 void set_sleep_mode (uint8_t mode); 设定睡眠模式 void sleep_mode (void); 进入睡眠状态 */
[1] [2] [3] 下一页 |
|