2015年06月24日 | 書き込み電圧に関する注意書きを追加。 |
2015年10月20日 | 対応マイコンにATmega88/88V/168Pを追加した。 |
2015年11月17日 | Avrdudeと組み合わせることで汎用のAVRライタになる事の説明を追加。 |
2015年12月03日 | 「はじめに」の章を一部書き直した。 |
2017年06月08日 | 対応マイコンにATtiny13Aを追加した。 |
このページで紹介しているブートローダ/スケッチライタは、キットおよび完成品として販売しています。
商品名 | Arduino用ブートローダ/スケッチライタキット | |
税抜き小売価格 | 3000円 | |
販売店 | スイッチサイエンス | |
サポートページ | Arduino用ブートローダ/スケッチライタキットサポートページ |
商品名 | Arduino用ブートローダ/スケッチライタ(完成品) | |
税抜き小売価格 | 3600円 | |
販売店 | スイッチサイエンス マルツ | |
サポートページ | Arduino用ブートローダ/スケッチライタ(完成品)サポートページ |
Arduinoの互換機を作ろうとすると、ATmega328PなどのAVRマイコンに、自分でブートローダを書き込む必要があります。
Arduino Uno用ブートローダライタシールドの製作(1)で紹介したとおり、以前、Arduino Unoにシールドとして装着して使うタイプのライタ(書き込み装置)を作りました。このシールドを使うと、Arduino Unoが他のプロジェクトに流用できるメリットがある反面、使う前に、Arduino UnoにArduinoISPのファームウェアのスケッチを書き込む必要があり、面倒でした。ブートローダの書込み専用に使うArduino Unoを1台用意すれば、いちいちファームウェアを書き込む必要はないのですが、3千円近くするArduino Unoを、ブートローダの書込み専用にするのはもったいない気がしました。
そこで今回、Arduino互換機を内蔵したライタ基板を製作することにしました。単にArduinoとブートローダライタを一枚の基板に融合しただけではなく、この後説明するように、いくつかの付加機能も追加しました。
今回製作したArduino用ブートローダ/スケッチライタの概要を説明します。
ArduinoISPを利用したAVRマイコンのフラッシュメモリライタです。Arduino互換機を内蔵しているため、Arduino Uno用ブートローダライタシールドの製作(1)で紹介したシールドや、市販のAVR ISPシールドと違い、Arduinoの助けを借りずに単独で動作します。
Arduino Uno/Duemilanove/Proなどに使われているATmega168/328P(28ピン)といったマイコンだけでなく、より安価なATmega88/88V/168P(28ピン)といった省メモリのマイコンや、よりピン数の少ないATtiny44/84(14ピン)やATtiny13A/45/85(8ピン)といったマイコンに対応しています。
省メモリのマイコンは、コスト要求の厳しいプロジェクトに、ピン数の少ないマイコンは、小型化の要求されるプロジェクトに威力を発揮します。
ATmega88/88V/168/168P/328Pでは、(1)ブートローダの書込み、(2)ブートローダを利用したスケッチの書込み、(3)スケッチ単独の書込みに対応しています。
ATtiny13A/44/84/45/85では、スケッチの書き込みに対応しています。
ブートローダを利用してスケッチを書き込む際に必要になる水晶振動子を、8MHzと16MHzの2種類搭載しました。(ATmega88/88V/168/168P/328Pで利用可) 水晶振動子を切り替えることで、クロック周波数が8MHzのArduinoと16MHzのArduinoの両方のスケッチの書き込みができます。
ブートローダを書き込むような人はUSBシリアル変換器を持っている場合が多いと想定し、コストダウンのためにUSBシリアル変換器を内蔵しませんでした。別途FTDI BASICなどを用意していただく必要があります。
ZIFソケットを搭載しているので、マイコンのリードを傷めることなく、書き込みができます。
ICSP端子を搭載しているので、既に基板に実装されたマイコンにも書き込みができます。書き込み時は、ターゲット基板の電源を使うことも、ライタ側のICSP端子から電源を供給することもできます。
外付けのUSBシリアル変換器を交換することにより、書込み電圧を5Vと3.3Vのいずれにも設定できます。(ただし、16MHzの水晶発振子を使って書き込む場合は、5Vで書き込んでください。これは、AVRマイコンの特性上、3.3Vの電源電圧では、16MHzの動作が保証されないためです)
AVRマイコン用フラッシュメモリ書き込みソフトのAvrdudeと組み合わせることで、汎用のAVRライタとして使用できます。Atmel Studio上からプログラムなどを書き込む操作も可能です
書き込みの様子をモニタするために、LEDと圧電ブザーを搭載しています。光と音で書き込みの進み具合をモニタできます。ジャンパピンの設定により、音を止めることもできます。
過電流保護用のポリスイッチを搭載しました。作業中に電源をショートするようなことがあっても、ポリスイッチが過電流を遮断し、USBポートを保護します。
今回作った基板の回路図を次に示します。
また、アートワークを次に示します。
Eagle6.5.0用の回路図とアートワークのファイルは、次のリンクからダウンロードできます。
部品表を、表1に示します。
部品番号 | 数量 | 部品の種類 | パッケージ | 仕様、型番 | 備考 | 参考単価(円) |
---|---|---|---|---|---|---|
R3, R4 | 2 | カーボン抵抗 | ランド400mil間隔 | 240Ω±5%,1/4W | 4 | |
R1, R7, R12, R14, R15, R16, R17, R19 | 8 | カーボン抵抗 | ランド300mil間隔 | 1kΩ±5%,1/8W | 4 | |
R2, R5, R18 | 3 | カーボン抵抗 | ランド300mil間隔 | 10kΩ±5%,1/8W | 4 | |
R6, R8, R10, R11, R13 | 5 | カーボン抵抗 | ランド300mil間隔 | 1MΩ±5%,1/8W | 4 | |
R9 | 1 | カーボン抵抗 | ランド300mil間隔 | 実装せず | - | |
C1, C2, C5, C6 | 4 | セラミックコンデンサ | ランド100mil間隔 | 22pF,50V | 10 | |
C3, C7, C8, C9, C10, C11, C12, C13 | 8 | セラミックコンデンサ | ランド100mil間隔 | 0.1μF,50V | 21 | |
C4 | 1 | アルミ電解コンデンサ | ランド100mil間隔 | 10μF,16V | 21 | |
U1 | 1 | マイコン | DIP28,300mil | ATMEGA328P-PU | 基板に直付けせずにソケットを使う | 250 |
U2 | 1 | 汎用ロジック | DIP14,300mil | 74HC132N | 68 | |
D1 | 1 | 小信号ダイオード | ランド300mil間隔 | 1N4148 | 10 | |
LED1, LED2, LED3, LED4, LED5, LED6, LED7 | 7 | LED | ランド100mil間隔 | Φ3mm | 21 | |
X1, X3 | 2 | 水晶振動子 | 8MHz | 178 | ||
X2 | 1 | 水晶振動子 | 16MHz | 178 | ||
BZ1 | 1 | 他励式圧電ブザー | PKM13EPYH4000-A0 | 30 | ||
CN3 | 1 | ZIFソケット | 28P,300mil | 228-3341 | 日本では入手困難 | |
F1 | 1 | ポリスイッチ | ランド200mil間隔 | RXEF025 | 30 | |
SW1, SW2 | 2 | スライドスイッチ | JS202011CQN | IS-2235で代用可 | 25 | |
CN8 | 1 | 直ヘッダ | 2X3ピン,2.54mmピッチ | 2X25ピンヘッダを切断して使用 | ||
CN5, CN6, CN7 | 3 | 直ヘッダ | 2X6ピン,2.54mmピッチ | 2X25ピンヘッダを切断して使用 | ||
CN2, CN4, CN9 | 3 | 直ヘッダ | 1X2ピン,2.54mmピッチ | 1X40ピンヘッダを切断して使用 | ||
CN1 | 1 | L字型ヘッダ | 1X6ピン,2.54mmピッチ | 10 | ||
1 | ICソケット | DIP28,300mil | U1の所に使う | 45 |
今回は専用基板を起こしましたが、ユニバーサル基板でも十分作れます。次に示す写真は、ユニバーサル基板で作った試作機と、専用基板で作った完成品を比較したものです。左側に写っている試作機は、圧電ブザーやICSP端子がなかったり、モニタ用のLEDが少なかったりしますが、基本的には完成基板と同様の回路です。
U1のATmega328Pとその周辺回路がArduinoの互換機になっています。8MHzの水晶振動子を接続しており、Arduino Pro 328 3.3V/8MHzのブートローダを書きこみます。Arduino Unoの互換機にしなかったのは、書込み電圧を3.3Vまで下げられるようにとの配慮です。ATmega328Pの電源電圧を3.3Vまで下げると、16MHzのクロックでは、データシート上ではスペックを超えてしまいます。(実力的には16MHzでも動くようですが) そのため、クロック周波数を8MHzに下げました。
CN3がターゲットのDIPマイコンを挿入するZIFソケットです。ZIFソケットを使うことによって、マイコンの抜き差しの際に、リードを傷める心配がなくなります。今回は基板を小さくするために、300mil幅のDIP IC専用の、幅の狭いZIFソケットを採用しました。このソケットは国内では入手困難なため、中国から輸入しました。ユニバーサル基板などで自作する場合は、マルツで300mil幅と600mil幅のDIP IC兼用の、28ピンのZIFソケットが安価に入手できますから、それを利用すると良いでしょう。
CN8がICSP端子のヘッダです。基板に実装されたマイコンにブートローダやスケッチを書きこむ場合は、このヘッダからターゲット基板上のICSP端子のヘッダまで、6芯のケーブルで接続します。
CN9は、ICSP端子からターゲット基板に電源供給するかどうかを決める、ジャンパピン用のヘッダです。CN9がオープンの場合は、書き込み時に、ターゲット基板側で電源を確保する必要があります。CN9をショートすると、ライタ側からターゲット基板に電源を供給できます。
CN1は、USBシリアル変換器を接続するコネクタです。この端子を通じて、パソコンと情報のやり取りをします。またCN1からは、電源の供給も受けます。5V出力のUSBシリアル変換器をCN1に接続すると、ターゲットのマイコンに5Vで書込みします。また3.3V出力のUSBシリアル変換器をCN1に接続すると、3.3Vで書き込みます。
SW1は、ZIFソケットにマイコンを挿入して書き込む場合に、CN1とZIFソケットを直結するか(THROUGH側)、U1のArduinoISPファームウェアを書き込んだArduino互換マイコンを経由するか(ArduinoISP側)を選択します。ATmega88/88V/168/168P/328Pに書き込む場合、ブートローダを書きこむ場合や、ブートローダを使わずにスケッチを直接書きこむ場合は、ArduinoISP側に切り替えます。ブートローダ書込み済みのマイコンにスケッチを書きこむ場合は、THROUGH側に切り替えます。ATtiny44/84/45/85に書き込む場合は、SW1を常にArduinoISP側に切り替えておきます。
U2のNANDゲートは、SW1によりArduinoISPを使うかどうかを選択できるようにした事に伴って必要になったゲートです。
CN5~CN7の3つの2X6ピンヘッダは、ターゲットマイコンの種類を選択します。ATmega88/88V/168/168P/328Pに書き込む場合は、CN5にジャンパピンを6つ接続し、CN6とCN7にはジャンパピンを接続しません。ATtiny44/84に書き込む場合は、CN6にジャンパピンを6つ接続し、CN5とCN7にはジャンパピンを接続しません。ATtiny46/85に書き込む場合は、CN7にジャンパピンを6つ接続し、CN5とCN6にはジャンパピンを接続しません。このように、マイコンの種類ごとのピンアサインの違いを、ジャンパピンにより設定できるようにしてあります。
CN2のヘッダは、ショートすると、U1のArduinoISPのファームウェアを、オンボードで書き換えることができます。通常の使用時にはCN2はオープンにしておきます。
次のページでは、組み立て時の注意点について説明します。
商品名 | Arduino用ブートローダ/スケッチライタキット | |
税抜き小売価格 | 3000円 | |
販売店 | スイッチサイエンス | |
サポートページ | Arduino用ブートローダ/スケッチライタキットサポートページ |
商品名 | Arduino用ブートローダ/スケッチライタ(完成品) | |
税抜き小売価格 | 3600円 | |
販売店 | スイッチサイエンス マルツ | |
サポートページ | Arduino用ブートローダ/スケッチライタ(完成品)サポートページ |
商品名 | Arduino Uno用ブートローダスケッチライタシールドキット | |
税抜き小売価格 | 1440円 | |
販売店 | スイッチサイエンス | |
サポートページ | Arduino Uno用ブートローダライタシールドキットサポートページ |