スリープモード

スリープモード

スリープには以下の種類がある

モード 名称 機能 消費電量(参考)
SLEEP_MODE_IDLE アイドル CPU,ROMへのクロック供給停止,周辺回路へのクロックは供給し続ける
SPI,UART,TWI,コンパレータ,AD変換器,タイマ,各割り込み等は動作を継続
15mA  
SLEEP_MODE_ADC AD変換雑音低減 CPU,ROM,IOへのクロック供給を停止,他へのクロックき供給し続ける
AD変換時の雑音を低減するモード
SPI,UART,TWI,コンパレータ,AD変換器,タイマ,各割り込み等は動作を継続
6.5mA  
SLEEP_MODE_PWR_DOWN パワーダウンモード クロック発信器を停止させ、クロックの供給を停止
外部割り込み,TWIアドレス一致割り込み,ウォッチドックは動作を継続
0.36mA  
SLEEP_MODE_PWR_SAVE パワーセーブ パワーダウンモードと同様だが,タイマ2は動作をすることか可能
外部割り込み,TWIアドレス一致割り込み,ウォッチドックは動作を継続
1.62mA  
SLEEP_MODE_STANBY スタンバイモード 外部クリスタル/セラミック振動子で動作する以外はパワーダウンモードと同様 0.84mA  
SLEEP_MODE_EXT_STANBY 拡張スタンバイモード 外部クリスタル/セラミック振動子で動作する以外はパワーセーブモードと同様 1.62mA  

スリープ状態から,1:リセット,2:INT0,3:WDT,4:ピン割込み、でウエイクアップ(復帰)する

スリープ実行によりクロック供給が停止してもピンの状態は変わらないのでスリープ前にOFFする必要がある

Arduino環境で使う場合

関数

ヘッダー

#include <avr/sleep.h>

スリープモード選択

set_sleep_mode(mode)

スリープ許可

sleep_enable()

スリープ禁止
sleep_disable()

スリープ実行

sleep_cpu():

 

割込み禁止

cli()

割り込み許可

sei()

 

マクロ

sleep_mode()マクロ

sleep_enable(), sleep_disable() , sleep_cpu()を実行

 

使い方

実質使用するのは,アイドル,パワーダウンモード位である

set_sleep_mode(mode)

sleep_mode()

 

直接使う場合

MCUCRレジスターにスリープモードを設定しSleep Enable Bitを設定すると準備完了

SLEEPのコマンドでスリープ

#define sleep() __asm__ __volatile__ ("sleep")