Arduinoとの出会いをきっかけに電子工作を始めて以来、AVRマイコンは個人的にも思い入れのある存在で、今でも何かと使う機会が多いです。
そしてAVRマイコンにはICSPやUPDIといった複数の書き込み方式があり、扱うチップによって対応する書き込み装置(AVRプログラマ)を都度使い分ける必要があります。
例えば、Arduino(ATmega328P)やATtiny85など従来のAVRではICSPでの書き込みが必要である一方、最近のATtiny202やATtiny814などの新しいチップではUPDIによる書き込み方式が使われています。
これは、2016年にAVRの開発元であるAtmel(アトメル社)がMicrochip Technology Inc.(マイクロチップ・テクノロジー社)に買収されたことにより、後継シリーズのtinyAVR 0/1/2やmegaAVR 0シリーズでは書き込み方式がUPDIに変更されたことによるようです。
ICSPとUPDIは互換性がないため、プロジェクトごとに異なる書き込み環境を用意しなければならず、「あのチップにはこの書き込み装置、このボードには別のやつ…」といった煩雑さを感じる事がよくあります。
そういった背景から、ICSPとUPDI、さらにUART書き込みまで対応出来る汎用AVRプログラマを自作してみることにしました。
UPDI・ICSP・UART書き込みに対応した自作AVRプログラマの製作!
実は今回のAVRプログラマを作るきっかけとなったのは、以前製作した同様のコンセプトで設計されたオープンソースのプロジェクトです。
ここ1年ほど使っていますが、自作で作れる汎用AVRプログラマとして重宝しています。

そして日々の作業環境に合わせて「もう少しこうだったらいいのに」と思う点も出てきたため、今回はそれを踏まえてより使いやすくなるように自作ボードとして新たに製作してみることにしました。
ボードコンセプト
1台で古いATmega/ATtiny系から、UPDI対応の最新tinyAVRシリーズ、そしてUARTにも対応させるシンプルな汎用AVRプログラマとするのが今回製作したボードのコンセプトです。
ICSP書き込みについて
ICSP(In-Circuit Serial Programming)による書き込みは、Arduinoを使う場合には「ArduinoISP」スケッチを使って書き込み機として使う方法が一般的です。
また、安価で入手出来るUSBaspといったAVRライターもよく使われています。
ArduinoISPスケッチはArduino IDEの「スケッチ例」に含まれており、Arduino UNOといったATmega328P(ATmega32U4など)に書き込むことでICSP書き込み機として動作します。
またUSBaspのようなICSPプログラマでも同様に、提供されている書き込みプログラムをATmega8系のMCUを使い実現しています。

しかし、これらMCUで組むと必要なパーツ数が多くなってしまうので、今回製作したボードでは必要な部品点数を減らすためにATtinyを使いこのマイコンで動くカスタムされたArduinoISPスケッチを使うことでICSP書き込みを行えるようにしています。
UPDI書き込みについて
UPDI(Unified Program and Debug Interface)による書き込みは、上記と同様Arduino(ATmega328PやATmega32U4)に「jtag2updi」スケッチを書き込みUPDIプログラマとして動かすか、シリアルUPDIを使う方法があります。
本ボードでは、USB-シリアル変換チップとしてFT232RLを使っているので、これを使えば簡単にシリアルUPDIによる書き込みを行う回路を組むことがこ出来るので採用しています。

UART
USB-シリアル変換チップにFT232RLを使うことにしました。
このチップは5V or 3.3Vのロジックレベル切り替えが容易で、UART通信以外にも多用途に利用できます。

本ボードでは、TX/RX以外にもDTRやRTSピンなどを引き出しており以下のような用途にも対応出来るようにしました。
例えば、DTR信号が使えるとArduino互換ボードなどへの自動書き込み(オートリセット)で利用することができます。
またESP32では、それに加えてRTS信号が使えるとこちらもオートリセットをかける用途でも使えます。


