「Arduino NanoをAVRライタにしてATmega328P単独でLチカしてみる。(その2)」の続き。
Fuse bytes(Fuse Bits)編だ。
前回、どうもクロックがちゃんと設定できなかったので少し調べてみた。
それ、先にやれよ。
PIC使いが一番理解できてなかったのは、Fuse bytesというものをプログラムとは別のプロセスで書き込んでやる必要がある点だ。
PICなら、Configuration Bitsとしてプログラム中に書いてあって、プログラム時に同時に書き込み設定される。
これがわかってなかった。
字面で読んでいても、受け付けないというか、それ関連の記述の意味が頭に入って来なかった。
クロックの設定なんてマイコンの言わば魂だろ、それをプログラムと同時に扱えないなんて馬鹿すぎる。
ってな感じで、思考が硬直化している。
参考にしたのはここ。
http://www.martyncurrey.com/arduino-atmega-328p-fuse-settings/
「the easiest way to set the fuses was to burn a boot loader」と書いてある。
「ヒューズバイトをセットする一番簡単な方法はブートローダを書き込むことです。」
要するに、ヒューズバイトを書き換えるためだけに、一度ブートローダを書き込む必要がありますよ。
それが一番簡単な方法ですよ。
ということだが、最初何を言ってるのか全然わからなかったし、PICユーザーにしてみればそれでも十分すぎるくらい面倒だ。
具体的に書く。
仮にATmega328Pを外付けの16MHzで使うとする。
Arduino UNOやNanoはATmega328Pをまさにその設定で使っている。
そういう設定が同じものが見つかればそのブートローダを使う。
例えばNano用のブートローダをATmega328Pに書き込む。
この時に外付け16MHzの設定でヒューズバイトが書き換えられる。
その後で改めてLチカのプログラムを書き込む。
この時にはヒューズバイトは変更されない。
さっきNanoの設定と同じにしたヒューズバイトのままになる。
実際には以下のような手順だ。
下準備は「Arduino NanoをAVRライタにしてATmega328P単独でLチカしてみる。(その2)」で完了しているものとする。
1.Nanoのブートローダを書き込む。
これで、Nanoと同じヒューズバイトになるので、クロックも外付け16MHzになる。
2.改めてプログラムを書き込む。
この時はヒューズバイトは書き込まれない。
最後に残った疑問は、じゃ、それ以外の設定にしたいときはどうすんのかってことだ。
それは、自分で設定を用意すればいいらしい。
Arduino IDEのあるフォルダの
hardware¥arduino¥avr
の中にboards.txtがあって、ここに設定が書かれており、これに追加することで好みの設定にできるようだ。
ただ、MiniCoreをインストールしてあれば、いくつかの設定はすでに用意されている。