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
私の持っているATmega328Pが全て「Optifix」を焼き込み済みなのが原因なのか、そのままではいけませんでした。
おそらく生のAVRマイコンだといけたんでしょうけど。
私のように上手にいかなかった場合は、次のとおりにしてみてください。
- とりあえずArduino側に「Arduino ISP」のスケッチをアップロードする
- 対象のAVRマイコンに水晶振動子とコンデンサ(負荷容量)をつける
次の図のような感じ。(リセットピンの抵抗はいらないかも)
- [Boad]の一覧から[ATmega328P / Ext. 16MHz]を選ぶ
- テスト用スケッチ(Blinkの出力ピンを0にしたもの)をアップロード
- デジタル0ピンのLEDが点滅したのを確認する
- [Boad]の一覧から[ATmega328P / Int. 8MHz]を選ぶ
- [Tools]>[Burn Bootloader]から[Arduino as ISP]を選んで、ちょっと待つ
- もう一度テスト用スケッチをアップロード
- 水晶振動子とコンデンサをとってみる→内部クロックで動いてる!
スポンサーリンク
こんな感じです。
7.の[Burn Bootloader] は1.0では[Programmer]となっており、さらに[Burn Bootloader]を押すようになっています。
またクロック周波数が半分になったのでdelayなどの時間が2倍になると思っていましたが、そうではないようです。
追記 2013/01/23
なんだか大層なこと書いていますが、こんなことしなくても16MHzで動いている時にクリスタルを付けておいて、それから8MHzを選べばできました。
それでも無理なら、今はavr-dudeでヒューズビットを書き込めばいけるみたいです。
ヒューズビット
Lo : E2
Hi : DA
Ex : 05
多分あってます・・・
違ってたら言ってください。
スポンサーリンク
Leave a Comment