11月25日発売 書籍『Arduinoと3Dプリンタでロボットを作ろう』を出させて頂きました!

【電子工作】1台のデバイスでUART/ICSP/UPDIのプログラミング(書き込み)が出来る便利な基板の紹介!

今回は自作基板ではないのですが、HACKADAY.IOに便利な統合シリアルアダプター(ISA)という基板が紹介されていたので作ってみました。

この基板はCH340Nを使ったUSB-シリアル変換モジュールとして使える以外にATtinyを使ったICSPによる書き込み(プログラミング)や新しいAVRチップの書き込み方式として採用されたUPDIによる書き込みが行えるというものです。

私の場合、Arduinoから電子工作を始めたこともありATmegaやATtinyといったAVRチップを扱う事が多いのですが、ブートローダーやスケッチを書き込む際に書き込み方法の違いで面倒となる場面が結構あります。

例えばArduino UnoやNanoなどで使われているATmega328Pなど少し古いタイプのAVRチップへのブートローダーの書き込みなどはICSPによる書き込みが必要となります。
ATtiny85やATtiny44といったATtinyチップでも同様です。

AVRマイコンのAtmel(アトメル社)は2016年にマイクロチップ・テクノロジー社(Microchip Technology Inc.)に買収され、それ以降に発売されたチップでは書き込み方法が変更されています。

tinyAVR 0/1/2シリーズやmegaAVR 0シリーズといった新しいタイプのAVRチップではUPDIによる書き込み方式が採用されています。
ATtiny202やATtiny1614、またATmega4809といったチップではこのUPDIという書き込み方式となっています。

UPDIは単線式となっているので1本の信号線のみの接続で書き込みが行えるのでICSPによる書き込み(MOSI/MISO/SCK/RESET)と比べると接続が簡単で便利なんですが、共に互換性がないため使用するチップによりそれぞれに対応した書き込み装置を用意する必要があります。

ICSPでの書き込みではArduinoを経由した書き込み(ArduinoISPを使用)やUSBaspといったAVRライタを使うことができ、またUPDIでの書き込みでは「jtag2updi」スケッチをArduinoに書き込み同様に書き込み装置として使ったり、USB-シリアル変換モジュールがあればパーツを少し追加接続すれば簡単に実現することが出来ます。

しかし書き込む対象チップやボードにより毎回それに対応した書き込み装置を用意するのは結構面倒な作業となります。

そこでこれらを統合して1枚のモジュールにまとめたのが今回ご紹介する基板となります。

UART/ICSP/UPDI方式の3つの独立した書き込み回路をそれぞれスイッチ切り替えにより選択出来るようになっている書き込み基板となります。
回路構成は簡単なものとなりますが、AVRマイコンを扱う事が多い環境では便利に使える良いアイデアだと思います。

1台のデバイスでUART/ICSP/UPDIのプログラミング(書き込み)が出来る便利な基板の紹介!

こちらがUSB-シリアルおよびICSP/UPDIのプログラミング・書き込みが出来る統合シリアルアダプター(ISA)の基板です。
HACKADAY.IOで紹介されていたものでClyde D.Corpuzさんが製作された基板となります。

参考 Integrated Serial Adapter (ISA)HACKADAY.IO

上記サイトにKiCadのプロジェクトファイルや回路図、ICSP書き込み用のファームウェアも公開されているので安心して製作することが出来ます。

ボードの回路構成は非常に簡単です。

CH340Nを使ったUSB-シリアル変換、ATtiny814を使ったICSPによる書き込み回路、そしてCH340N経由でのUPDIによる書き込み回路、これら3つの独立した書き込み回路を簡単なスイッチ操作で切り替えて使えるようになっています。

また、5V/3.3Vの電圧ロジックの切り替えもスイッチ操作で出来るようになっています。

AVRマイコンを扱う事が多い環境では、対応した書き込み装置を個別で用意する必要があり毎回面倒だなと思っていたのですが・・・これらがこのボード1つで対応する事が出来るので非常に便利です!

簡単な回路構成の基板となりますが、製品として販売されているもので同様なものは無いようですね。
非常に良いアイデアだと思います!

上記サイトにボード構成等の詳細が書かれていますが、簡単に見ていきます。

シリアルプログラミング

USB-シリアル変換チップはCH340Nが使われています。

CH340系のチップは内蔵3.3Vレギュレータが搭載されていますが、定格30mAほどしか流せないので外部レギュレータとしてMIC5504-3.3YM5が使われていて最大300mAほどの電力供給が行えます。

