2014年3月23日日曜日

ATmega328P-PUにブートローダを書き込む

今回はArduino UNOの話です。はい。
うまくいったのでそのメモです。



まず、Arduino購入するとなると3000円ぐらいします。
そこでボードに乗ってるATmega328P-PUのみを購入すれば秋月で250円で済みます。いえい↑。

ところが、そのままのATmega328P-PUをボードに乗ってる方と差し替えてもスケッチを書き込めません。Arduinoとして使えるようにするにはブートローダってやつを書き込まないといけないようです。


ちなみにすでにブートローダが書き込まれたATmega328P-PUも売っています。
http://www.switch-science.com/catalog/663/
350円なのでこれでもいいんですが、まあ自分でもやってみたいじゃないですか。


手順

用意するもの
・Arduino UNO
・ATmega328P-PU
・水晶発振子(16MHz)
・積層セラミックコンデンサ(22pF)×2個
・抵抗(10KΩ)

以上のものを画像のように配線します。
(参考→http://arduino.cc/en/Tutorial/ArduinoToBreadboard#.Uy2_vPl_uT8


そしたら次のリンクからoptifix.zipってのをダウンロードして解凍します。
http://forum.arduino.cc/index.php/topic,28733.0.html

んで解凍したoptifixフォルダーをArduinoのスケッチが保存されてるフォルダーに移動させます。


※注意
ここで、中身のふたつのファイルのうち「optiLoader.h」の方の冒頭を
#include <WProgram.h> → #include <Arduino.h>
と書き変えます。(書き変えないとエラーがでる?)

最後にArduinoIDEでoptifixスケッチを開き、書き込みます。
あとは勝手にブートローダの書き込みがされ、シリアルモニターを通信速度19200baud(これ以外だと文字化けする)で開き以下のように表示されれば成功。



結果

 
ブートローダを書き込んだ328Pをボードに乗せてLチカのスケッチを書き込み、それを取り外しての単体動作も確認しました。画像のようにここでも水晶発振子(16MHz)をつけないと、内部クロックで動作してしまい、例えばdelay();などの値が違ってきてしまいます。

これで、スケッチも書き込めるし取り外して単体で使うこともできます。
もうわざわざ3000円出さなくてもArduinoひとつあれば約300円でArduinoをどんどん増やせるというわけですね。

参考サイト↓
http://blog-yama.a-quest.com/?eid=970124


追記

※追記(2015/09/22)

本稿の情報は既に古くなってしまったようで、久しぶりにブートローダを書き込もうとしたら以下のようなエラーが出ました。
1
2
3
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;


http://ijmp320.hatenablog.jp/entry/2015/05/16/121922
ですが、上記の記事の通りスケッチを修正したところ、問題なくまたブートローダを書き込めるようになりました。


※追記(2014/03/29)

Arduinoに乗せて、328Pを差し込むだけで済むようにシールドを作りました。
トグルスイッチで5Vのピンに繋がるようになっています。



0 件のコメント:

コメントを投稿