So-net無料ブログ作成
検索選択

(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とブレッドボードを配線します。
SimpleBreadboardAVR.png
 ただし、この配線には足らないポイントがあります。
 実は、この配線だけではオートリセット機能がジャマをしてISPとしての機能が働きません。そこで、オートリセット機能を無効にするために簡単な配線を追加します。
 5Vの電源を110Ω~124Ωの抵抗を通してリセットの端子に接続します。
 こうすることで、リセット機能は無効になり、これでISPとして使えるようになります。
 私はDuemilanoveで110Ωと120Ωでリセット機能が無効になることを確認しています。
 ※一応、抵抗の範囲は守ってください。
CIMG0156.JPG
 (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での動作確認はしていません。
nice!(0)  コメント(4)  トラックバック(0) 

nice! 0

コメント 4

excusme

日本に住んでいる韓国人の留学生です。
本当に助かりました。
ありがとうございます。
by excusme (2012-12-24 15:10) 

dayan

>excusmeさん
お役に立てて良かったです!(^O^)
by dayan (2012-12-28 23:48) 

学生

これのおかげでシリアル通信が可能になりました。
ありがとうございます。
by 学生 (2014-10-06 05:25) 

dayan

>学生さん
だいぶ古い情報になってしまいましたが、お役に立ててよかったです!

by dayan (2014-10-13 00:49) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0