【Arduino 1.6.3】 Arduino UnoでATmega328P-PUにブートローダを書き込む
Arduino UnoでATmega328P-PUにブートローダを書き込んでみました。
いろいろなサイトにやり方が書かれていたのですが、どれも古い情報みたいで少し詰まったので、やり方を書いてみたいと思います。
Arudino IDEのバージョンは1.6.3です。
ブートローダの書き込みにあたってこちらの記事がわかりやすかったです。
初心者だけど、一歩ずつ Arduino 超小型マイコン電子工作: UNOを使ってArduinoをブートローダーを書込
注意:自己責任でお願いします。
準備
必要なものは
- Arduino Uno
- ブレッドボード
- ジャンパーコード
- PC
- optifix.zip
です。
はじめにoptifix.zipをダウンロードしておいてください。これはブートローダを書き込むためのスケッチです。
こちらのフォーラムにダウンロードリンクがあります。forum.arduino.cc
続いてArduinoに空のスケッチを書き込みます。
これは配線してからPCに接続したときに、前のスケッチの影響でマイコンに信号が行かないようにするためです。
必要ないかもしれませんが精神衛生上やっておくといいと思います。
スケッチの修正
ダウンロードしたoptifix.zipを解凍して、自分がスケッチを置いているフォルダにコピーして、IDEで開きます。
参考にした記事の通りに修正するだけでは
In file included from optifix.ino:43:0: optiLoader.h:19:24: error: variable 'image_328' must be const in order to be put into read-only section by means of '__attribute__((progmem))' extern image_t PROGMEM image_328; ^ optifix.ino:572:17: error: variable 'image_328' must be const in order to be put into read-only section by means of '__attribute__((progmem))' コンパイル時にエラーが発生しました。
というようにコンパイルエラーが発生してしまいました。
修正箇所は4箇所です。
optiLoader.h 1行目
#include <WProgram.h> ↓ #include <Arduino.h>
19行目
extern image_t PROGMEM image_328; ↓ extern const PROGMEM image_t image_328;
optifix.pde 73行目付近
image_t *images[] = { &image_328, 0 }; ↓ image_t *images[] = { const_cast<image_t*>(&image_328), 0 };
572行目
image_t PROGMEM image_328 = {
↓
const PROGMEM image_t image_328 = {
これでコンパイルが通ると思います。
ブレッドボードの配線
配線図ではArduinoの5Vのピンが繋がっていますが、はじめは外しておきます。
配線ができたら、ArduinoをPCに接続し、シリアルモニタを開きます。
シリアルモニタの右下の通信速度を 19200bpsへ変更します。変更しないと文字化けしてメッセージが読めなくなるそうです。
optifixのスケッチを書き込みます。
シリアルモニタに
Reading signature: Bad value: 0 (no target attached?) Type 'G' or hit RESET for next chip
と出ていると思います。
意図的に電源を外しているので正常です。
ここで5Vピンを接続して、Gを大文字で入力して送信します。
成功するとこのような表示になります。
USBを外して書き込み完了です。