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

このページをスマホなどでご覧になる場合は、画面を横長にする方が読みやすくなります。
目次へ  前のページへ (1) (2) (3) 次のページへ
ブートローダライタシールドの外観
ブートローダライタシールドの外観

この記事では、Arduino Unoに装着し、ATmega328PなどのAVRマイコンにArduinoのブートローダを書き込むためのシールドの作り方を説明しています。

なお、この記事で紹介しているArduino Uno用ブートローダライターシールドは、キットとして販売しています。

Arduino Uno用ブートローダスケッチライタシールドキット 商品名 Arduino Uno用ブートローダスケッチライタシールドキット
税抜き小売価格 1440円
販売店 スイッチサイエンス
サポートページ

この記事ではATmega328PにArduino Unoのブートローダを書き込む場合について説明していますが、ATmega88/88V/168Pにブートローダを書き込む方法については、ATmega88/88V/168P/328PにArduinoのブートローダを書き込む(1)をご覧ください。

また、この記事では、Arduino Unoと自作のシールドを組み合わせてブートローダライタを作っていますが、Arduino互換機を内蔵した一体型のライタもArduino用ブートローダ/スケッチライタの製作(1)で紹介しています。是非そちらもご覧ください。

Arduino用ブートローダ/スケッチライタキット 商品名 Arduino用ブートローダ/スケッチライタキット
税抜き小売価格 3000円
販売店 スイッチサイエンス
サポートページ
Arduino用ブートローダ/スケッチライタ(完成品) 商品名 Arduino用ブートローダ/スケッチライタ(完成品)
税抜き小売価格 3600円
販売店 スイッチサイエンス マルツ
サポートページ

目次

1. はじめに … 1ページ
2. まずはブレッドボードを使ってブートローダーを書き込んでみる … 1ページ
3. ブートローダ書き込み回路をシールドの形に固定する … 2ページ
4. ブートローダライタシールドの使い方 … 2ページ
5. ブートローダの動作確認をする … 2ページ
6. Arduino Leonardoで、スケッチの書き込み時に問題発生 … 3ページ
7. Arduino UnoとブートローダライタシールドでArduino Leonardoのブートローダを書き換える方法 … 3ページ

1.はじめに

Arduinoを使って、何か作品を作った時、その作品を量産する際に、Arduinoを何台も買ってきてはもったいないですよね。Arduino Unoは一台3,000円近くしますし、また、実際に作品に組み込む時には、必要のない機能が付いています。

例えば、パソコンからスケッチを書き込む機能は、多くの作品で必要がないでしょう。また、5Vの電源を別途用意する場合は、9VのACアダプタの電圧を5Vに落とす電源回路も必要ないでしょう。

Arduino Pro 328を使えば、5Vの電源を作るシリーズレギュレータや、パソコンとの通信に必要なUSB-シリアル変換回路や、シールドとの接続に使うピンソケットなどが省略されていますので、Arduino Unoを作品に組み込むよりは安価に仕上がります。しかしながら、Arduinoに使われているATmega328Pというマイコンを使って、自分でArduino Unoの互換マイコンを組めば、Arduino Unoの必要な機能だけを実現する最小限の部品で回路を設計することができ、大幅なコストダウンと、サイズの縮小が可能になります。

自分でArduino Unoの互換マイコンを作る時に問題になるのが、ブートローダの書き込みです。Arduino UnoのATmega328Pには、ブートローダという小さなプログラムがあらかじめ書き込んであります。このブートローダは、パソコンから送られてきたスケッチの情報を、ATmega328Pに内蔵しているフラッシュメモリに書き込む働きをしています。つまり、ブートローダのないATmega328Pには、スケッチを書き込めないのです。自分でArduino Unoの互換マイコンを作る時に問題になるのが、ブートローダの書き込みです。Arduino UnoのATmega328Pには、ブートローダという小さなプログラムがあらかじめ書き込んであります。このブートローダは、パソコンから送られてきたスケッチの情報を、ATmega328Pに内蔵しているフラッシュメモリに書き込む働きをしています。つまり、ブートローダのないATmega328Pには、スケッチを書き込めないのです。

