Arduinoで作った回路の小型化(Arduino互換機の製作)(4)

このページをスマートフォンなどでご覧になる場合は、画面を横長にする方が読みやすくなる事があります。
目次へ  前のページへ (1) (2) (3) (4) (5) (6) (7) (8) (9) 次のページへ
2017年01月05日 公開。

6. Arduino互換機のクロック周波数を8MHzに落とし、3Vで動作させる

前のページArduino互換機内蔵の電子サイコロを作りましたが、動作させるには1.5Vの電池が3本必要でした。この章では、クロック周波数を8MHzに落とすことにより、電池2本(3V)で動作させられるようにする方法を説明します。また、Arduino互換機を3V・8MHz動作させることで、消費電力を大幅に低減できますので、その事についても、消費電力の実測結果を交えて説明します。

6-1.ATmega328Pの電源電圧とクロック周波数の関係

マイコンは、故障しない範囲で電源電圧を上げた方が、クロック周波数が高く設定でき、高速に動作する傾向があります。ATmega328Pにおける、電源電圧とクロック周波数の関係を図11に示します。

図11、ATmega328Pにおける、電源電圧とクロック周波数の関係
↑ 画像をクリックすると拡大
図11、ATmega328Pにおける、電源電圧とクロック周波数の関係
水色で示した領域において、ATmega328Pが安全に動作する。

この図において、水色で示した領域が、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の処理能力にかなり余裕があるので、問題にはなりません。

6-2.Arduino互換機のクロック周波数を8MHzに変更する方法

図10の回路の中のArduino互換機のクロック周波数を8MHzにするには、水晶振動子を8MHzの物に交換すればOkです。前のページで紹介した電子サイコロ基板では、写真13に示した様に、水晶振動子を交換する事を見越してピンソケットに水晶振動子を挿入する形で取り付けましたので、16MHzの水晶振動子を抜いて、8MHzの水晶振動子を挿入すれば、回路の変更は終了です。

参考:水晶振動子ではなく、セラミック発振子を使って回路を組んだ場合は、16MHzのセラミック発振子を8MHzのセラミック発振子に交換します。

写真13(再掲)、マイコンと水晶振動子付近の拡大写真
↑ 画像をクリックすると拡大
写真13(再掲)、マイコンと水晶振動子付近の拡大写真

6-3.ArduinoのスケッチをArduino互換機に書き込む方法

クロック周波数を16MHzから8MHzに落とすと、Arduino互換機の動作速度が半分になります。

例えば

delay(1000);

とすると、本来は1秒の待ち時間が発生するはずですが、クロックを8MHzにすると、倍の2秒の待ち時間になってしまいます。

これでは困ってしまいますので、Arduino IDEの設定を変更して、クロックを8MHzにしても、delay(1000);で1秒の待ち時間になる様に、ソフト的な調整をする必要があります。

6-3-1.ATmega88/88V/168P/328Pサポートファイルのインストール

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サポートファイルを利用する方法を紹介します。

図12、ボードを"Arduino Pro or Pro Mini"に、プロセッサを"ATmega328(3.3V,8MHz)にする
図12、ボードを"Arduino Pro or Pro Mini"に、プロセッサを"ATmega328(3.3V,8MHz)にする
この図は、Arduino IDE 1.8.0の場合を示しています。Arduino IDEのバージョンによっては、メニュー構成が異なります。Arduino IDE 1.0.Xの場合は、ボードプロセッサの選択が分かれておらず、マイコンボードで一括して選択します。

サポートファイルのインストール法は、ATmega88/88V/168P/328PにArduinoのブートローダを書き込むの記事に説明があります。

サポートファイルのインストール後にATmega328Pにリスト1のスケッチを書き込んでください。Arduino Uno用ブートローダライターシールドを使う場合Arduino用ブートローダ/スケッチライタを使う場合のスケッチの書き込み方を順に説明します。

広告

6-3-2.Arduino Uno用ブートローダライターシールドを使う場合のスケッチの書き込み

Arduino Uno用ブートローダライタシールドを使う場合、スケッチを書き込むには、次の手順に従ってください。