これらの制御信号が揃っていることで、通常のUSBシリアル変換器としても汎用的に使用出来ると思います。
以上が全体構成となります。
電圧レベル(3.3V or 5V)、UARTまたはプログラムモード、ICSP/UPDI書き込みの切り替えと、各モードをスイッチ操作により変更できるシンプルな構成になります。
回路と基板設計・構成について
先述の通り今回製作したAVRプログラマボードは、ICSP / UPDI / UART という3つの書き込み方式に対応する構成になっています。
USB-シリアル変換チップにFT232RLを使用、UPDI書き込みにはこのTX/RXラインを使いシリアルUPDIでの書き込みを行い、ICSPでの書き込みではATtiny1614(またはATtiny814)に書き込んでいるISPプログラムを使い書き込みを行う構成とし、それらモードおよびロジック電圧(3.3V/5V)をスイッチ操作により切り替える形としています。
全体の回路構成は非常にシンプルです。
UART部分
USB-シリアル変換チップにFT232RLを使用。
TX/RXだけでなく、DTRやRTSなどの制御信号も引き出しています。
FT232RLには内蔵3.3Vレギュレータが搭載されていますが、出力できるのは50mA程度です。
例えば、ESP32などを接続して使うことも想定し外部LDOを使いました。
UPDI部分
UPDIによる書き込み部分では、FT232RLを使ったシリアルUPDI書き込みとしています。
参考 SerialUPDIGitHub外部のMCUなしで直接書き込みが可能です。
このように、RXD-TXD間にダイオードと制限&保護抵抗を入れるだけのシンプルな構成で、jtag2updiなどのソフトと組み合わせて使うことができます。
ICSP部分
ICSP書き込みでは、MOSI / MISO / SCK / RESET / VCC / GND の6本の信号線を用いてマイコンに直接プログラムを書き込みます。
ATtiny1614(またはATtiny814)を使ってArduinoISP互換のスケッチを動作させICSP書き込みを行う形としています。
PCBWayに基板を発注
基板の発注は、PCBWayを利用しました。
基板データ(ガーバーファイル)をダウンロード出来るようにしておきます。
何かの参考になればと思います。
簡単にPCBWayでの発注方法も見ておきます。
PCBWayでの基板発注は、[概算の見積価格の確認(仮発注)] → [データチェックを受け最終価格が決定]という流れで進めていきます。
発注項目の選択は特記すべきところはなくデフォルトで選択されている項目から変更する必要はありませんが、基板製造時に入る製造番号[Remove product No.]を削除するオプション[Yes(extra+$1.5)]を選択しました。
レジスト(基板カラー)はお好みで選択して下さい。
基板製造料金は6.5ドルとなりました。
今回基板と一緒にメタルマスク(ステンシル)も発注しました。
パーツの実装面は、[表面のみ]となります。
基板製造料金6.5ドルにステンシル料金10ドルが加算されて、16.5ドルという見積価格になりました。
ここからガーバーファイルをアップロードしてデータのレビューが行われ、最終価格が決定され発注への流れとなります。
PCBWayでの基本的な基板発注方法はこちらの記事で詳しくまとめています。
あわせて見て頂ければと思います。

基板の到着
選択するレジストの色によって若干製造時間が変わってきますが、通常の基板であれば2~3日程度で製造が完了し発送されます。
今回配送方法にOCSを選択し、発注から6日で手元に基板が届きました。
PCBWayさんのOCSって早いんですよねー!
発送完了から2日で手元に届いたことになります。
今回はギフトショップで購入した基板定規も一緒に届きました。
PCBWayでは選択出来るレジストカラーが多いので、今後基板を発注する際の色味や質感等の確認で使おうと考えています。

パーツの実装
パーツの実装です。
ステンシルを使いはんだペーストを塗布します。
いつも使っているはんだペーストを切らせてしまい、シリンジに入ったものを使ったのですが・・・
少し粘性が弱くて細かいパッド部分から垂れてしまいました。
それほどシビアなパーツは使っていないので、ブリッジしても手はんだでの修正は簡単だと思います。
ちなみに、ステンシルを使ったはんだペーストの塗布ではいつもこれを使っています。
パーツの実装は、MHP50というミニリフロー装置を使いました。
PD電源が使えコンパクトで作業スペースの邪魔にもなりにくい、自作基板製作ではいつも愛用している非常に便利なホットプレートです!

今回製作した基板はMHP50のホットプレートサイズを若干超えるサイズ(70mm×40mm)だったため、このような専用スタンドを使いリフローしました。
MHP50を使ったリフローで、大きな基板にも対応することが出来るので便利です!

