(ARDUINO自作)ARDUINO ISPで、168Pにブートローダを書き込む [arduino]
ARDUINO ISPで、本来サポートしていない168Pにブートローダを書き込みます。
最近、Arduinoについては、いつのまにか新しいUNOってモデルが出ていたりしたわけです。
しかしこの新型モデルだと、今まで私がやっていた自作Arduinoが作れません!
個人的にすごく慌てました!
「このままでは私はもう手元のDuemilanoveが壊れたら、もう自作できないじゃん!」
しかし、調べると、新しくIDEに追加されたArduino ISPで作れることが判明し一安心。しかも、配線も作業手順も簡単そうです!
おお、なんだずいぶん便利になっちゃったなぁ!
なんて思っていたら、ATMEGA168には対応していても、ATmega168Pには対応していないことが判明しました。
でも、なんとか試行錯誤を繰り返し、168Pにブートローダを書き込めるようになりましたので、今回はATmega168Pに3.3V内蔵8Mhzクロック動作のブートローダを書き込む方法を解説します。
今回も初心者に判りやすいようにまとめます!
(ただし、私の説明で自作するのは自己責任でお願いします。どんなトラブルが発生しても責任は待ちません)
■用意するもの
(ハードウェア系)
1:WINDOWSパソコン
2:Arduino Duemilanove、もしくはUNO
Arduino DuemilanoveやUNOには、Arduino ISPのプログラムを書き込んでおきます。
3:ブレッドボード(接続用ワイヤ含む)
4:抵抗(110Ω~124Ωの範囲内)
5:ATmega168P
(1)まずは図の通りにArduinoとブレッドボードを配線します。
ただし、この配線には足らないポイントがあります。
実は、この配線だけではオートリセット機能がジャマをしてISPとしての機能が働きません。そこで、オートリセット機能を無効にするために簡単な配線を追加します。
5Vの電源を110Ω~124Ωの抵抗を通してリセットの端子に接続します。
こうすることで、リセット機能は無効になり、これでISPとして使えるようになります。
私はDuemilanoveで110Ωと120Ωでリセット機能が無効になることを確認しています。
※一応、抵抗の範囲は守ってください。
(ATmega168Pの右側のジャンパーワイヤは、位置決め用の目印です(^^;;)
ハードウェアが整いましたので、ソフトウェアにいきましょう!
(ソフトウェア系)
1:Arduino-IDE0023
2:168P設定用のファイル※後述
設定ファイルは「Kimio Kosaka」さんのHPで解説している二つのファイルを用意します。
(今回も「Kimio Kosaka」さんのHPを参考にさせていただきました)
「Kimio Kosaka」さんのHP
http://make.kosakalab.com/arduino/
1:ATmega/ATtiny記述ファイルアーカイブ hardware.zip(2011.07.28版)
(http://www.geocities.jp/arduino_diecimila/use/source/hardware.zip)
2:avrdude.conf拡張ファイル avrdude_conf_add.zip(2011.08.11版)
(http://www.geocities.jp/arduino_diecimila/use/source/avrdude_conf_add.zip)
※各ファイルのリンクは変更される場合がありますので、実際に「Kimio Kosaka」さんのHPで確認してから入手することをお勧めします。
■IDEを168Pへ対応させる
1:入手した、avrdude_conf_add.zipを解凍します。
2:出てきたavrdude_conf_add.txtを開き、この内容をIDEのavrdude.confに追加します。
該当するファイルは、Arduinoをインストールしたディレクトリの中にあります。
たとえばCドライブのルートにIDEをインストールした場合は以下の場所です。
c:\arduino-0023\hardware\tools\avr\etc\avrdude.conf
このavrdude.confをエディタなどで開き、この文末にavrdude_conf_add.txtの内容を追加します。
3:今度はhardware.zipを解凍します。
4:解凍して出てきたhardwareフォルダは以下のようになっています。
[hardware]
+--[avr]
+--boards.txt
+--[bootloaders]
+---[dummy]+--dummy.hex
+--[cores]
+---[arduino]他各種ファイル
+---[atmega644p_1284p]他各種ファイル
+---[attiny45_85]他各種ファイル
+---[attiny2313]他各種ファイル
5:このhardwareフォルダをArduinoのスケッチがごっそりと集められているフォルダに移動します。
※フォルダの情報はIDEのPreferencesにある「Skechbook location」に表示されています
※hardwareフォルダごとごっそり移動させてください。中身であるbootloaders、cores、boards.txtだけを移動しても動作しません
hardwareフォルダをそこに移動することで、先ほどavrdude.confに追加したボードを扱えるようになります。
■<重要>ここでつまずくポイントがあります■
実はこのままではブートローダファイルは書き込まれません。
実際に書き込まれるのは、先ほど移動させたhardwareフォルダのdummy.hexなので、それを変える必要があります。
hardwareフォルダの下のavrフォルダにあるboards.txtを開いてみてください。
ちょっとクセのある設定ファイルなので、メモ帳などで開いた場合改行が正しくされません。改行が[CR+LF]だけでなく、[CR]のみや[LF]のみに対応しているエディタなどで開く必要があります。
6:ATmega168Pの項目を変更します。boards.txtを開いて、以下のように変更してください。
……略……
###########################################
avr88p.name=ATmega88P / Int.8MHz
avr88p.upload.using=arduino:arduinoisp
avr88p.upload.maximum_size=8192
avr88p.bootloader.low_fuses=0xe2
avr88p.bootloader.high_fuses=0xdd
avr88p.bootloader.extended_fuses=0x07
avr88p.bootloader.path=dummy
avr88p.bootloader.file=dummy.hex<<<<<<このようにダミーのファイルが指定されています。
avr88p.bootloader.unlock_bits=0x3F
avr88p.bootloader.lock_bits=0x3F
avr88p.build.mcu=atmega88p
avr88p.build.f_cpu=8000000L
avr88p.build.core=arduino
###########################################
avr168p.name=ATmega168P / Int.8MHz
avr168p.upload.using=arduino:arduinoisp
avr168p.upload.maximum_size=16384
avr168p.bootloader.low_fuses=0xe2
avr168p.bootloader.high_fuses=0xdf <<<<<内蔵8MHz動作用にこのように書き換えてください。(0xddにすると2.7ボルト以下で動作を停止するように出来ます)
avr168p.bootloader.extended_fuses=0x00 <<<<<内蔵8MHz動作用にこのように書き換えてください。
avr168p.bootloader.path=dummy
avr168p.bootloader.file=ATmegaBOOT_168_pro_8MHz.hex <<<<<ブートローダのために書き換えてください。
avr168p.bootloader.unlock_bits=0x3F
avr168p.bootloader.lock_bits=0x3F
avr168p.build.mcu=atmega168p
avr168p.build.f_cpu=8000000L
avr168p.build.core=arduino
############################################
……略……
※ここでのヒューズビットは一定の電圧以下になっても168Pの動作を停止させない値になっています。自分の用途に合わせて変更することも可能です。
7:ATmega168Pを3.3V内蔵8MHz動作で使うための、ブートローダ用HEXファイル(ATmegaBOOT_168_pro_8MHz.hex)を、dummyフォルダの中にコピーしてください。
ATmegaBOOT_168_pro_8MHz.hexのファイルは、Cドライブのルートにインストールした場合なら、
C:\arduino-0023\hardware\arduino\bootloaders\atmegaフォルダにあります。
移動ではなく、コピーすることに注意してください。
■ブートローダの書き込み
1:Arduino ISPのプログラムを書き込んだArduino DuemilanoveやUNOで、
[tool]-[boad]から、「ATmega168P / Int.8MHz」を選択します。
2:[tool]-[burn bootloader]-[w/ Arduino as ISP]を選択して、ブートローダを168Pに書き込みます。
これで、168Pは内蔵8Mhzクロック動作のArduinoとして動作します。
※なお完成した168Pにスケッチを書き込む場合は、このままでは出来ませんので、別途配線を変えたうえでSparkfunのFTDI BASIC・3.3V版などを使ってください。
※また、その時はボードの選択を「Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega168」としてください。
※5Vでの動作確認はしていません。
最近、Arduinoについては、いつのまにか新しいUNOってモデルが出ていたりしたわけです。
しかしこの新型モデルだと、今まで私がやっていた自作Arduinoが作れません!
個人的にすごく慌てました!
「このままでは私はもう手元のDuemilanoveが壊れたら、もう自作できないじゃん!」
しかし、調べると、新しくIDEに追加されたArduino ISPで作れることが判明し一安心。しかも、配線も作業手順も簡単そうです!
おお、なんだずいぶん便利になっちゃったなぁ!
なんて思っていたら、ATMEGA168には対応していても、ATmega168Pには対応していないことが判明しました。
でも、なんとか試行錯誤を繰り返し、168Pにブートローダを書き込めるようになりましたので、今回はATmega168Pに3.3V内蔵8Mhzクロック動作のブートローダを書き込む方法を解説します。
今回も初心者に判りやすいようにまとめます!
(ただし、私の説明で自作するのは自己責任でお願いします。どんなトラブルが発生しても責任は待ちません)
■用意するもの
(ハードウェア系)
1:WINDOWSパソコン
2:Arduino Duemilanove、もしくはUNO
Arduino DuemilanoveやUNOには、Arduino ISPのプログラムを書き込んでおきます。
3:ブレッドボード(接続用ワイヤ含む)
4:抵抗(110Ω~124Ωの範囲内)
5:ATmega168P
(1)まずは図の通りにArduinoとブレッドボードを配線します。
ただし、この配線には足らないポイントがあります。
実は、この配線だけではオートリセット機能がジャマをしてISPとしての機能が働きません。そこで、オートリセット機能を無効にするために簡単な配線を追加します。
5Vの電源を110Ω~124Ωの抵抗を通してリセットの端子に接続します。
こうすることで、リセット機能は無効になり、これでISPとして使えるようになります。
私はDuemilanoveで110Ωと120Ωでリセット機能が無効になることを確認しています。
※一応、抵抗の範囲は守ってください。
(ATmega168Pの右側のジャンパーワイヤは、位置決め用の目印です(^^;;)
ハードウェアが整いましたので、ソフトウェアにいきましょう!
(ソフトウェア系)
1:Arduino-IDE0023
2:168P設定用のファイル※後述
設定ファイルは「Kimio Kosaka」さんのHPで解説している二つのファイルを用意します。
(今回も「Kimio Kosaka」さんのHPを参考にさせていただきました)
「Kimio Kosaka」さんのHP
http://make.kosakalab.com/arduino/
1:ATmega/ATtiny記述ファイルアーカイブ hardware.zip(2011.07.28版)
(http://www.geocities.jp/arduino_diecimila/use/source/hardware.zip)
2:avrdude.conf拡張ファイル avrdude_conf_add.zip(2011.08.11版)
(http://www.geocities.jp/arduino_diecimila/use/source/avrdude_conf_add.zip)
※各ファイルのリンクは変更される場合がありますので、実際に「Kimio Kosaka」さんのHPで確認してから入手することをお勧めします。
■IDEを168Pへ対応させる
1:入手した、avrdude_conf_add.zipを解凍します。
2:出てきたavrdude_conf_add.txtを開き、この内容をIDEのavrdude.confに追加します。
該当するファイルは、Arduinoをインストールしたディレクトリの中にあります。
たとえばCドライブのルートにIDEをインストールした場合は以下の場所です。
c:\arduino-0023\hardware\tools\avr\etc\avrdude.conf
このavrdude.confをエディタなどで開き、この文末にavrdude_conf_add.txtの内容を追加します。
3:今度はhardware.zipを解凍します。
4:解凍して出てきたhardwareフォルダは以下のようになっています。
[hardware]
+--[avr]
+--boards.txt
+--[bootloaders]
+---[dummy]+--dummy.hex
+--[cores]
+---[arduino]他各種ファイル
+---[atmega644p_1284p]他各種ファイル
+---[attiny45_85]他各種ファイル
+---[attiny2313]他各種ファイル
5:このhardwareフォルダをArduinoのスケッチがごっそりと集められているフォルダに移動します。
※フォルダの情報はIDEのPreferencesにある「Skechbook location」に表示されています
※hardwareフォルダごとごっそり移動させてください。中身であるbootloaders、cores、boards.txtだけを移動しても動作しません
hardwareフォルダをそこに移動することで、先ほどavrdude.confに追加したボードを扱えるようになります。
■<重要>ここでつまずくポイントがあります■
実はこのままではブートローダファイルは書き込まれません。
実際に書き込まれるのは、先ほど移動させたhardwareフォルダのdummy.hexなので、それを変える必要があります。
hardwareフォルダの下のavrフォルダにあるboards.txtを開いてみてください。
ちょっとクセのある設定ファイルなので、メモ帳などで開いた場合改行が正しくされません。改行が[CR+LF]だけでなく、[CR]のみや[LF]のみに対応しているエディタなどで開く必要があります。
6:ATmega168Pの項目を変更します。boards.txtを開いて、以下のように変更してください。
……略……
###########################################
avr88p.name=ATmega88P / Int.8MHz
avr88p.upload.using=arduino:arduinoisp
avr88p.upload.maximum_size=8192
avr88p.bootloader.low_fuses=0xe2
avr88p.bootloader.high_fuses=0xdd
avr88p.bootloader.extended_fuses=0x07
avr88p.bootloader.path=dummy
avr88p.bootloader.file=dummy.hex<<<<<<このようにダミーのファイルが指定されています。
avr88p.bootloader.unlock_bits=0x3F
avr88p.bootloader.lock_bits=0x3F
avr88p.build.mcu=atmega88p
avr88p.build.f_cpu=8000000L
avr88p.build.core=arduino
###########################################
avr168p.name=ATmega168P / Int.8MHz
avr168p.upload.using=arduino:arduinoisp
avr168p.upload.maximum_size=16384
avr168p.bootloader.low_fuses=0xe2
avr168p.bootloader.high_fuses=0xdf <<<<<内蔵8MHz動作用にこのように書き換えてください。(0xddにすると2.7ボルト以下で動作を停止するように出来ます)
avr168p.bootloader.extended_fuses=0x00 <<<<<内蔵8MHz動作用にこのように書き換えてください。
avr168p.bootloader.path=dummy
avr168p.bootloader.file=ATmegaBOOT_168_pro_8MHz.hex <<<<<ブートローダのために書き換えてください。
avr168p.bootloader.unlock_bits=0x3F
avr168p.bootloader.lock_bits=0x3F
avr168p.build.mcu=atmega168p
avr168p.build.f_cpu=8000000L
avr168p.build.core=arduino
############################################
……略……
※ここでのヒューズビットは一定の電圧以下になっても168Pの動作を停止させない値になっています。自分の用途に合わせて変更することも可能です。
7:ATmega168Pを3.3V内蔵8MHz動作で使うための、ブートローダ用HEXファイル(ATmegaBOOT_168_pro_8MHz.hex)を、dummyフォルダの中にコピーしてください。
ATmegaBOOT_168_pro_8MHz.hexのファイルは、Cドライブのルートにインストールした場合なら、
C:\arduino-0023\hardware\arduino\bootloaders\atmegaフォルダにあります。
移動ではなく、コピーすることに注意してください。
■ブートローダの書き込み
1:Arduino ISPのプログラムを書き込んだArduino DuemilanoveやUNOで、
[tool]-[boad]から、「ATmega168P / Int.8MHz」を選択します。
2:[tool]-[burn bootloader]-[w/ Arduino as ISP]を選択して、ブートローダを168Pに書き込みます。
これで、168Pは内蔵8Mhzクロック動作のArduinoとして動作します。
※なお完成した168Pにスケッチを書き込む場合は、このままでは出来ませんので、別途配線を変えたうえでSparkfunのFTDI BASIC・3.3V版などを使ってください。
※また、その時はボードの選択を「Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega168」としてください。
※5Vでの動作確認はしていません。
2011-11-27 04:43
nice!(0)
コメント(4)
トラックバック(0)
日本に住んでいる韓国人の留学生です。
本当に助かりました。
ありがとうございます。
by excusme (2012-12-24 15:10)
>excusmeさん
お役に立てて良かったです!(^O^)
by dayan (2012-12-28 23:48)
これのおかげでシリアル通信が可能になりました。
ありがとうございます。
by 学生 (2014-10-06 05:25)
>学生さん
だいぶ古い情報になってしまいましたが、お役に立ててよかったです!
by dayan (2014-10-13 00:49)