Arduino Uno用ブートローダライタシールドの製作(2)

このページをスマホなどでご覧になる場合は、画面を横長にする方が読みやすくなります。
目次へ  前のページへ (1) (2) (3) 次のページへ

3.ブートローダ書き込み回路をシールドの形に固定する

いよいよ、本題です。ブートローダ書き込み回路を、シールドの形に固定して、使いやすく、信頼性の高いブートローダライタに仕上げましょう。

基本的に、ブレッドボード上に組んだ回路をシールドに固定するだけなので、そんなに難しくありません。ただ、前のページで紹介したブレッドボードの回路では、ArduinoISP(ブートローダー書き込み用のスケッチ)の機能で、一部使っていない機能があります。具体的に言うと、書き込みの状態を示す、インジケーター用LEDが、前のページの回路には付いていませんでした。

ブレッドボードに回路を組むなら、必要最低限の回路にして配線の数を減らしたいですが、今回は半田付けしてシールドを作るので、ArduinoISPの機能を最大限に生かす方向で考えます。

ArduinoISPのソースリストを見ると、9番ピン、8番ピン、7番ピンにLED(と電流制限抵抗)を付けるように書いてあります。

図10、ArduinoISPのソースリストのコメント
図10、ArduinoISPのソースリストのコメント

各ピンの信号の名称と意味を、次の表にまとめます。

表1、ArduinoISPのインジケーターLED用信号の名称と意味
Arduinoのピン番号 信号の名称 信号の意味
9 Heartbeat ArduinoISPが動作していることを表わす信号。analogWrite関数を使い、LEDをじわじわと明るくしたり暗くしたりをを繰り返すように制御する。その明るさの変化の様子はHeartbeat(心拍)という言葉を連想させる。
8 Error 書き込み中に何かエラーが発生するとLEDが点灯する。ソースコード中のコメントには、このLEDを赤色にすると意味が分かりやすいと書いてある。
7 Programming ブートローダを書き込むターゲットのマイコンと交信している時にLEDが点灯する。

今回は、これらのLEDに加えて、電源が入っていることを示すPOWER LEDを付ける事にします。

前のページで組んだブレッドボードの回路では、ATmega328Pの21番ピン(AREF)をオープンにしていましたが、なんとなく気持ち悪いので、今回は5Vにつなぐことにします。

さらに、ArduinoのRESET-GND間に入る10μFの電解コンデンサは、スイッチで無効にできるようにし、シールドをArduino Unoに接続したままで、ArduinoISPのスケッチの書き込みと、ブートローダ書き込みの両方をできるようにします。

既に基板上に半田付けされたATmega328Pのにブートローダを書き込む可能性を考え、ICSP端子も設けます。この端子を設けておくと、ATmega328P-AUの様な表面実装しなければならないマイコンでも、基板上でブートローダを書き込めます。(実際にこの機能はグラフィックLCDシールドで使いました)

ブレッドボードの回路では、5VとGNDの間にパスコンが入っていませんでしたが、今回は、動作を安定化させるため、0.1μFのセラミックコンデンサを入れることにしました。

以上のような方針で設計した回路が次の回路です。

図11、ブートローダライタシールドの回路図
↑ 画像をクリックするとPDFファイルで表示
図11、ブートローダライタシールドの回路図

S1にはただ単にIC_SOCKET_DIP28_600MIL(対面のピンの距離が600mil、つまり15.24mmのDIP28ピンのICソケット)としか書いてありませんが、汎用のバネ式のICソケットや、丸ピンICソケットよりも、ゼロプレッシャーソケットを是非使ってください。耐久度が違います。ゼロプレッシャーソケットを使わない場合は、対面ピンの距離が300milの物を使ってください。

R1の1MΩは、なくてもいい部品なのですが、Arduino Unoの回路図を見ると、ここに1MΩの抵抗が入っているので、それにならって1MΩを入れてみました。1MΩを入れても弊害はないはずです。

部品表をまとめると、次の様になります。

表2、ブートローダライタシールドの部品表
部品番号 数量 品名 型番/仕様 メーカー 備考 参考単価
S1 1 ICソケット ZERP-28-600MIL   ゼロプレッシャーソケット 500円
X1 1 水晶振動子 16MHz   負荷容量が十数~20pF程度の物 100円程度
R3~6 4 カーボン抵抗 1kΩ,1/8W   実装面積に余裕があるなら1/4W品でも可 10円程度
R2 1 カーボン抵抗 10kΩ,1/8W   実装面積に余裕があるなら1/4W品でも可 10円程度
R1 1 カーボン抵抗 1MΩ,1/8W   実装面積に余裕があるなら1/4W品でも可 10円程度
C1,C2 2 セラミックコンデンサ 22pF,50V     10円程度
C3 1 セラミックコンデンサ 0.1μF,50V     20円程度
C4 1 電解コンデンサ 10μF,50V     10円程度
LED1~4 4 LED     直径3mmの物ならたいていOK 20円程度
SW1 1 スライドスイッチ SS12D01G4   回路図に書いたJS102011CQNは手に入りにくい 50円程度
CN1 1 ピンヘッダ 2X3ピン、2.54mmピッチ   2X32ピンのピンヘッダを折って使う 40円
M1 1 ユニバーサル基板 UB-ARD01WH サンハヤト   600円程度
  2 ピンヘッダ 1X8ピン、2.54mmピッチ   1X40ピンのピンヘッダを折って使う 20円程度
  2 ピンヘッダ 1X6ピン、2.54mmピッチ   1X40ピンのピンヘッダを折って使う 20円程度

