HOME
ワンチップArduino ブートローダー&スケッチライタ


1.初めに

 Arduino UNO などを購入すると3,000円ほど掛かります。なにかひとつ回路を組み立てて、また違う回路を組み立てるにはまた3,000円くらい出して Arduino Unoを買わなければなりません。

 Arduino UNO などにはマイクロプロセッサーの「ATMega328P」とスケッチをマイクロプロセッサーに書く為の回路が乗っかっています。

 いっぺんスケッチを書き込んで回路が完成してしまうと、スケッチを書く回路はなにもお仕事をしません。マイクロプロセッサーだけお仕事しています。

 だったら、マイクロプロセッサ(250円)だけ買ってきてスケッチを書き込めば、一回の投資は250円で済んでしまいます。

 ここでひとつ問題があります。実はArduinoに使っているマイクロプロセッサには「ブートローダー」というソフトがあらかじめ書き込まれていて、このソフトのおかげでスケッチを書き込むことができます。

 買ってきたばかりのATMega328Pにはブートローダーが書き込まれていませんから、Arduino-IDEで書き込むことができません。

 そこで、ブートローダを書き込む装置を作りました。また、この装置はスケッチを書くときにも使えます。


2.回路図



 いつも懇意にしてもらっている air_variable さんに、回路図を起こしてもらいました。 air_variable さん、多謝 m(_ _)m
 簡単な回路ですのでブレッドボードで組んでも構いません。今回は特別に基板を起こしてみました。


3.配線図

AE-UM232RL使用版。秋月のAE-UM232RLがすでにあったり、ブートローダーは滅多に書かないからどこかの基板からはがしてきて使うという方向け。


 これは基板の裏面から見た配線図です。

 ・チップ部品は以下の通りです。
  @1KΩ
  A黄緑LED(アノード→カソード)
  BオレンジLED(カソード←アノード)
  C1KΩ
  D1KΩ
  E0.1u
  F1KΩ
  G0.1u
  H赤LED(カソード←アノード)
  I1KΩ
  J100KΩ



こちらはFT232RL使用版。AE−UM232RLは高いからなるべく費用を抑えたい人向け。


 記述のないチップ部品は0.1uFのチップ積層セラミックコンデンサです。チップLEDのアノード・カソードの向きはAE-UM232RL版と同じです。


4.部品表

AE-UM232R版
部品名型番数量購入元備考
赤色チップLEDOSHR16081個秋月電子通商I-03978 1608
オレンジ色チップLEDCL−195D1個秋月電子通商I-00652 1608
黄緑色チップLEDOSYG16081個秋月電子通商I-03980 1608
チップ抵抗1KΩERJ6GEYJ102V5個千石電商7A3E-F8NY 2012
チップ抵抗100KΩERJ6GEYJ104V1個千石電商4A8E-G8N2 2012
チップ積層セラミック0.1uGRM188F11H104ZA2個秋月電子通商P-04940 1608
USBシリアル変換モジュールAE-UM232R1個秋月電子通商K-01977
丸ピンICソケット(24P)[600mil]2227MC-24-061個秋月電子通商P-00032
丸ピンICソケット(28P)[300mil]2227MC-28-031個秋月電子通商P-01339
ピンヘッダ(オス) 1×40 (40P)1個秋月電子通商C-00167
ロングピンソケット 1x42(42P)FHU-1x42SG1個秋月電子通商C-05779
セラミック発振子(セラロック)コンデンサ内蔵タイプ 16MHzCSTLS16M0X55-B01個秋月電子通商P-00525
AVRマイコン ATMEGA328P−PUATMEGA328P-PU1個秋月電子通商I-03142
ブートローダー&スケッチライタ基板BLSKWTR0011枚ThinkAboutPCB