Arduino Uno用ブートローダスケッチライタシールドキット 商品名 Arduino Uno用ブートローダスケッチライタシールドキット
税抜き小売価格 1440円
販売店 スイッチサイエンス
サポートページ
【手順1】ブートローダライタシールドをArduino Unoに装着し、CN3(KILL RESETと書いてあるピンヘッダ)からジャンパピンを取り除く
写真17、Arduino Unoにブートローダライターシールドを装着し、CN3のジャンパピンを取り除く
↑ 画像をクリックすると拡大
写真17、Arduino Unoにブートローダライターシールドを装着し、CN3のジャンパピンを取り除く
【手順2】Arduino UnoとパソコンをUSBケーブルで接続する。
【手順3】Arduino IDEを起動し、"ファイル→スケッチの例"メニューからArduinoISPのファームウェア(スケッチ)を開く
図13、ArduinoISPのスケッチを開く
図13、ArduinoISPのスケッチを開く
【手順4】ツール→マイコンボードメニュー(Arduino IDE 1.0.Xの場合)を開いてArduino Unoを選択する
図14、Arduino Unoを選択する(Arduino IDE 1.0.Xの場合)
図14、Arduino Unoを選択する(Arduino IDE 1.0.Xの場合)

注:Arduino IDE 1.6.X、1.7.Xまたは1.8.Xをお使いの場合は、"ツール→ボード"メニューになります。

図15、Arduino Unoを選択する(Arduino IDE 1.6.X、1.7.Xおよび1.8.Xの場合)
図15、Arduino Unoを選択する(Arduino IDE 1.6.X、1.7.Xおよび1.8.Xの場合)
【手順5】"ツール→シリアルポート"メニュー(Arduino IDE 1.0.Xの場合)でポート番号(COM番号)を指定する
図16、ポート番号を指定する(Arduino IDE 1.0.Xの場合)
図16、ポート番号を指定する(Arduino IDE 1.0.Xの場合)

注1:上の図ではCOM3を選んでいますが、実際にはご自分の環境に合わせてポート番号を指定してください。

注2:Arduino IDEのバージョンによっては、"ツール→ポート"メニューになります。

図17、ポート番号を指定する(Arduino IDE 1.7.6の場合)
図17、ポート番号を指定する(Arduino IDE 1.7.6の場合)
【手順6】 Arduino UnoにArduinoISPのスケッチを書き込む

下の図の様に、右矢印ボタンをクリックして、ArduinoISPのスケッチをArduino Unoに書き込みます。

図18、ArduinoISPのスケッチを書き込む
図18、ArduinoISPのスケッチを書き込む

ArduinoISPのスケッチが正常に書き込めると、HeartbeatのLED(LED2)が明るくなったり暗くなったりを繰り返します。

