日本語 / [English]
1.はじめに
Arduino UNOにArduinoISPスケッチを書き込んでUNOを汎用AVRライタに変身させることができます。また、Arduino IDEを調整すれば色々な種類のAVRのスケッチのコンパイルができますので,Arduino UNO + ArduinoISP + Arduino IDE はAVRの開発環境として便利に利用できます。
が,ArduinoISPは「米粒AVR」と呼ばれるATtiny10には対応しておらず,ATtiny10をターゲットとして開発するにはTPI書込みに対応したAVRISP-mkIIなどのAVRライタが必要でした。
ところが実は,Arduino UNO Rev.3にちょっとした改造を施せばAVRISP mkII互換機として働かせTPI書込みができるようになるのです。
以下に,Arduino UNO Rev.3をAVRISP mkIIクローンにする製作記事を掲載します。
このハックは「Arduino IDE配下のATtiny他の開発環境」で使用することを目的とし
“AVRDUDE ver6.2″で動作確認をしています。
“Atmel Studio”での使用については対象外で全くテストしていません。
2.ちょっとした改造の概要
- Arduino UNO搭載のUSB-SerialチップATmega16U2にAVRISP-mak2クローンのファームウェアを書き込んでAVRライタとして働かせます。
- 通常のAVRの書込みに必要なRESET,SCK,MISO,MOSIの信号をATmega16U2のICSPピンと空きバッドとなっているJP2から引き出します。
- ATtiny10の書込みに必要なRESET,TPIDATA, TPICLKの信号をJP2, D0,D1,TX-LEDから引き出します。
- 2.3を実現するために簡単なはんだ付け作業を行います。
3.用意するのも
- Arduino UNO Rev.3 (DIPのATmega328P搭載品)
USB-Serial にATmega16U2を搭載し基板上にJP2の空きパッドがあるATmega328P-PU(DIP28)のUNO R3互換ボードでも可。この3条件を満足する中華製UNO R3互換ボードは600円程度で流通しています。 - Windowsパソコン (Mac / Linux のバーチャルマシン上で動くWindowsでも可)
- dfu-programmer
DFUモードでATmega16U2にプログラムを書き込むツールです。
dfu-programmer-win-0.7.2.zipをダウンロードし展開しまます。 - Atmel USBドライバパッケージ
DFUモードのAVRデバイスやAVRISPmk2用のドライバ詰合せです。
driver-atmel-bundle-7.0.888.exe をダウンロードします。 - AVRISP mkII クローンファームウエア
- AVRISP-MKII_ATmega16u2.zip をダウンロードします。
解凍するとAVRISP-MKII_Atmega16u2.hexが生成されます。 - 上記のファームウェアがうまく働かない場合はAVRISP-MKII_130303.zip をご利用ください。
解凍するとAVRISP-MKII_130303_toggle_driver.hexが生成されます。
- AVRISP-MKII_ATmega16u2.zip をダウンロードします。
- ヘッダーピン
3☓2の2.54mmピッチのヘッダーピンが必要です。 - オスーメス・ジャンパー線
動作検証の際に秋月電子・ブレッドボードジャンパーコード(オスーメス) or 類似品が必要です。
4.ATmega328P取り外し
- Arduino UNO 基板上のATmega328Pは使いませんので取り外します。取り外したATmega328Pは,ATmega16U2のAVRISP mkII化が成功し,その操作に習熟するまでは大切に保管します。途中でArduino UNOを元にもどす時にも必要です。
5.Arduino UNO Rev.3 基板に改造を施す
- ヘッダーピンを図1のようにピン2本のはんだ付け側をカットします。
- Arduino UNO R3 基板上のJP2空きパッドを確認します。図2,図3
- JP2空きバッドのハンダを抜きます。図4
- 図5のようにJP2に3×2ヘッダーピンを立ててはんだ付けします。
- 図6のようにTX-LEDから信号線をヘッダーピンの根元に引き出し,はんだ付け接続します。
6.ファームウェアの書込み
- 図7のようにATmega16U2のICSPの5番ピン6番ピンをショートした状態でUSBコネクタを挿しパソコンと接続します。
- 5番ー6番ピンのショートを解除すると,ATmega16U2がDFUモードで起動します。
- Atmel USBドライバのインストール
ダウンロードしたdriver-atmel-bundle-7.0.888.exewを実行してAtmel USBドライバをインストールします。 - ファームウェアを書き込む
- dfu-programmer-win-0.7.2.zipを展開生成したフォルダの配下のdfr-programmer.exeがある場所に
AVRISP-MKII_ATmega16u2.hexを移動します。 - コマンドプロンプト(cmd.exe)を起動します。
- コマンドプロンプトのcdコマンドでdfu-programmer-win-0.7.2.zipを展開生成したフォルダに移動します。
- 次のコマンド入力でatmega16u2のflashメモリを消去します。
dfu-programmer atmega16u2 erase –force - 次のコマンド入力でatmega16u2にAVRISPmk2クローンのファームウェアを書き込みます。
dfu-programmer atmega16u2 flash AVRISP-MKII_ATmega16u2.hex
- dfu-programmer-win-0.7.2.zipを展開生成したフォルダの配下のdfr-programmer.exeがある場所に
- USBコネクタを抜きパソコンと切り離します
- 再度,USBコネクタを接続するとUSBデバイスATMEL AVRISP mkIIが出現します。Arduio IDEと連携させて用いるには汎用USBドライバlibsubをインストールします。
libusbのインストール方法はOS環境等によってさまざまに適する方法がありますので libusb AVRISP 等のキーワードでWeb検索してご自分のOS環境に適し方法でインストールします。
【参考】WindowsでAVRISPmk2用にlibusbドライバをインストールする方法
- libusbセットアップツールibusbK-3.0.7.0-setup-chk.exeをダウンロードする。
ドライバを選択インストールするためのツールです。 - libusbK-3.0.7.0-setup-chk.exeを起動してUsbk-Dvelopment Kitをインストールします。
Driver Install Creator Wizard 他1件がインストールされます。 - Driver Install Creator Wizardを起動します。
- Libusb0を選択して[Next]をクリックします。図1
- ラジオボタンShow all Devicesを選択するとAVRISPmkIIが表示されるのでAVRISPmkIIを選択し[Next]をクリックします。図2
図1
図2
- [Next]図3,[Next]図4と進んで行きます。
図3
図4
- Finish & Install Driver Now をクリックしてドライバのインストールを行います。図5
図5
7.信号線
- AVR書き込み用の信号線は下図12,13のように取り出すことができます。
図12・ISPモード 図13・TPIモード - TPIモードではUNOのD0とD1がショートしたかたちの配線となりますが,UNO基板内部でAtmega16U2向けのD0,D1信号線には保護抵抗が挿入されているので障害をおこすことはありません。ただし,ATmega328Pに対しては保護抵抗は入っていないので328P装着時にD0,D1をショートして使うと最悪328Pが壊れます。
8.Arduino UNO を元にもどす方法
- usbserialのファームウェアを用意します
Arduino IDE に付属しています。Arduinoフォルダの奥底に収容されていますので,扱いやすい場所にコピーしておきます。
C:\Program Files (x86)\Arduino\hardware\arduino\avr\firmwares\atmegaxxu2\Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex
こちらからもダウンロードすることができます–>Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.zip - ATmega16U2をDFUモードで起動します(「6.ファームウェア聞き込み」参照)
- dfu-programmerでArduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hexを書き込みます。
- 取り外して保管していたATmega328Pを元のとおり(パッケージの切り欠きとソケットの切り欠きの向きを合わせて)装着します。
9.RX,TX信号線の保護抵抗について
- TPIモードのときTPIDATAをD0(RX)とD1(TX)を並列接続にして取り出します。ATmega16U2とD0,D1端子の間には図14のように基板内で保護抵抗(1KΩ)が接続されておりD0,D1を並列接続しても短絡障害が起こりません。
- しかし,保護抵抗が1KΩと比較的大きな値であるため,ATtiny10のTPIDATAピン(3番ピン)にLEDやセンサー等が接続された状態で読み書きする場合,保護抵抗1kΩによる信号レベルの低下により読み書き不安定もしくは読み書き不能となることがあります。 TPIDATAピン(3番ピン)に何も接続されていない状態での読み書きは保護抵抗1kΩによる不具合は発生しません。
- この不具合を回避するには図15のように47Ω程度の抵抗で既存の保護抵抗をバイパスします。
図14 保護抵抗 図15 保護抵抗バイパス 矢印が保護抵抗
矢印の箇所のビアにバイパス用抵抗を接続する
10.動作不具合についての情報
- こちらにまとめました—->「Arduino UNO Rev.3 / AVRISP mkII clone の不具合について」
ー 履歴 ー
update | 2017.12.10 | Windows10に対応したファームウェア書き込み方法に変更しました。 |
update | 2017.01.21 | RX,TX保護抵抗に起因する不具合への対策。 |
update | 2017.01.15 | firemwareは 2017.01.13版 より130303版が安定している との試行情報がありましたので,この二つを掲載します。 @INOUETAICI氏の試行詳細レポートに感謝します。 |
update | 2017.01.13 | AVRISP mkII Clone firmware version up |
upload | 2016.12.27 | kimio kosaka |