Sahara's WebLog

日記のような、備忘録のような、うらみつらみのような、自慢のような…。

Arduinoのクロック数を落として省電力稼働させる。

Arduino Nano
Arduino IDE 1.8.12
参考サイト
 https://playground.arduino.cc/Code/Prescaler/https://playground.arduino.cc/Code/Prescaler/

上のサイトに書いてある通り、クロックをゆっくりにすれば省電力になる。
クロックは分周すれば半分、そのまた半分と、周期を長くできる。
マイコン使いならおなじみのprescalerってやつだ。

もらって来たコードを「prescaler.h」という名前でスケッチのあるフォルダに置く。
スケッチの先頭に
#include “prescaler.h”
を追加する。
setup()の先頭に
setClockPrescaler(CLOCK_PRESCALER_8);
などと追加する。
CLOCK_PRESCALER_# の#の数字が分周比を決める。
8なら8分の1のクロック数になる。
2の乗数で指定する。

コードの初めの方でAVRのレジスタを変更してクロックの分周用のPrescalerの値を決めていると思われるがまだ詳細は確認していない。
後半は、クロック数変更によって影響を受ける millis() と delay() のかわりに trueMillis() と trueDelay(long) を提供している。
millis() と delay() をそのまま使うとゆっくりになってしまうので置き換えるわけだ。

以下のスケッチを実行すると、

delay(100);は本来100msのところ8倍の800ms間隔になる。

16MHzと2MHzとの消費電流の違い。

消費電流を測るってのにLチカさせてるから値に幅が出ている。
1MHzまでは省電力の効果があるが、それ以上落としてもさほど省電力にはならないようだ。
軽い処理で電池駆動するならクロック落とすのもありということになる。

このエントリーをはてなブックマークに追加

Posted under: Arduino


コメントを残す

メールアドレスが公開されることはありません。

Time limit is exhausted. Please reload CAPTCHA.