ないものは作りましょう。

色々なことに挑戦(主にプログラミング)

【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 = {

これでコンパイルが通ると思います。


ブレッドボードの配線

f:id:IJMP320:20150516114940p:plain
配線図ではArduinoの5Vのピンが繋がっていますが、はじめは外しておきます。

配線ができたら、ArduinoをPCに接続し、シリアルモニタを開きます。
シリアルモニタの右下の通信速度を 19200bpsへ変更します。変更しないと文字化けしてメッセージが読めなくなるそうです。


optifixのスケッチを書き込みます。

シリアルモニタに

Reading signature: Bad value: 0
 (no target attached?)

Type 'G' or hit RESET for next chip

と出ていると思います。
意図的に電源を外しているので正常です。

ここで5Vピンを接続して、Gを大文字で入力して送信します。

成功するとこのような表示になります。
f:id:IJMP320:20150516120913p:plain

USBを外して書き込み完了です。


ブートローダのテスト

Arduino Unoに載っているATmega328P-PUと交換して、スケッチを書き込んでみることでテストできます。

外すときにかなりガッチリ固定されているので、マイナスドライバーなどで少しずつ外します。

取り付ける時は向きに注意してください。

ファイル→スケッチの例→BASIC→Blink
を書き込んで、13番ピンのLEDが点滅すれば成功です。



今回ブートローダの書き込みに挑戦しましたが、コンパイルが通らなかったことで詰まってしまいました。
1.6.3で挑戦しようとしている方の役に立てれば幸いです。

それでは〜