SSブログ

(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

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。