Arduinoで遊ぼう - 動作クロックを切り替えて省電力制御
Posted by arms22 on 2010年03月04日

Arduinoの動作クロックを変更するライブラリ「Prescaler」を作った。普段、Arduinoは16MHz(Proは8MHz)で動いている。このライブラリを使えば8MHz、4MHz、2MHz、1MHzと動的に動作クロックを切り替えることができる。USB電源やDC電源を使って動作させている場合はそれほど省電力に気を使う必要はないだろう。でも、電池やソーラーセルで動作させたい場合は別だ。動作クロックを切り替えて、積極的に省電力制御を行おう。
次の図はATmega168Pの動作クロックと消費電流の関係を表している。当然、動作クロックが低いほど消費電流は少なくなる。
(ATmega168Pのデータシートより)
次の関数・ライブラリはArduinoが16MHz(Proは8MHz)で動いていることを前提に作られている。その為、Prescalerで動作クロックを切り替えると正しく動作しなくなる。
- Serialライブラリ
- tone()
- analogRead()
- micros()
- millis()
- delayMicroseconds()
- delay()
delay()/millis()については代替関数を用意しているので、これらを使う。
- scaledMillis()
- scaledDelay(ms)
ライブラリのインストール
次のURLからPrescalerライブラリをダウンロードし、Arduinoのライブラリフォルダにコピーする。
Prescalerライブラリ
http://arms22.googlecode.com/files/Prescaler001.zip
サンプルスケッチ
#include <Prescaler.h>
const int led_pin = 13;
void setup()
{
pinMode(led_pin, OUTPUT);
Prescaler.set(clock_div_8);
}
void loop()
{
scaledDelay(500);
digitalWrite(led_pin, HIGH);
scaledDelay(500);
digitalWrite(led_pin, LOW);
}
Prescaler.set()でSystem Clock Prescalerの分周比を設定する。Arduino Pro 3.3V 8MHz 168を使って分周比1から256まで設定した時の消費電流を計測してみた。
div1 | 8MHz | 5.0mA |
div2 | 4MHz | 3.4mA |
div4 | 2MHz | 2.5mA |
div8 | 1MHz | 1.8mA |
div16 | 500kHz | 1.5mA |
div32 | 250kHz | 1.3mA |
div64 | 125kHz | 1.2mA |
div128 | 62.5kHz | 1.2mA |
div256 | 31.25kHz | 1.1mA |
※実は Arduino playground 全く同じようなライブラリがすでにあったりする。。
Arduino playground - Prescaler
http://www.arduino.cc/playground/Code/Prescaler
Making Things Talk ―Arduinoで作る「会話」するモノたち
posted with amazlet at 10.03.04
Tom Igoe
オライリージャパン
売り上げランキング: 107826
オライリージャパン
売り上げランキング: 107826
Ads by Google
2 Comments
このコメントは管理人のみ閲覧できます
Arduino 1.0 になってWProgram.hの名称がArduino.hに変更された為だと思います。
Prescaler.cppのWProgram.hをArduino.hに変えて試してみてください。
Prescaler.cppのWProgram.hをArduino.hに変えて試してみてください。
Leave a reply
該当の記事は見つかりませんでした。