組み立てたシールドの写真を次に示します。

写真4、ブートローダライタシールドの外観(表)
↑ 画像をクリックすると拡大
写真4、ブートローダライタシールドの外観(表)
写真5、ブートローダライタシールドの外観(裏)
↑ 画像をクリックすると拡大
写真5、ブートローダライタシールドの外観(裏)

組み立てる際に、Arduino UnoのUSBコネクタやDCジャックと干渉する部分には、部品を配置したり、配線を伸ばしたりしない注意が必要です。

写真6、部品配置の注意点
↑ 画像をクリックすると拡大
写真6、部品配置の注意点

部品の配置は次の様になっています。

写真7、部品配置
↑ 画像をクリックすると拡大
写真7、部品配置

本来は、4つのLEDの色を別々にすると、遠目にもシールドの状態が把握しやすいのですが、手持ちの部品の関係で全て赤色にしてしまいました。色を別々にする場合は、電流制限抵抗(R3~6)を同じ1kΩにせずに、発光色に応じて調整しましょう。色によって発光感度が異なるので、同じ電流制限抵抗を使ったのでは、明るいLEDと暗いLEDができてしまいます。具体的に何Ωにすればよいかは、ブレッドボードで発光回路を仮組みしてみて調整すると良いでしょう。

広告

4.ブートローダライタシールドの使い方

それでは、先ほど製作したブートローダライタシールドを使って、ATmega328P-PUにArduino Unoのブートローダを書き込んで見ましょう。以下に説明する手順でブートローダが書き込めます。

【手順1】 ブートローダライタシールドをArduino Unoに装着し、SW1をAUTO RESET側に設定する。
写真8、SW1をAUTO RESET側に設定
↑ 画像をクリックすると拡大
写真8、SW1をAUTO RESET側に設定
【手順2】 Arduino UnoとパソコンをUSBケーブルで接続する。
【手順3】 Arduino IDEを起動し、ファイル→スケッチの例メニューからArduioISPのファームウェア(スケッチ)を開く
図1(再掲)、ArduinoISPのスケッチを開く
図1(再掲)、ArduinoISPのスケッチを開く
【手順4】 ツール→マイコンボードメニューでArduino Unoを選択する
図2(再掲)、Arduino Unoを選択する
図2(再掲)、Arduino Unoを選択する
【手順5】 ツール→シリアルポートメニューでArduino Unoのポート番号(COM番号)を指定する
図3(再掲)、シリアルポートを選択する
図3(再掲)、シリアルポートを選択する

注:上の図ではCOM15を選んでいますが、皆さんの環境に合わせて、COM番号を選んでください

【手順6】 Arduino UnoにArduinoISPのスケッチを書き込む
図4(再掲)、スケッチを書き込む
図4(再掲)、スケッチを書き込む

ArduinoISPのスケッチが正常に書き込めると、HeartbeatのLEDが明るくなったり暗くなったりを繰り返します。

図12、Heartbeat LEDの点滅
図12、Heartbeat LEDの点滅
【手順7】 ブートローダライタシールドのSW1をKILL RESET側に切り替える
【手順8】 ICソケットにマイコンIC(ATmega328P-PU)を装着する

ゼロプレッシャーソケットを使っている場合は、下の写真のように、ICをソケットに挿入してから、レバーを倒して固定します。

写真9、マイコンICの挿入
↑ 画像をクリックすると拡大
写真9、マイコンICの挿入
写真10、マイコンICの固定
↑ 画像をクリックすると拡大
写真10、マイコンICの固定
【手順9】 ツール→書込装置メニューでArduino as ISPを選ぶ
図6(再掲)、Arduino as ISPを選ぶ
図6(再掲)、Arduino as ISPを選ぶ
【手順10】 ツール→ブートローダを書き込むメニューを選び、ブートローダを書き込む
図7(再掲)、ブートローダを書きこむ
図7(再掲)、ブートローダを書きこむ

ブートローダの書き込み中は、ProgrammingのLEDが点灯します。

写真11、Programming LEDの点灯
写真11、Programming LEDの点灯

しばらくすると、ブートローダが書き込めるはずです。

図8(再掲)、書き込み終了時のメッセージ
図8(再掲)、書き込み終了時のメッセージ

ブートローダの書き込みが終わったら、ProgrammingのLEDは消えます。

写真12、Programming LEDの消灯
写真12、Programming LEDの消灯