またArduinoなどシリアル経由での書き込みで必要となるRTS(またはDTR)からRESET端子間の100nFコンデンサも付けられています。

UPDIプログラミング

新しいAVRチップで採用されているUPDIによる書き込み部分です。

UPDIは単線式の書き込み方式となり、470Ωの抵抗/ショットキーバリアダイオードを手持ちのUSB-シリアル変換モジュールに接続してこのような回路で組むことは出来ますが・・・毎回これを用意するのは面倒となります。

UPDIでの書き込みではこの接続は定型回路となるのでスイッチ操作により簡単にUPDIでの書き込みモードに切り替えが出来るのは便利です!

ICSPプログラミング

Arduino UnoやNanoなど、またATtiny13やATtiny85といったAVRチップではブートローダー等の書き込みでICSPでの書き込みが必要となってきます。

UPDIでの書き込みは配線が少なく便利なんですが、まだまだICSPでの書き込みに対応したAVRは入手性もよく便利に使えますからね!

ICSPでの書き込みではUSBaspといったAVRライタが必要となってきます。

【電子工作】Arduino(AVRマイコン)のブートローダー書き込みにUSBaspを使ってみる!

またArduinoボードにArduinoISPスケッチを書き込むことによりArduinoをAVRライタ化して書き込み装置として使うことも出来ます。
おなじみの書き込み方法ですね!

Arduino IDEで提供されているArduinoISPスケッチをATtiny◯14チップで動作するように修正されたスケッチが提供されています。(上記サイトからダウンロード出来ます)
このスケッチをボードのATtiny814に書き込むことによりICSPでの書き込みに対応しています。
USBaspではATmega8チップが使われていますが、そのATtiny版みたいな感じですね!

ちなみに提供されているICSP書き込み用のスケッチ容量は3kバイトほどあるので、ATtiny814(8kB)または同シリーズのATtiny1614(16kB)が使えます。(私はATtiny1614を使いました)

以上がこのモジュールの構成となります。

基板発注

KiCadのプロジェクトファイルが公開されているので、ガーバーファイル(基板データ)を出力して基板の発注を行います。

基板発注はJLCPCBを使いました。
基板5枚の製作料金及び送料合わせて4~500円程度で作ることが出来ます。

JLCPCBでの基板発注方法に関しては、こちらの記事で詳しく紹介しているので合わせて読んで頂ければと思います。

【電子工作】はじめての基板製作!JLCPCBさんに基板を発注してみました。ユーザー登録・データ納品・基板到着までの一連の流れをご紹介!

またパーツ実装はリフロー装置があると非常に便利ですね!

こちらも参考になればと思います。

【電子工作】コンパクトボディーで安全設計!ミニリフロー装置『Miniware MHP30』を使ってみる!

使用パーツ一覧

使用パーツ一覧です。
よく使われる入手しやすいパーツばかりですが・・・ATtinyチップだけは海外サイトでもまだ入手性はよくないようです。

この基板の製作者様はATtiny814を使っていますが、同構成でフラッシュメモリの容量が増えたATtiny1614はモノタロウさんでお安く売られていたのでこれを使いました。(10個セットですが!)

また、紹介されていたサイトのパーツリストには3.3VレギュレータチップとしてRT9193-33GBが記載されていますが・・・

データシートを見るとこのチップの4番ピンは無接続だと動作しないので、この基板では使えません。

KiCadファイルの方は変更されているようです。
MIC5504-3.3YM5が正解です。

パーツリストを見てRT9193-33GBチップを入手したのですが・・・手持ちであったME6211C33チップで代用しました。

パーツ個数入手先
ATtiny814(or 1614)1モノタロウ
CH340N1Aliexpress / 秋月電子
Type-Cコネクター1秋月電子
MIC5504-3.3YM5 (3.3Vレギュレータ)1Aliexpress
MSS22D18 (DPDT 6P SMDスイッチ)3Aliexpress
1N5819(SS14) ショットキーダイオード1Aliexpress
LED(0805)6Amazon / Aliexpress
100nF(0805)4Amazon / Aliexpress
1μF(0805)2
10μF(0805)1
470R(0805)1Amazon / Aliexpress
1kΩ(0805)4
5.1kΩ(0805)3

ATtiny814/1614にISPスケッチを書き込む