リフロー後Type-C端子がブリッジしてしまいましたが、手はんだで修正しました。
ピンヘッダー&ピンソケット、ボックスヘッダーを取り付けて実装は完了です!
ファームウェアの書き込み
ICSPによる書き込み用のファームウェアをボードのATtinyに書き込みます。
ArduinoISPスケッチをATtiny用にカスタムしたこちらのISPファームウェア(ISAISP.ino)を使わせて頂きました。
一応こちらからもダウンロード出来るようにしておきます。
上記ファームウェアを本ボードのATtinyに書き込みます。
ファームウェアの書き込みには、本ボード背面の[Self Prog]ジャンパーを短絡させておきます。
そしてモードスイッチを[PROG]および[UPDI]にセットして、Arduino IDEから本ボード搭載のATtinyに上記ISPファームウェアを書き込みます。
ATtinyを扱われたことがない方のために、ボードパッケージのインストール方法なども簡単に書いておきます。
必要ない方は飛ばして下さい!
ボードパッケージ(megaTinyCore)のインストール
まず本ボードで使っているATtiny1614(または814)へのファームウェアの書き込みには、[megaTinyCore]というボードパッケージをArduino IDEにインストールしておく必要があります。
Arduino IDEの[基本設定] → [追加のボードマネージャのURL]に進み、
以下URLを貼り付けます。
次にボードマネージャへと進み、「megatiny」で検索すると目的の[megaTinyCore by Spence Konde]が見つかります。
このボードパッケージをインストールします。
ファームウェアの書き込み
これでArduino IDEの[ボード]の項目に[megaTinyCore]が加わり、UPDI書き込みに対応した各種ATtinyチップへの書き込みが行えるようになります。
本基板ではATtiny1614(またはATtiny814)を使っており、これにファームウェアを書き込むので選択します。
本ボードとPCをケーブルで接続し、[ポート]を選択、[書き込み装置]に[SerialUPDI]を選択します。
ATtiny1614は生チップを使っているので、まずヒューズの書き換えを行います。
下記設定で[ブートローダーを書き込む]を選択し書き込みます。
次に[書き込み装置を使って書き込む]を選択し、ファームウェア本体を書き込みます。
書き込みが完了したらこのような表示になると思います。
ATtinyくんにISP書き込めたので問題ないでしょう。
AVRプログラマ作るのにAVRプログラマが必要という・・・いつも思う!
ピンヘッダーとか取り付ける前に書き込みテストしとこー🤤 pic.twitter.com/JnIgqW7jVe
— ガジェット大好き!! (@smartphone_jp1) June 23, 2025
以上でファームウェアの書き込みは完了です。
これでAVRプログラマの完成です!
シルクプリントのミスを発見
完成後、書き込み等の動作確認をやっていたのですが、PCにシリアルとして認識されているのにICSP/UPDIともに書き込みが全く出来ず・・・
ここで初めて気付いたのですが、シルクプリントのミスがありました。
切り替えスイッチ部分のICSPとUPDIのシルクを入れる場所が逆になっていました。
これは悔しいですね!
書き込み設定
AVRプログラマとしての書き込み設定は対象デバイスによって変わってきますが、簡単に見ておきます。
ICSPによる書き込み
ICSPによる書き込みを行う場合、モードスイッチを[PROG]および[ICSP]を選択します。
書き込む対象デバイスによって変わってきますが、書き込み装置に[Arduino as ISP]を選択して書き込みを行います。
朝活、昨日の続き
自作AVRライタの書き込みテストシリアルは認識してて問題ないのに、UPDIとICSPの書き込みが全然出来なくハマってたんだけど…
スイッチ切り替えのシルクが逆になってた。
これは悔しい😅 https://t.co/xUt4QRCB7H pic.twitter.com/jRdgeK3HRT— ガジェット大好き!! (@smartphone_jp1) June 23, 2025
ICSPによる書き込み方法は、こちらの記事が参考になると思います。

UPDIによる書き込み
UPDIによる書き込みを行う場合、モードスイッチを[PROG]および[UPDI]を選択します。
書き込み装置に[SerialUPDI]を選択して書き込みを行います。
いろいろ書き込みテスト…
便利なだけに、シルクのミスは痛いのぉ😓 pic.twitter.com/5cBIvI1nu3— ガジェット大好き!! (@smartphone_jp1) June 23, 2025
UPDIによる書き込み方法は、こちらの記事が参考になると思います。

UART
USB-シリアルコンバーターとして使用する場合、モードスイッチを[UART]にします。
この状態では、FT232RLがPCとのシリアル通信を仲介するUSB-シリアル変換器として動作します。
シリアルモニターでのデバッグ通信、またESP32など他のマイコンとの通信にも利用できます。
使用パーツ一覧
今回使用したパーツの一覧です。
パーツ | 定数 | 入手先 |
コンデンサ (0805) | C9/C9 1μF | AliExpress |
コンデンサ (0603) | C1/C2/C3/C5 100nF C4/C6 4.7μF C7/C10 47pF | AliExpress |
ダイオード (SOD-123) | D1 1N5819W | AliExpress |
ヒューズ (1206) | F1 500mA | AliExpress |
USB端子 | J2 Type-C端子(16P) | AliExpress / 秋月電子 |
LED (0603) | LED1(TX) / LED2(RX) LED3(3.3V) / LED4(5V) LED5(Programming) / LED6(Error) ※色はお好みで | AliExpress |
抵抗 (0603) | R1/R2 5.1kΩ R3/R4/R5/R6/R8/R9 1kΩ R7 470Ω R10/R11 27Ω | AliExpress |
スイッチ | SW1/SW2/SW3 6P DPDT(SMD) | AliExpress |
MUC | U2 ATtiny1614(ATtiny814) SOIC-14 | AliExpress / モノタロウ |
USB-TTL | U2 FT232RL(SSOP28) | AliExpress / 秋月電子 |
LDO | U3 LDL1117S33R | AliExpress |
その他 | ホックスヘッダー 6P(2×3) ピンヘッダー / ピンソケット | 秋月電子 |
最後に!
今回製作したAVRプログラマ(AVR Universal Programmer)は、ICSP・UPDI・UARTという3つの書き込み方式に対応しており、汎用プログラマとしては便利だと思います。
ArduinoやATtinyなどAVRマイコンを使った電子工作をしていると、「このチップはICSP?こっちはUPDIしか使えない」といった場面によく出くわしますが、そんなときにこの1枚があれば便利です。
また、書き込み以外にもUSBシリアルアダプタとしても使える構成なので、ちょっとしたデバッグ用途やESP32などの書き込み補助的な使い方も出来るのがいいと思います。
AVRマイコンの使用環境によって必要な構成は異なるかもしれませんが、自分の環境に合った物が作れるのは自作のいいところですね!
これから使っていきます・・・
















コメントを残す