写真18、Heartbeat LEDの点滅
↑ 画像をクリックすると拡大
写真18、Heartbeat LEDの点滅
【手順7】CN3にジャンパピンを装着する
写真19、CN3にジャンパピンを装着する
↑ 画像をクリックすると拡大
写真19、CN3にジャンパピンを装着する
【手順8】 "ツール→書込装置"メニューで"Arduino as ISP"を選択する
図19、"Arduino as ISP"を選択
図19、"Arduino as ISP"を選択
【手順9】”ツール→マイコンボード"メニューで"ATmega328(8MHz/X'tal)"を選択する(Arduino IDE 1.0.Xの場合)
図20、"ATmega328P(8MHz/X'tal)"を選択(Arduino IDE 1.0.Xの場合)
図20、"ATmega328P(8MHz/X'tal)"を選択(Arduino IDE 1.0.Xの場合)

注:Arduino IDE 1.6.X、1.7.Xまたは1.8.Xをお使いの場合は、"ツール→ボード"メニューでATmega328Pを選び(図21参照)、次に"ツール→Clock"メニューで"8MHz/X'tal"を選びます(図22参照)。

図21、ATmega328Pを選択(Arduino IDE 1.6.X、1.7.Xまたは1.8.Xの場合)
図21、ATmega328Pを選択(Arduino IDE 1.6.X、1.7.Xまたは1.8.Xの場合)
図22、"8MHz/X'tal"を選択(Arduino IDE 1.6.X、1.7.Xまたは1.8.Xの場合)
図22、"8MHz/X'tal"を選択(Arduino IDE 1.6.X、1.7.Xまたは1.8.Xの場合)
【手順10】書き込みたいスケッチを開く

書き込みたいスケッチ(電子サイコロの場合は、リスト1)を開きます。

図23、書き込みたいスケッチを開く
図23、書き込みたいスケッチを開く
【手順11】 ZIFソケットにマイコンIC(ATmega328P-PU)を装着する

下の写真のように、マイコンをソケットに挿入してから、レバーを倒して固定します。

写真20、マイコンのZIFソケットへの挿入
↑ 画像をクリックすると拡大
写真20、マイコンのZIFソケットへの挿入
写真21、マイコンの固定
↑ 画像をクリックすると拡大
写真21、マイコンの固定
【手順12】 ツール→ブートローダを書き込むメニューを選び、ヒューズビットを書き込む

この手順では、マイコンにヒューズビット(動作モードに関する情報)を書き込みます。同時にブートローダも書き込みますが、手順13でスケッチを書き込む際にはブートローダは使用しません。また、スケッチを書き込むと、ブートローダは消去されます。

以前にヒューズビットを書き込んで動作モードを設定したマイコンの場合は、この手順をスキップできます。

ヒューズビットを書き込むには、ツール→ブートローダを書き込むメニューを選んでください。

図24、ヒューズビットを書き込む
図24、ヒューズビットを書き込む

ヒューズビットの書き込み中は、ProgrammingのLED(LED4)が点灯します。

写真22、Programming LEDの点灯
↑ 画像をクリックすると拡大
写真22、Programming LEDの点灯

しばらくすると、ヒューズビットが書き込めるはずです。

図25、書き込み完了メッセージ
図25、書き込み完了メッセージ

ヒューズビットの書き込みが終わったら、ProgrammingのLEDは消えます。

写真23、Programming LEDの消灯
↑ 画像をクリックすると拡大
写真23、Programming LEDの消灯

もし、ヒューズビットの書き込みに失敗すると、ErrorのLED(LED3)が点灯して書き込みが中断します。その場合は、正しい手順で書き込んでいるか再確認の上、もう一度ヒューズビットを書き込んでください。

写真24、Error LEDの点灯
↑ 画像をクリックすると拡大
写真24、Error LEDの点灯

注:エラーの発生の状況によっては、ErrorのLEDが点灯しない事もあります。必ず画面のメッセージを確認してください。

【手順13】"ファイル→書込装置を使って書き込む"メニュー(Arduino IDE 1.0.Xの場合)を選び、スケッチを書き込む

ファイル→書込装置を使って書き込むメニュー(Arduino IDE 1.8.0など一部のArduino IDEにおいては、スケッチ→書込装置を使って書き込むメニュー)を選ぶと、スケッチを書き込み始めます。

図26、スケッチを書き込む
図26、スケッチを書き込む

スケッチの書き込み中は、手順12の際と同様に、ProgrammingのLEDが点灯します。

スケッチが書き込み終わると、ProgrammingのLEDは消灯し、次の様なメッセージが表示されます。

図27、書き込み完了メッセージ
図27、書き込み完了メッセージ
【手順14】 マイコンをZIFソケットから外す

ZIFソケットのレバーを立ててからマイコンを取ってください。

続けて別のマイコンに同じスケッチを書き込む場合は、手順11~14を繰り返してください。

6-3-3.Arduino用ブートローダ/スケッチライタを使う場合のスケッチの書き込み

Arduino用ブートローダ/スケッチライタを使う場合、スケッチを書き込むには、Arduino用ブートローダ/スケッチライタの製作(7)に書いてある説明に従って操作してください。

Arduino用ブートローダ/スケッチライタキット 商品名 Arduino用ブートローダ/スケッチライタキット
税抜き小売価格 3000円
販売店 スイッチサイエンス
サポートページ
Arduino用ブートローダ/スケッチライタ(完成品) 商品名 Arduino用ブートローダ/スケッチライタ(完成品)
税抜き小売価格 3600円
販売店 スイッチサイエンス マルツ
サポートページ

ただし、手順8ではATmega328P(8MHz/X'tal)を選択してください。

Arduino IDE 1.0.Xを使っている場合は、ツール→マイコンボードメニューでATmega328P(8MHz/X'tal)を選択します。

図28、"ATmega328P(8MHz/X'tal)"を選択(Arduino IDE 1.0.Xの場合)
図28、"ATmega328P(8MHz/X'tal)"を選択(Arduino IDE 1.0.Xの場合)

Arduino IDE 1.6.X、1.7.Xまたは1.8.Xを使っている場合は、まずツール→ボードメニューでATmega328Pを選び(図29参照)、次にツール→Clockメニューで8MHz/X'talを選びます(図30参照)。

図29、ATmega328Pを選択(Arduino IDE 1.6.X、1.7.Xまたは1.8.Xの場合)
図29、ATmega328Pを選択(Arduino IDE 1.6.X、1.7.Xまたは1.8.Xの場合)
図30、"8MHz/X'tal"を選択(Arduino IDE 1.6.X、1.7.Xまたは1.8.Xの場合)
図30、"8MHz/X'tal"を選択(Arduino IDE 1.6.X、1.7.Xまたは1.8.Xの場合)

6-3-4.3Vで電子サイコロを動作させてみる

水晶振動子を8MHzの物に交換して、スケッチを8MHz用に書き直したら、電源端子に単3アルカリ電池2個を直列接続して、3Vで電子サイコロを動作させてみます。写真25に示す様に、3Vの電源で電子サイコロが動作している事が分かります。

写真25、単3アルカリ電池2本で動作する電子サイコロ
↑ 画像をクリックすると拡大
写真25、単3アルカリ電池2本で動作する電子サイコロ

6-3-5.5V・16MHzから3V・8MHzに変更してどの程度省電力化できるか確認する

5V・16MHz動作から3V・3MHz動作に変更して、どの程度消費電流や消費電力が減るか確認してみます。

消費電流は、点灯するLEDの数でも大きく変わる事から、一番点灯するLEDの数が少ない1の目が出た状態で、消費電流を測定する事にします。測定は、図31に示す様に、電源電圧を変化させられる実験用電源で電圧を5Vと3Vに切り替えて、電流計モードに設定したDMM(デジタルマルチメータ)で消費電流を測定します。

また、LEDの消費電流を調べるために、LED4に直列に接続されたR5の両端電圧もDMMで測定します。その測定結果をR5の抵抗値(1kΩ)で割れば、LED4での消費電流が計算できます。

さらに、電子サイコロの消費電流からLEDの消費電流を引けば、マイコンでの正味の消費電流が測定できます。

図31、消費電流の測定系
↑ 画像をクリックすると拡大
図31、消費電流の測定系

測定結果を表1に示します。

表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互換機を動作させる方法について説明します。

目次へ  前のページへ (1) (2) (3) (4) (5) (6) (7) (8) (9) 次のページへ

このページで使われている用語の解説

関連ページ

関連製品

Arduino Uno用ブートローダスケッチライタシールドキット 商品名 Arduino Uno用ブートローダスケッチライタシールドキット
税抜き小売価格 1440円
販売店 スイッチサイエンス
サポートページ
Arduino用ブートローダ/スケッチライタキット 商品名 Arduino用ブートローダ/スケッチライタキット
税抜き小売価格 3000円
販売店 スイッチサイエンス
サポートページ
Arduino用ブートローダ/スケッチライタ(完成品) 商品名 Arduino用ブートローダ/スケッチライタ(完成品)
税抜き小売価格 3600円
販売店 スイッチサイエンス マルツ
サポートページ
PCBgogoのバナー
Arduino 電子工作
このサイトの記事が本になりました
ISBN:978-4-7775-1941-5
工学社の書籍の内容の紹介ページ
本のカバーの写真か書名をクリックすると、Amazonの書籍購入ページに移動します。
電子工作で学ぶ論理回路入門
このサイトの中の人が書いた本です。
ISBN:978-4-7775-2280-4
工学社の書籍の内容の紹介ページ
この本の紹介記事
本のカバーの写真か書名をクリックすると、Amazonの書籍購入ページに移動します。