FT232RL版
部品名型番数量購入元備考
赤色チップLEDOSHR16081個秋月電子通商I-03978 1608
オレンジ色チップLEDCL−195D1個秋月電子通商I-00652 1608
黄緑色チップLEDOSYG16081個秋月電子通商I-03980 1608
チップ抵抗1KΩERJ6GEYJ102V5個千石電商7A3E-F8NY 2012
チップ抵抗100KΩERJ6GEYJ104V1個千石電商4A8E-G8N2 2012
チップ積層セラミック0.01GRM188B11H103KA011個秋月電子通商P-04660 1608
チップ積層セラミック0.1uGRM188F11H104ZA6個秋月電子通商P-04940 1608
チップ積層セラミック4.7uCM21X5R475K16AT1個秋月電子通商P-04462 2012
チップインダクター(フェライトビーズ)BLM18PG600SN1D1個秋月電子通商P-04442 2012
USB・シリアル変換IC FT232RLFT232RL1個秋月電子通商I-01739
ヒロセ表面実装用USBコネクタ・ミニBUX60A-MB-5ST1個秋月電子通商C-02107
丸ピンICソケット(28P)[300mil]2227MC-28-031個秋月電子通商P-01339
ピンヘッダ(オス) 1×40 (40P)1個秋月電子通商C-00167
ロングピンソケット 1x42(42P)FHU-1x42SG1個秋月電子通商C-05779
ジャンパーピン(赤)(2.54mmピッチ2228AG-RD1個秋月電子通商P-03876
セラミック発振子(セラロック)コンデンサ内蔵タイプ 16MHzCSTLS16M0X55-B01個秋月電子通商P-00525
AVRマイコン ATMEGA328P−PUATMEGA328P-PU1個秋月電子通商I-03142
ブートローダー&スケッチライタ基板BLSKWTR0021枚ThinkAboutPCB



5.完成図外観



 これは完成版の外観です。(完成版にAE-UM232RLは含まれていません) 基板のみの外観とは異なります。(LEDが5ミリからチップLEDに変わるなど)






 これはFT-232RL使用版です。ハンダ付けする表面実装のディスクリート部品は多少増えますが、モジュールのAE-UM232RLが950円に対して使用しているFT-232RLが350円なので全体のコストが抑えられます。  赤線で囲った10KΩの抵抗はハンダ付け不要です。


6.ターゲットとの接続

 このライタでブートローダーを書きますが、スケッチも書くことができます。ただ、デバッグする度にこのライタに取り付けたり取り外したりするのは効率的ではありません。

 そこで、このライタとターゲット回路を接続して、基板上にワンチップArduinoを載せたまま、直接スケッチを書き込みます。

まず、このような5本ストレートなケーブルを用意します。





 それぞれの線の意味は以下の通りです。↑の写真の上のコネクタの上の線から…

  @GND(黒い線)
  AVcc(5Vor3.3V)(赤い線)
  BRESET(白い線)
  CRX(白い線)
  DTX(白い線)



 この線をターゲット回路とライタに接続します。
 例えばターゲットの回路はこんな感じ。




・コネクタの中央(RESET)をATMega328Pの1番ピンとつながるよう接続
・コネクタの一番左はGNDラインへ接続
・コネクタの左から2番目はVssラインへ接続
・ATMega328Pの1番ピン(RESET)は100KΩでプルアップ。同時にリセットスイッチを押したらGNDへ落ちるように配線。
・ATMega328Pの7番ピンをVssラインへ、8番ピンをGNDラインへ接続。
・ATMega328Pの7番・8番ピン間にパスコン(0.1u)を接続。
・ATMega328Pの8・9・10番ピンへセラロック(16MHz)を接続。(セラロックは下記の写真のようなギミックを作っておくと配線しやすいです)
・ATMega328Pの20番ピンをVssラインへ、22番ピンをGNDラインへ接続
・ATMega328Pの20番・22番ピン間にパスコン(0.1u)を接続。

 これだけで基本的には動きます。まぁ、これだけだとI/Oをなにもつけていないので、なにもお仕事しませんが (^^;;;


ブレッドボードで扱いやすいようにしたセラロックのギミック


7.ブートローダーの書き込み方

 まずはソフトウェア環境の構築。ライタの回路を見てもやけにあっさりしていて、どこにライタの機能があるの?という感じですが、実は秋月のUSBシリアル変換モジュールに載っているFTDI社のFT232RLが活躍しています。
 このFT232RLをプログラムしてライタの機能をもたせています。それがすz氏が開発した「avrdude-serjtag」です。このすばらしいソフトを開発して下さったすz氏に感謝です。

・上記リンクから最新版のavrdude-serjtagをダウンロードし、適当なフォルダを作成して格納します。
・同じフォルダの中の「bin」フォルダ内に以下のバッチファイルを作成します。(行頭のスペースは削除して下さい)
【ATmega328P用】
@echo off
echo ######################
echo # チップを消去します #
echo ######################
pause
avrdude.exe -c diecimila -P ft0 -p m328p -B 4800 -e
echo ################################
echo # フューズビットをセットします #
echo ################################
pause
avrdude.exe -c diecimila -P ft0 -p m328p -B 4800 -U efuse:w:0x05:m -U hfuse:w:0xDA:m -U lfuse:w:0xCF:m
echo ################################
echo # ブートローダーを書き込みます #
echo ################################
pause
avrdude.exe -c diecimila -P ft0 -p m328p -D -U flash:w:"C:\(Arduinoインストールフォルダ)\hardware\arduino\bootloaders\atmega\ATmegaBOOT_168_atmega328.hex":a
echo ##############################
echo # ロックビットをセットします #
echo ##############################
pause
avrdude.exe -c diecimila -P ft0 -p m328p -U lock:w:0x0F:m
echo ##############
echo # 終了します #
echo ##############
pause

【ATmega168P用】
@echo off
echo ######################
echo # チップを消去します #
echo ######################
pause
avrdude.exe -c diecimila -P ft0 -p m168p -B 4800 -e
echo ################################
echo # フューズビットをセットします #
echo ################################
pause
avrdude.exe -c diecimila -P ft0 -p m168p -B 4800 -U efuse:w:0x00:m -U hfuse:w:0xDD:m -U lfuse:w:0xCF:m
echo ################################
echo # ブートローダーを書き込みます #
echo ################################
pause
avrdude.exe -c diecimila -P ft0 -p m168p -D -U flash:w:"C:\(Arduinoインストールフォルダ)\hardware\arduino\bootloaders\atmega\ATmegaBOOT_168_diecimila.hex":a
echo ##############################
echo # ロックビットをセットします #
echo ##############################
pause
avrdude.exe -c diecimila -P ft0 -p m168p -U lock:w:0x0F:m
echo ##############
echo # 終了します #
echo ##############
pause

【ATmega168用】
@echo off
echo ######################
echo # チップを消去します #
echo ######################
pause
avrdude.exe -c diecimila -P ft0 -p m168 -B 4800 -e
echo ################################
echo # フューズビットをセットします #
echo ################################
pause
avrdude.exe -c diecimila -P ft0 -p m168 -B 4800 -U efuse:w:0x00:m -U hfuse:w:0xDD:m -U lfuse:w:0xCF:m
echo ################################
echo # ブートローダーを書き込みます #
echo ################################
pause
avrdude.exe -c diecimila -P ft0 -p m168 -D -U flash:w:"C:\(Arduinoインストールフォルダ)\hardware\arduino\bootloaders\atmega\ATmegaBOOT_168_diecimila.hex":a
echo ##############################
echo # ロックビットをセットします #
echo ##############################
pause
avrdude.exe -c diecimila -P ft0 -p m168 -U lock:w:0x0F:m
echo ##############
echo # 終了します #
echo ##############
pause


・適当なバッチファイル名をつけて格納します。(例:「V1.0_BurnBootLoader_m328P.bat」)
・USBシリアル変換モジュールのJ1は2−3間ショート、J2はショートピンを差したままです。
・ライタにUSBケーブルを接続します。
・ATMega328P(168P,168)を28ピンソケットに取り付けてからバッチファイルを起動します。
・要所要所でポーズが掛かりますが、エラーのメッセージが出ていないことを確認してから次へ進んで下さい。(何かのキーを押す)
・これで無事ブートローダー書き込み済みのワンチップArduinoができました。
・ライタに接続しているUSBケーブルを一旦抜き差しします。これをしないとうまくスケッチが書けないようです。
・ATMega328P(168P,168)をターゲット回路へ差し込み、サンプルスケッチの「basic」「blink」を書きこんでみて下さい。「Tools」の「Board」は「Arduino Duemilanove w/ ATmega328(あるいは ATmega168)」を選択します。
 書き込み後、D13(ATMega328P(168P,168)の19番ピン)出力にLEDと電流制限用抵抗(1KΩ程度)を直列につないでGNDに接続しておけば、
 LEDチカチカするはずです。

以降はこの仕組みでArduino-IDEを使って開発を行うことができます (^^)v


HOME


クリエイティブ・コモンズ・ライセンス
この 作品 は クリエイティブ・コモンズ 表示 - 非営利 - 継承 2.1 日本 ライセンスの下に提供されています。