パーツの実装ができたらボードのATtiny814(または1614)にサイトで提供されているISPスケッチ(ISAISP.ino)を書き込みます。
ICSPでの書き込み動作で必要となってきます!

ボードのATtiny814(or 1614)チップに書き込みを行いますが、その際にジャンパーパッドをはんだでブリッジ(短絡)させておきます。

スイッチを[UPDI]および[PROG]モードにしてArduino IDEからスケッチを書き込みを行います。

UPDI書き込みに対応したATtinyチップには[megaTinyCore]というボードパッケージのインストールが必要となってきます。
このボードパッケージのインストールがまだの方は、Arduino IDEの[基本設定]→[追加のボードマネージャのURL]に進み、以下URLを貼り付けます。

貼り付けるURL
http://drazzy.com/package_drazzy.com_index.json

次に[ツール]→[ボード]→[ボードマネージャ]へと進み、「megatiny」で検索すると[megaTinyCore by Spence Konde]が見つかります。
これをインストールしてボードパッケージのインストールは完了です。

これで[ボード]の項目に[megaTinyCore]が加わり、UPDI書き込みに対応した各種ATtinyチップへの書き込みが行えるようになります。
この基板ではATtiny814(またはATtiny1614)が使われているので、これでISP用のスケッチが書き込めます。

それでは書き込みです。
シリアルポート、そして[ボード]にATtiny814(またはATtiny1614)を選択し、[書込装置]はserialUPDIを選択しておきます。

おそらく生チップを使っていると思うので、まず[ブートローダを書き込む]からブートローダーの書き込み(ヒューズの書き換え)を行います。

次に[書き込み装置を使って書き込む]からISPスケッチの書き込みを行います。
書き込みが完了したら作業完了です。

MEMO
正常に書き込みが完了したらジャンパーパッドの短絡は解除しておきます!

ISPスケッチの書き込みが完了したら完成です!

書き込みテスト

簡単にいくつか書き込みテストを見ていきます。

まずATtiny85を使って書き込みテストを行ってみます。
ATtiny85はICSPでの書き込みに対応したチップです。

接続はこんな感じ。
ATtiny85のMOSI/MISO/SCK/RESET/VCC/GNDをボードの対応した端子に接続します。

Arduino IDEの設定は以下の通りです。

[ボード]ATtiny85
[書き込み装置]Arduino as ISP

ボードの切り替えスイッチを[PROG][ICSP]にセットし、[ブートローダを書き込む][書き込み装置を使って書き込む]を選択することによりブートローダーやスケッチの書き込みが行なえます。

詳しくはこちらの記事も参考にして下さい!

ミニAVRマイコン『ATtiny85』にブートローダーを書き込みArduinoとして使えるようにしてみる!ATtiny85の基本的な使い方!

ICSP書き込みに対応した他のATtinyチップやAVRマイコンへのブートローダーやスケッチの書き込み、そしてArduinoボードへのブートローダー書き込みでも使えますね!


次にUPDIでの書き込みです。
UPDIでの書き込みでは信号線は1本のみの接続で完結します。
UPDI/VCC/GNDを対応した端子に接続するだけです。

こちらはATtiny1614への書き込みですが、ICSPに比べ配線が少なくて便利ですね!

[ボード]ATtiny1614
[書き込み装置]SerialUPDI

切り替えスイッチを[PROG][UPDI]にセットし、[ブートローダーを書き込む]や[書き込み装置を使って書き込む]を選択することによりブートローダーやスケッチの書き込みが行なえます。

UPDIでの書き込みはATmega328Pの上位版?となるATmega4809など今後増えてくる新しいチップで使えるので便利ですね!

UPDIでの書き込みに関しては、こちらの記事でまとめているので合わせて読んで頂ければと思います。

【Arduino】新しいATtiny(tinyAVR 0/1/2シリーズ)やmegaAVR 0シリーズなどで採用されたUPDIによる書き込み方法! Arduino IDEで環境を構築する!

最後に!

UPDIでの書き込み、またICSPでの書き込みは互換性がないため使用するチップに対応した書き込み装置を用意する必要があります。

書き込み装置を用意すると言っても既存のArduinoボードやUSB-シリアル変換モジュールに少し手を加える事により簡単に対応することは可能となりますが、使用するチップによりこれらを個別で毎回用意するのは結構面倒な作業となります。

使用するチップの書き込み方式によりスイッチ操作で簡単に切り替えて使うことが出来る便利なモジュールだと思います。
非常に良いアイデアの基板ですね!

コメントを残す