Arduinoを内部クロック(8MHz)で動作させる

No Image

Arduinoは基本外部クロックで動作しています。
その方が精度が高いですし、速いです。
しかし16MHzで動かすには4.5V以上必要ということで電池の場合、個数が増えてしまいます。
とは言っても3Vでも一応動くんですけどね。
また外付けの水晶と電池で100円ほど制作費が上がってしまいます。
というわけでコンパクトで経済的にするため、内部クロックの8MHzにしてみます。

スポンサーリンク

用意するもの

  • Arduino UNO (Optifix)
  • ATmega88P/168P/328P
  • ジャンパワイヤ・LED・抵抗など
  • Arduino IDE 0023

これだけでいけます。
注意しなければいけないのは、UNOのブートローダがOptibootじゃなくOptifixだということです。
OptibootというのはUNOに最初から入っているブートローダです。
Optifixじゃないとできないそうです。
試したことがないんでわかりませんが・・・
「Optifix?なんだそれ」という人は次の記事を参考にしてください。

今回はATmega328Pを使いましたが、88Pや168Pでもいけるようです。
また、なぜArduino1.0ではないのかというと私の場合、今回動かすスケッチ(Arduino ISP)がコンパイルエラーになるからです。
別に成功したならArduino1.0で構いません。

環境を整える

ここから先は次のサイト様を参考にさせて頂きました。

おおまかに言うとavrdude.confを書き換えて、hardwareフォルダをインストールします。

動作テスト

あとは図のように配線して、[Boad]の一覧から[ATmega328P / Int. 8MHz]を選んでアップロードするだけでいいと思ったらそれだけではないようですorz
SimpleBreadboardAVR

私の持っているATmega328Pが全て「Optifix」を焼き込み済みなのが原因なのか、そのままではいけませんでした。
おそらく生のAVRマイコンだといけたんでしょうけど。
私のように上手にいかなかった場合は、次のとおりにしてみてください。

  1. とりあえずArduino側に「Arduino ISP」のスケッチをアップロードする
  2. 対象のAVRマイコンに水晶振動子とコンデンサ(負荷容量)をつける
    次の図のような感じ。(リセットピンの抵抗はいらないかも)
    BreadboardAVR
  3. [Boad]の一覧から[ATmega328P / Ext. 16MHz]を選ぶ
  4. テスト用スケッチ(Blinkの出力ピンを0にしたもの)をアップロード
  5. デジタル0ピンのLEDが点滅したのを確認する
  6. [Boad]の一覧から[ATmega328P / Int. 8MHz]を選ぶ
  7. [Tools]>[Burn Bootloader]から[Arduino as ISP]を選んで、ちょっと待つ
  8. もう一度テスト用スケッチをアップロード
  9. 水晶振動子とコンデンサをとってみる→内部クロックで動いてる!

こんな感じです。

スポンサーリンク

7.の[Burn Bootloader] は1.0では[Programmer]となっており、さらに[Burn Bootloader]を押すようになっています。
またクロック周波数が半分になったのでdelayなどの時間が2倍になると思っていましたが、そうではないようです。

追記 2013/01/23

なんだか大層なこと書いていますが、こんなことしなくても16MHzで動いている時にクリスタルを付けておいて、それから8MHzを選べばできました。
それでも無理なら、今はavr-dudeでヒューズビットを書き込めばいけるみたいです。

ヒューズビット
Lo : E2
Hi : DA
Ex : 05

多分あってます・・・
違ってたら言ってください。

Arduinoを内部クロック(8MHz)で動作させる

スポンサーリンク

Leave a Comment