日々の生活を好き勝手につづったブログ(My blog is written by inoshita.jp)
スリープには以下の種類がある
モード | 名称 | 機能 | 消費電量(参考) |
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する必要がある
関数
ヘッダー
#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")