ブートローダ自体もATmega328Pのフラッシュメモリに書き込んであるのですが、書き込むには専用の書き込み装置(ライタ)が必要です。幸い、ArduinoISPというスケッチがあり、Arduinoをブートローダの書き込み装置として使えるようになっています。よって、Arduinoを持っている人なら、専用のライタ(例えばAVRISPmkII)を買わなくてもブートローダの書き込みができます。(加えて言うと、AVRISPmkIIでブートローダを書き込む手順はちょっとややこしいです)

ところで、Arduino Unoを使って遊んでいるうちに、過電圧を加えたり、過電流を流したりして壊してしまった経験がある人も多いでしょう。そんな場合でも、故障したのはATmega328Pだけで、他の部品は無事という事が多いものです。そういう場合はArduino Unoを買い換えるのはもったいないです。ATmega328Pを買ってきて、ブートローダを書き込み、Arduino UnoのICソケットに刺さっている故障したATmega328Pと交換するだけで、復活します。ATmega328Pは単価の安いマイコン(秋月電子で250円)なので、あらかじめブートローダを書き込んだATmega328Pを修理用にストックしておくと、安心してArduino Unoを使えます。

次のページには、Arduinoとブレッドボードを使って、ブートローダを書き込む方法が解説されています。(ただし、英文)

Using an Arduino as an AVR ISP (In-System Programmer)

上記ページに書いてある方法でブートローダを書き込んでみると、確かに書き込めるのですが、たくさんのマイコンに書き込む場合、ブレッドボードを使った書き込み器では、ジャンパ線が抜けるなど、信頼性に欠けます。そこで、Arduino Unoに装着するブートローダライタのシールドを作りました。

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

上の写真中央の、28ピンの黒いICがArduino Unoの心臓部であるATmega328Pです。このようにATmega328Pをブートローダライタシールドに装着し、ブートローダを書き込みます。

深緑色のICソケットは、ゼロプレッシャーソケットといって、ICの抜き差しの際に、ICのリード(足)や自分自身を傷めないように工夫された、特殊なICソケットです。一般のICソケットは、せいぜい数回程度の抜き差ししか想定していませんが、ゼロプレッシャーソケットは、何千回、何万回といった、多数回の抜き差しに対応しています。

このように専用のシールドを作ることにより、信頼性の高いブートローダの書き込みが実現します。

なお、今回作ったシールドは、何十個、何百個といった、まとまった数のマイコンにブートローダを書き込む必要のある人に向いています。(私はグラフィックLCDシールドの試作で、おびただしい数のATmega328Pにブートローダを書き込みました) 数個のマイコンにブートローダを書き込むだけなら、最近ではブートローダ書き込み済みのマイコンを売っている店もあるようなので、そちらを利用するのが楽で経済的です。(ブートローダを書き込み済みのATmega328Pを買っても、単価は100円しか上がりません)

2.まずはブレッドボードを使ってブートローダーを書き込んでみる

今回作ったシールドの説明に入る前に、先に紹介したArduinoオフィシャルサイトの"Using an Arduino as an AVR ISP (In-System Programmer)"というページにしたがって、Arduino Unoとブレッドボードを使って、ATmega328PにArduino Uno用ブートローダを書き込んでみましょう。(それはいいから、早くブートローダライタシールドが見たいという方は、こちらをごらんください)

Arduinoオフィシャルサイトでは、2台のArduinoを使う方法と、1台のArduinoとブレッドボードを使う方法の2通りが説明されています。Arduinoを2台用意できる人は少ないと思うので、後者の1台のArduinoとブレッドボードを使う方法を、ここでは試して見ます。

また、Arduinoオフィシャルサイトには、使用するArduinoがUno、Duemilanove、Diecimila、NGとそれ以前のものという具合に、何種類ものボードを対象に書いてあります。「ただし、Arduino Unoの場合は…」といった具合に、使うArduinoの種類によって操作が違う部分を注釈で書いてあるので、少し読みにくい文章になっています。

現在ではArduino Unoのユーザーが多いと思われるので、ここでは少し割り切って、Arduino UnoのユーザーがATmega328PにArduino Unoのブートローダを書き込む事に絞って説明をしたいと思います。他の種類のArduinoを使われる方は、原文を読んでください。また、Arduino IDEは1.0.1、1.0.4あるいは1.0.5を使うものとします。古いバージョンのArduino IDEの場合は、Arduino ISPのスケッチのソースを一部書き換える必要があるようです。(1.0.1、1.0.4、1.0.5を使う場合は、ソースの書き換えが必要ない事を当方が確認しました)