もし、ブートローダの書き込みに失敗すると、Errorのランプが点灯して書き込みが中断します。その場合は、正しい手順で書き込んでいるか再確認の上、もう一度ブートローダを書き込んでください。(私の場合、よくブートローダの書き込みをするつもりで、スケッチを書き込んでしまい、ErrorのLEDを点灯させてしまいます)

写真13、Error LEDの点灯
写真13、Error LEDの点灯
【手順11】 ATmega328P-PUをICソケットから外す

ゼロプレッシャーソケットを使っている場合は、レバーを立ててからICを外してください。

続けて別のATmega328P-PUにブートローダを書き込む場合は、ATmega328P-PUを新しいものに交換して、手順10を実行すればOKです。

この記事では、ICSP端子(CN1)の使い方を説明していませんが、グラフィックLCDシールドの記事の方で、ICSP端子の使い方を説明しています。

5.ブートローダの動作確認をする

Arduino IDEの画面に「ブートローダの書き込みが完了しました。」と表示され、シールドのErrorのLEDが点灯していなければ、基本的には正常にブートローダが書き込めているはずですが、実際にブートローダを起動して動作を確認する方法を説明します。

そのための一番簡単な方法は、Arduino Unoに載っているATmega328P-PUを、自分でブートローダを書き込んだ物に交換して見る方法です。ただし、Arduino Unoでも、表面実装のATmega328Pを使用しており、交換できないものもありますので、その場合にはここで説明する方法は使えません。

下の写真を参考に、ATmega328P-PUを交換して、何か適当なスケッチを書き込んでみてください。ブートローダが正常に機能していれば、スケッチが書き込めて、その後、そのスケッチが動作し始めるはずです。(スケッチの例の中にある01.BasicsのBlinkという、Arduino内蔵LEDを点滅させるスケッチを書き込めば、Arduino単体でスケッチの動作まで確認できるのでお勧めです)

写真14、Arduinoを使ったブートローダの動作確認
↑ 画像をクリックすると拡大
写真14、Arduinoを使ったブートローダの動作確認

ICの交換時にリード(足)を傷めないように気をつけることが重要です。

ICを引き抜くための工具も市販されていますが、100円ショップの精密ドライバーセットに入っている小型のマイナスドライバーでも綺麗にICを引き抜けます。ICソケットとICの間にマイナスドライバーをこじ入れて、少しずつICを浮かせていきます。ICの両端を交互に少しずつ浮かせていくのがコツです。

また、新品のICは、両側のリードが平行になっておらず、ハの字型に広がっています。あらかじめ平行に整形しないと、ICソケットに挿入できません。ICのリードを整形する工具もあるのですが、私は机の平面を使って、ICとリードが垂直になるように整形しています。ただし、静電気でICを壊す恐れがあるので、机にICのリードを押し当てるのは本来好ましい方法ではありません。

ATmega328P-PUを交換してみて、無事にスケッチが書き込めるようなら、元のATmega328P-PUに戻してもいいですし、新しい方のATmega328P-PUをそのままArduino Unoで使ってもいいです。(ICの交換回数が減るので、後者がお勧め)

もしスケッチがうまく書き込めないなら、元のATmega328P-PUに戻してください。ブートローダがうまく書き込めていないATmega328P-PUは、もう一度ブートローダを書き直して見ましょう。それでダメなら、故障しているものとしてあきらめましょう。

なお、Arduino Unoに使われているバネ式のICソケットは、あまり耐久性がなく、何回もICの交換を繰り返していると接触不良などの不具合が発生します。そういう意味では、Arduino Unoをブートローダの動作試験に使うのは好ましくありません。2、3回ブートローダの書き込みと動作試験をやってみて、書き込みに自信が出てきたら、Arduino Unoを使って動作試験をするのは止めましょう。

なお、このページで紹介したブートローダライタシールドを使って、Arduinoのスケッチを書き込むことも可能です。ブートローダを使わずにArduinoのスケッチをATmega328Pに書き込むの記事で紹介していますので、是非そちらもご覧ください。

次のページでは、Arduino Unoとブートローダライタシールドを使ってArduino Leonardoのブートローダを書き換える方法について説明します。

目次へ  前のページへ (1) (2) (3) 次のページへ

このページで使われている用語の解説

関連ページ

関連製品

Arduino Uno用ブートローダスケッチライタシールドキット 商品名 Arduino Uno用ブートローダスケッチライタシールドキット
税抜き小売価格 1440円
販売店 スイッチサイエンス
サポートページ
Arduino用ブートローダ/スケッチライタキット 商品名 Arduino用ブートローダ/スケッチライタキット
税抜き小売価格 3000円
販売店 スイッチサイエンス
サポートページ
Arduino用ブートローダ/スケッチライタ(完成品) 商品名 Arduino用ブートローダ/スケッチライタ(完成品)
税抜き小売価格 3600円
販売店 スイッチサイエンス マルツ
サポートページ
Arduino 電子工作
このサイトの記事が本になりました。
書名:Arduino 電子工作
ISBN:978-4-7775-1941-5
工学社の書籍の内容の紹介ページ
本のカバーの写真か書名をクリックすると、Amazonの書籍購入ページに移動します。