2017年01月05日 | 公開。 |
前のページでArduino互換機内蔵の電子サイコロを作りましたが、動作させるには1.5Vの電池が3本必要でした。この章では、クロック周波数を8MHzに落とすことにより、電池2本(3V)で動作させられるようにする方法を説明します。また、Arduino互換機を3V・8MHz動作させることで、消費電力を大幅に低減できますので、その事についても、消費電力の実測結果を交えて説明します。
マイコンは、故障しない範囲で電源電圧を上げた方が、クロック周波数が高く設定でき、高速に動作する傾向があります。ATmega328Pにおける、電源電圧とクロック周波数の関係を図11に示します。
この図において、水色で示した領域が、ATmega328Pが安全に動作する領域を示しています。水色で示した範囲外に電源電圧とクロック周波数を設定すると、ATmega328Pが動作しなかったり、動作が不安定になったりする可能性があります。
この図を見ると、電源電圧が1.8Vの場合はクロック周波数を4MHzまでしか上げられないのに対して、電源電圧を4.5Vまで上げると、クロック周波数の上限が20MHzまで拡大され、高い電圧ほど高速に動作させられる様子が読み取れます。
図10の回路では、クロック周波数が16MHzになっていますが、この場合の電源電圧の範囲は、図11より3.78~5.5Vだと分かります。これでは3Vでは動作させることができません。
一方で、もしクロック周波数を8MHzにまで落としたとすると、図11より電源電圧の範囲が2.4~5.5Vと、低い方に広がる事が分かります。これならアルカリ電池2本(3V)でも動作させる事ができます。
クロック周波数を下げる事も、電源電圧を下げる事も、共に消費電力の低減につながりますので、バッテリ駆動を考える場合は、クロックを落として3Vで駆動すると、電池の持ちが良くなります。
クロック周波数を16MHzから8MHzに半分にすると、Arduino互換機の動作速度が半分になってしまいますが、電子サイコロに使う場合は、Arduinoの処理能力にかなり余裕があるので、問題にはなりません。
図10の回路の中のArduino互換機のクロック周波数を8MHzにするには、水晶振動子を8MHzの物に交換すればOkです。前のページで紹介した電子サイコロ基板では、写真13に示した様に、水晶振動子を交換する事を見越してピンソケットに水晶振動子を挿入する形で取り付けましたので、16MHzの水晶振動子を抜いて、8MHzの水晶振動子を挿入すれば、回路の変更は終了です。
参考:水晶振動子ではなく、セラミック発振子を使って回路を組んだ場合は、16MHzのセラミック発振子を8MHzのセラミック発振子に交換します。
クロック周波数を16MHzから8MHzに落とすと、Arduino互換機の動作速度が半分になります。
例えば
delay(1000);
とすると、本来は1秒の待ち時間が発生するはずですが、クロックを8MHzにすると、倍の2秒の待ち時間になってしまいます。
これでは困ってしまいますので、Arduino IDEの設定を変更して、クロックを8MHzにしても、delay(1000);で1秒の待ち時間になる様に、ソフト的な調整をする必要があります。
8MHzでATmega328Pを動作させるには、ATmega88/88V/168P/328PにArduinoのブートローダを書き込むの記事で紹介した、ATmega88/88V/168P/328PサポートファイルをArduino IDEにインストールする必要があります。
参考:ATmega88/88V/168P/328Pサポートファイルを使用せず、Arduino IDEでボードの設定を"Arduino Pro or Pro Mini"、プロセッサの設定を"ATmega328(3.3V,8MHz)"に設定する事でも、スケッチを書き込めますが(図12参照)、ここでは後に応用が利くATmega88/88V/168P/328Pサポートファイルを利用する方法を紹介します。
サポートファイルのインストール法は、ATmega88/88V/168P/328PにArduinoのブートローダを書き込むの記事に説明があります。
サポートファイルのインストール後にATmega328Pにリスト1のスケッチを書き込んでください。Arduino Uno用ブートローダライターシールドを使う場合とArduino用ブートローダ/スケッチライタを使う場合のスケッチの書き込み方を順に説明します。
Arduino Uno用ブートローダライタシールドを使う場合、スケッチを書き込むには、次の手順に従ってください。
商品名 | Arduino Uno用ブートローダスケッチライタシールドキット | |
税抜き小売価格 | 1440円 | |
販売店 | スイッチサイエンス | |
サポートページ | Arduino Uno用ブートローダライタシールドキットサポートページ |
注:Arduino IDE 1.6.X、1.7.Xまたは1.8.Xをお使いの場合は、"ツール→ボード"メニューになります。
注1:上の図ではCOM3を選んでいますが、実際にはご自分の環境に合わせてポート番号を指定してください。
注2:Arduino IDEのバージョンによっては、"ツール→ポート"メニューになります。
下の図の様に、右矢印ボタンをクリックして、ArduinoISPのスケッチをArduino Unoに書き込みます。
ArduinoISPのスケッチが正常に書き込めると、HeartbeatのLED(LED2)が明るくなったり暗くなったりを繰り返します。
注:Arduino IDE 1.6.X、1.7.Xまたは1.8.Xをお使いの場合は、"ツール→ボード"メニューでATmega328Pを選び(図21参照)、次に"ツール→Clock"メニューで"8MHz/X'tal"を選びます(図22参照)。
書き込みたいスケッチ(電子サイコロの場合は、リスト1)を開きます。
下の写真のように、マイコンをソケットに挿入してから、レバーを倒して固定します。
この手順では、マイコンにヒューズビット(動作モードに関する情報)を書き込みます。同時にブートローダも書き込みますが、手順13でスケッチを書き込む際にはブートローダは使用しません。また、スケッチを書き込むと、ブートローダは消去されます。
以前にヒューズビットを書き込んで動作モードを設定したマイコンの場合は、この手順をスキップできます。
ヒューズビットを書き込むには、ツール→ブートローダを書き込むメニューを選んでください。
ヒューズビットの書き込み中は、ProgrammingのLED(LED4)が点灯します。
しばらくすると、ヒューズビットが書き込めるはずです。
ヒューズビットの書き込みが終わったら、ProgrammingのLEDは消えます。
もし、ヒューズビットの書き込みに失敗すると、ErrorのLED(LED3)が点灯して書き込みが中断します。その場合は、正しい手順で書き込んでいるか再確認の上、もう一度ヒューズビットを書き込んでください。
注:エラーの発生の状況によっては、ErrorのLEDが点灯しない事もあります。必ず画面のメッセージを確認してください。
ファイル→書込装置を使って書き込むメニュー(Arduino IDE 1.8.0など一部のArduino IDEにおいては、スケッチ→書込装置を使って書き込むメニュー)を選ぶと、スケッチを書き込み始めます。
スケッチの書き込み中は、手順12の際と同様に、ProgrammingのLEDが点灯します。
スケッチが書き込み終わると、ProgrammingのLEDは消灯し、次の様なメッセージが表示されます。
ZIFソケットのレバーを立ててからマイコンを取ってください。
続けて別のマイコンに同じスケッチを書き込む場合は、手順11~14を繰り返してください。
Arduino用ブートローダ/スケッチライタを使う場合、スケッチを書き込むには、Arduino用ブートローダ/スケッチライタの製作(7)に書いてある説明に従って操作してください。
商品名 | Arduino用ブートローダ/スケッチライタキット | |
税抜き小売価格 | 3000円 | |
販売店 | スイッチサイエンス | |
サポートページ | Arduino用ブートローダ/スケッチライタキットサポートページ |
商品名 | Arduino用ブートローダ/スケッチライタ(完成品) | |
税抜き小売価格 | 3600円 | |
販売店 | スイッチサイエンス マルツ | |
サポートページ | Arduino用ブートローダ/スケッチライタ(完成品)サポートページ |
ただし、手順8ではATmega328P(8MHz/X'tal)を選択してください。
Arduino IDE 1.0.Xを使っている場合は、ツール→マイコンボードメニューでATmega328P(8MHz/X'tal)を選択します。
Arduino IDE 1.6.X、1.7.Xまたは1.8.Xを使っている場合は、まずツール→ボードメニューでATmega328Pを選び(図29参照)、次にツール→Clockメニューで8MHz/X'talを選びます(図30参照)。
水晶振動子を8MHzの物に交換して、スケッチを8MHz用に書き直したら、電源端子に単3アルカリ電池2個を直列接続して、3Vで電子サイコロを動作させてみます。写真25に示す様に、3Vの電源で電子サイコロが動作している事が分かります。
5V・16MHz動作から3V・3MHz動作に変更して、どの程度消費電流や消費電力が減るか確認してみます。
消費電流は、点灯するLEDの数でも大きく変わる事から、一番点灯するLEDの数が少ない1の目が出た状態で、消費電流を測定する事にします。測定は、図31に示す様に、電源電圧を変化させられる実験用電源で電圧を5Vと3Vに切り替えて、電流計モードに設定したDMM(デジタルマルチメータ)で消費電流を測定します。
また、LEDの消費電流を調べるために、LED4に直列に接続されたR5の両端電圧もDMMで測定します。その測定結果をR5の抵抗値(1kΩ)で割れば、LED4での消費電流が計算できます。
さらに、電子サイコロの消費電流からLEDの消費電流を引けば、マイコンでの正味の消費電流が測定できます。
測定結果を表1に示します。
マイコンの 動作条件 |
電子サイコロ の消費電流 [mA] |
LEDの 消費電流 [mA] |
マイコンの 消費電流 [mA] |
マイコンの 消費電力 [mW] |
---|---|---|---|---|
5V・16MHz | 15.01 | 2.92 | 12.09 | 60.45 |
3V・8MHz | 4.53 | 1.06 | 3.47 | 10.41 |
この様に、5V・16MHzから3V・8MHzに定電圧化・低クロック周波数化すると、マイコンの消費電流は28.7%、消費電力にいたっては17.2%となり、大幅な省電力化ができる事が分かります。
次のページでは、ATmega328Pに内蔵しているCR発振器を使う事で、水晶振動子を使わずにArduino互換機を動作させる方法について説明します。
商品名 | Arduino Uno用ブートローダスケッチライタシールドキット | |
税抜き小売価格 | 1440円 | |
販売店 | スイッチサイエンス | |
サポートページ | Arduino Uno用ブートローダライタシールドキットサポートページ |
商品名 | Arduino用ブートローダ/スケッチライタキット | |
税抜き小売価格 | 3000円 | |
販売店 | スイッチサイエンス | |
サポートページ | Arduino用ブートローダ/スケッチライタキットサポートページ |
商品名 | Arduino用ブートローダ/スケッチライタ(完成品) | |
税抜き小売価格 | 3600円 | |
販売店 | スイッチサイエンス マルツ | |
サポートページ | Arduino用ブートローダ/スケッチライタ(完成品)サポートページ |