【手順1】 スケッチの例からArduioISPのファームウェア(スケッチ)を開く
図1、ArduinoISPのスケッチを開く
図1、ArduinoISPのスケッチを開く
【手順2】 ツール→マイコンボードメニューでArduino Unoを選択する
図2、Arduino Unoを選択する
図2、Arduino Unoを選択する
【手順3】 ツール→シリアルポートメニューでArduino Unoのポート番号(COM番号)を指定する
図3、シリアルポートを選択する
図3、シリアルポートを選択する

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

【手順4】 Arduino UnoにArduinoISPのスケッチを書き込む
図4、スケッチを書き込む
図4、スケッチを書き込む
【手順5】 次の回路図のようにブレッドボードを使ってArduinoとATmega328Pを接続する
図5、ATmega328Pへのブートローダ書き込み時の回路図(水晶振動子あり)
↑ 画像をクリックするとPDFファイルで表示
図5、ATmega328Pへのブートローダ書き込み時の回路図(水晶振動子あり)
写真2、ブートローダ書き込み回路(水晶振動子あり)
↑ 画像をクリックすると拡大
写真2、ブートローダ書き込み回路(水晶振動子あり)

なお、原文の一番右下には、上の写真に相当する実体配線図がありますが、その実体配線図には10μFの電解コンデンサが抜けています。その代わり、言葉で"Note for the Arduino Uno: you'll need to add a 10 uF capacitor between reset and ground." (Arduino Unoを使う場合の注意:RESETとGNDの間に10μFのコンデンサを追加してください)と書いてあります。

上の写真の通り、RESET側を+、GND側を−として、10μFの電解コンデンサを付けてください。極性を反対にすると、電解コンデンサが破裂する危険があります。

水晶振動子には16MHzの物を使ってください。

なお、マイコンの名称がATmega328P-PUとなっていますが、末尾の-PUは、DIP品(基板の穴にリードを通すタイプ)を表わしています。ATmega328P-AUなら、機能的には同じものの、TQFPと呼ばれる小型なパッケージになっており、表面実装する必要がありますので、ブレッドボードには刺さりません。

【手順6】 ツール→書込装置メニューでArduino as ISPを選ぶ
図6、Arduino as ISPを選ぶ
図6、Arduino as ISPを選ぶ
【手順7】 ツール→ブートローダを書き込むメニューを選び、ブートローダを書き込む
図7、ブートローダを書き込む
図7、ブートローダを書き込む

以上の手順で、ブートローダが書き込めるはずです。

図8、書き込み終了時のメッセージ
図8、書き込み終了時のメッセージ
広告

続けて別のATmega328Pにブートローダを書き込むなら、ブレッドボード上のATmega328Pを新しいものに差し替えて、手順7だけを実行すればOKです。

なお、ブートローダを書き込むATmega328Pが、未使用の新品なら、書き込み回路から水晶発振回路を取り除いても、正常に書き込めます。ただし、水晶発振回路がないと、一度ブートローダを書き込んだATmega328Pには、新たにブートローダを上書きする事はできません。

水晶発振回路を取り除くと、次の様に回路が簡略化され、配線が楽になります。

図9、ATmega328Pへのブートローダ書き込み時の回路図(水晶振動子なし)
↑ 画像をクリックするとPDFファイルで表示
図9、ATmega328Pへのブートローダ書き込み時の回路図(水晶振動子なし)
写真3、ブートローダ書き込み回路(水晶振動子なし)
↑ 画像をクリックすると拡大
写真3、ブートローダ書き込み回路(水晶振動子なし)

以上のような方法で、マイコンにArduino Unoのブートローダを書き込めますが、ブレッドボードで書き込み回路を組むと、そのままの状態で長期間保存するのが困難です。だからといって、ブートローダを書き込むたびにブレッドボードの配線をするのは面倒ですし、配線間違いの元になります。加えて言うと、ブレッドボードの同じ位置に、繰り返しICを抜き差ししていると、ブレッドボードが傷んできます。

そこで、書き込み回路をシールドの形に固定しました。次のページでは、そのシールドについて説明します。

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

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

関連ページ

関連製品

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