CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

省電力化

消費電流を少なくするため内部クロックを低下させていくと割込みが歯抜けしたり、突然リセットがかかる
といった不具合がありましたが原因がわかりました。
 
割り込みインターバル2秒の間にtime_t型変数を表示データに展開するという処理が結構重く、
動作クロックを下げると2秒で終わらずに、次の割込みが無視されたり多重割込みで暴走していたようです。
このためsprintf関数で文字列展開していた処理を簡略化して軽くし、さらにタイマー1の入力に÷2の
プリスケーラを入れることで割り込みインターバルを4秒にしました。
 
こうすることで動作クロックを計時クロックの32.768kHzまで落とすことができ、低速動作させることで
消費電流を抑えられます。
 
イメージ 1
 
この結果、4秒に1回の割り込み中は35μA、それ以外はSLEEP状態に移行させることで30μAまで
低減させることができました。
時計なのでsleep中も32.768kHzの発振回路やタイマー、液晶のドライブは止めるわけには行かないので
これより下げるのは難しそうです。