« Arduino - SparkFun マイク・モジュール | トップページ | STM32 - Primer2 »

Arduino - ArduinoによるAVRライターとATmega328P再換装

以前の記事でArduinoにATmega328Pを換装しましたが、個体差なのかプログラム転送後に自動的にリセットが掛からない状態でした。

IDEが0013になって、ATmega328Pが正式サポートされました。

今回はIDEに付属するブートローダーを利用して、自分のArduinoの問題点が解決できるか検証してみます。

Arduiino_w328p

 

ついでなので、ArduinoをAVRライターとして使う方法があるので、これを利用してブートローダーを書き込んでみたいと思います。

ライターについてはKimio Kosakaさんによる「外付けAVRライタ無しでBootloaderを書き込む」を参考にしますが、ATmega168を対象にしているので、自前で設定ファイルを追記してATmega328Pでも書き込めるようにしました。

また、ライターソフトにはすzさんのBitBang Modeを利用した「avrdude-serjtag」を使用しますので、serjtag-0.3 を予めダウンロードして展開しておいて下さい。
大変有用な情報をありがとうございましたm(_ _)m

--

 

まずはArduino本体を改造します。

Arduiino_writer1

上の写真のように「X3」と書かれている端子にヘッダーをハンダ付けします。
一度ハンダを吸い取ってから取り付けましょう。

Kimio Kosakaさんのところではメス・メスのケーブルを使用しているので、オスのヘッダーを付けていましたが、自分の手持ちにはオス・メスのケーブルしかなかったので、メスのヘッダーに置き換えてます。

Arduino_writercable

この方が、何かの弾みで接触不良が起きないので安心です。

 

Arduiino_writer2

そして4本のケーブルを接続します。
これでライターとしての本体は完成です。取り合えずArduinoライターとしましょう。

 

--

 

ここからはほぼ自前で調べた内容です。
serjtag-0.3は基本的にavrdudeなのですが、ここでは FT232R のデバイス名が必要になるので、上記の物でないと認識しませんので注意。

まず以下のディレクトリに移動します。

serjtag-0.3\avrdude-serjtag\binary

 

このままではArduinoライターとATmega328Pの定義がないので認識しません。

avrdude.conf  というファイルがあるので、それをテキストエディタなどで開き、「programmer」としてArduinoを登録します。

記述する場所はどこでも構いません。

次にATmega328Pというデバイスを「part」に記述しますが、これについては「Arduino IDE for ATmega328」を参考にしています。

ちょっと長いですが、これを適当な場所にコピペします。
以上、2箇所を追記したら保存して終了。

これで設定は終わりです。

 

--

 

では認識出来るか試してみましょう。
Arduino本体に328Pを載せて、先の配線を確認し、PCとUSB接続します。

コマンドプロンプトから、

avrdude -c duemilanove -P ft0 -p m328p -t -B 4800

と入力します。
注意しなければならないのは、-c-p オプションです。

-c はプログラマー名で、「programmer」の id で指定した名前です。
duemilanoveは長いので、バッチにするか、id="arduino"とかにしてしまった方が良いでしょう。

-p はCPU名で、「part」の id で指定した名前です。

 

実行すると以下のようになると思います。

Arduino_avrdude1_2

無事にATmega328Pが認識できました。
quit と入力して終了します。
上記以外の結果が出たらエラーになっていると思うので、間違いがないかチェックして下さい。

ヒューズビットの確認や書き込みまでの手順などは、Kimio Kosakaさんのサイトを参考にしてみて下さい。
参考までに、ブートローダーが書き込まれたATmega328Pの元々のヒューズビットは、

efuse = 0x05
hfuse = 0xda
lfuse = 0xff
lock = 0x0f

となってます。

 

次はいよいよブートローダーの書き込みです。

arduino\hardware\bootloaders\atmega168

にある

ATmegaBOOT_168_atmega328.hex

をavrdudeのあるディレクトリへコピーします。

ここで間違ってはいけないのが、atmega328フォルダのhexファイルではないことです。
最初ここのファイルを書き込みしたら、IDEから全く認識してくれませんでした。
必ずatmega168フォルダのhexファイルを選択して下さい。

そしてhexファイルを書き込みます。

avrdude -c duemilanove -P ft0 -p m328p -U flash:w:ATmegaBOOT_168_atmega328.hex

をコマンドプロンプトから実行して下さい。

Arduino_avrdude2

上の画像はベリファイまで正常に終了したことを示しています。
これで書き込みが完了したので、USB接続を切り離して、ケーブルを取り外します。

 

--

 

再度USB接続して、ブートローダーが働いているか確認します。

IDEの設定は前回と同様に、Tools -> Board メニューから、「Arduino w/ ATmega328」を選択しておき、適当なスケッチを転送して下さい。

無事に転送出来ていれば、IDEの下のメッセージエリアに、

Binary sketch size: 1414 bytes (of a 30720 byte maximum)

と出ます。
上記は Blink を転送した場合で、注目するのは 30720 という値です。
これはATmega328PのFlash容量で、ブートローダーを差し引いた値なので、これで正常ということですhappy01

で、気がかりだった「プログラム転送後に自動リセットが掛からない」という問題ですが、無事にクリアされました。
しっかりリセットが掛かりますnote
これで解決です。

スイッチサイエンスさん、改めて検証にお付き合い下さってありがとうございましたm(_ _)m

 

予断ですが、yukiさんとこのavrdude-GUIも使用出来るので、コマンドラインが面倒ならこちらでもOKです。
先ほどの serjtag-0.3\avrdude-serjtag\binary に avrdude-GUI.exe をコピーすれば大丈夫です。
現在はバージョンアップして v1.0.5 になってます。
重ね重ね便利なソフトウェアをありがとうございますm(_ _)m

Arduino_avrdudeguiavrdude-GUI v1.0.4

上記のように設定して下さい。
Programmer覧は、自分で記述した id名で出てきます。
Port覧は ft0 を指定するので、その覧は空白にして、代わりにコマンドライン・オプションで指定します。

-P ft0 -t

をコマンドライン・オプションに記述しておいて下さい。
低速が必要な場合は、上記オプションに -B 4800 を追記して下さい。

こちらでもブートローダーの書き込みに成功したことを確認しています。

というわけで、チップを乗せかえるのが面倒ではありますが、いざというときのライターとして結構使えますよ~

|

« Arduino - SparkFun マイク・モジュール | トップページ | STM32 - Primer2 »

電子工作」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/204580/44270749

この記事へのトラックバック一覧です: Arduino - ArduinoによるAVRライターとATmega328P再換装:

« Arduino - SparkFun マイク・モジュール | トップページ | STM32 - Primer2 »