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

【電子工作 / PCB】AVRプログラマ USBaspを自分仕様にアレンジして自作ボードを製作してみました!

以前書いたこちらの記事の追記となります。

【電子工作 / 自作PCB】AVRプログラマ USBaspの自作ボードの製作を考えています!

Arduinoとの出会いが電子工作を始めるキッカケとなった私としては、各種ArduinoボードやATtinyといったAVRマイコンは何かと使う機会が多く扱いやすいと感じます。

私のようにArduinoから電子工作を始めたという方も多いと思います。
AVRマイコン、特にArduinoといった開発ボードはよく出来ていて電子工作初心者の方でも比較的簡単に扱うことが出来るように設計されているのが良いですね!

AVRマイコンのプログラム書き込みにはAVRプログラマ(AVRライタ)が使われます。
Arduinoといった開発ボードの形状になったものではUSB経由で書き込みが出来るので普段あまり意識することがありませんが、ブートローダーを書き込むなど特定の用途で必要となってきます。
またATtinyといったマイコンへの書き込みにも同様にAVRプログラマが必要となりますね。

AVRプログラマは様々なものが販売されていますが、安価なものではUSBaspは便利です。
ArduinoやATtinyといったAVRマイコンを扱うことが多い方は1台持っていると何かと重宝します。

そして前回の記事でも書いたのですがAVRマイコンを扱うことが多い私の環境ではAVRプログラマを使用する頻度が結構高いので、USBaspを自分仕様に使いやすくなるようアレンジして自作ボードとして製作してみました。

AVRプログラマ USBasp自作ボードの製作

USBaspはThomas Fischl氏の設計に基づくAtmel AVRマイクロコントローラー用のUSB ISP/TPIプログラマーとなり、オープンソースで公開されているプロジェクトとなります。
ATmegaやATtinyといったAVRマイコンにプログラムやブートローダーを書き込む際に使える、いわゆるAVRプログラマーと呼ばれるものです。

USBaspはオープンソースプロジェクトとなり同氏のWebサイトでハードウェアやソフトウェア(ファームウェア)情報が公開されているので、これをベースに自作することも出来ます。

参考 USBasp - USB programmer for Atmel AVR controllersThomas Fischl

USBaspは互換品やクローンモジュールといったものが数多く販売されています。
Amazonなどでも数百円程度と安価で入手する事が出来るので、AVRマイコンを扱うことが多い方は1台持っていると便利です!

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

AVRマイコンの書き込みには大きくUPDIによる書き込みISPによる書き込みの2通りあります。
比較的新しいmegaAVR 0シリーズやtinyAVR 0/1/2シリーズといったAVRマイコンでは、単線式のUPDI書き込み方式となっています。
それ以前のAVRマイコンではISPによる書き込み方式となっており、USBaspは後者のISPでの書き込みを行うAVRプログラマとなります。

カスタムした箇所

UPDIは単線式の書き込みなので接続が簡単なんですが、ISPでの書き込みではより多くの接続が必要となります。
信号線としてMOSI/MISO/SCK/RESET、そして電源VCC/GNDを入れると書き込みの際に6本配線の接続が必要となってきます。

USBasp自体は安価で入手する事が出来るのですが配線が面倒となる場面も多いことから、これまで使ってきて自分の環境で使いやすくなるようにいくつかカスタムさせて自作ボードとして製作しました。

カスタムさせた箇所
  1. 接続端子(書き込み用端子)を複数設置する
  2. Type-C端子に変更
  3. ターゲットデバイスへの電源供給電圧の切り替えを可能に(5V or 3.3V)

①接続端子(書き込み用端子)を複数設置する

本家USBaspには10ピンのボックスヘッダーが取り付けられています。
付属する(しない場合もあります)10線のIDCケーブルに6ピン変換ボードを取り付けて使用するのが一般的です。

これだけでは用途によっては接続が面倒になる場面が多いので、6ピンのボックスヘッダーも取り付けました。
6線のIDCケーブルにポゴピンを直接取り付けて書き込むといった使い方もできます。

【電子工作 / PCB】ポゴピンコネクタとレセプタクルを組み合わせて簡易プローブを作る![P75-E2 / R75-3W]

またブレッドボードに組んだ回路などにも接続しやすいようにピンソケットも取り付けています。
ISP経由で書き込むATtinyといったマイコンチップはブレッドボードで組んでテストすることが多いのであると便利です!

②Type-C端子に変更

本家USBaspにはType-A端子が取り付けられています。
そのためPCやUSBハブなどに直接差し込む必要があり、そこから書き込み用のケーブルを延ばしたりと正直ここが一番使いにくい部分でした。

今どきなのでType-C端子に変更しケーブルを引っ張り好きな場所で作業出来る方が便利です。

③ターゲットデバイスへの電源供給電圧の切り替えを可能に(5V or 3.3V)

AVRマイコンは5Vで駆動させるのが一般的なのかな?
ATtinyといったマイコンでは動作電圧範囲が広く3.3V用途で使用することも多いことから、ターゲットデバイスへの電源供給を5Vと3.3Vに切り替えが出来るようにしました。

以上が本家USBaspからカスタムさせた大きな変更箇所です!

回路構成

本家USBaspの回路構成はこのようになっています。
コアとなるマイコンはATmega8(またはATmega48/ATmega88)が使われたシンプルなハードウェア構成となっています。

ファームウェアはよく出来ていて、改良されたカスタムファームウェアを製作されている方もいるようですね!

これをベースに今回製作した自作USBaspはこのような回路構成で作りました。

そして本家ボードにも搭載されている3つのジャンパーパッドについて、以前USBaspのファームウェアアップデートをした記事を見た方から何度かご質問を頂いたことがあったので書いておきます。

ターゲットデバイスへの電源供給パッド(JP3)

こちらはターゲット(書き込む側)デバイスへの電源供給を行うか否かを選択するパッドです。
通常はジャンパーピンを挿した状態で使用して、電源を相手側にも供給する使い方が多いと思います。

ファームウェア書き込み用パッド(JP1)

自身(本基板)にファームウェアを書き込んだりアップデートさせる際に使用するパッドです。

USBaspはAVRプログラマですが自身にそのファームウェアを書き込む際にもう1台AVRプログラマ(Arduinoやもう1台USBaspを使う)経由で書き込みを行う必要があり、自身をターゲットデバイスにするためのモード用となります。

スロークロック用端子

通常はほぼ使うことはないと思いますが、低速モードでターゲットデバイスに書き込みを行う必要がある場合に使用するジャンパーです。

そして今回製作した自作USBaspではMCUにATmega8Aを使っています。
生チップを使っているので自身にファームウェアを書き込む際に工場出荷時に設定されている低速書き込みが必要となります。

初回のみ自身にファームウェアを書き込む際にも必要となる低速書き込みモード用のジャンパーパッドとなります。

JLCPCBに基板を発注

基板の発注はJLCPCBを使いました。
配送方法にOCS NEPを選択すれば基板製造料金と合わせてトータル500円ほどで作ることが出来ます。

今回製作した自作USBaspボードの基板データ(ガーバーファイル)をダウンロード出来るようにしておきます。
何かの参考になればと思います。

発注時の特記事項は特にありません。

ほぼデフォルトで選択されている項目を選んでおけば問題ありません。
PCBカラーはお好みで!

MEMO
本記事でご紹介している基板は[表面仕上げ]に[ENIG(金メッキ加工)]を選択したものとなります。(オプション料金がかかります)
通常の[HASL]を選択して発注すればお安く製造することが出来ます!

今回ステンシルもオプションで発注しました。
手はんだではなくリフローでの実装をお考えならステンシルがあると実装時の作業効率が上がり綺麗にパーツ実装を行うことが出来ます。

JLCPCBの基本的な基板発注やステンシルの発注方法に関してはこちらの記事で詳しく紹介しています。
あわせて見て頂ければと思います。

【電子工作】はじめての基板製作!JLCPCBさんに基板を発注してみました。ユーザー登録・データ納品・基板到着までの一連の流れをご紹介!
【JLCPCB】初めてステンシルを使ったリフローを行ってみました。JLCPCBでステンシルを発注する手順などを紹介!

パーツの実装

発注から8日ほどで基板が手元に届きました。

一番小さなパーツで0603サイズなので手はんだでの実装も十分可能ですが、リフローによる実装は作業効率がよく綺麗に実装する事が出来ます。

ステンシルがあると便利ですね!
綺麗に適量のはんだペーストを塗布することが出来ます。

実装はミニリフロー装置MHP50を使って行いました。

PD電源が使え作業スペースの邪魔にもなりにくく、非常に便利なリフロー装置でいつも愛用しています。

【電子工作 / PCB】ミニリフロー装置『Miniware MHP50』を使ってみる!加熱性能や安全設計はMHP30から全て引き継がれ使い勝手がさらに向上した便利なリフロー装置です

綺麗に実装出来ました!
あとはボックスヘッダーとピンヘッダー&ピンソケットを取り付けて基板は完成です。

ファームウェアの書き込み

パーツの実装が出来たら次はファームウェアの書き込みです。
ファームウェアの書き込みにはAVRプログラマが必要となります。

自作したUSBaspはAVRプログラマなわけですが、自身にファームウェアを書き込むのにAVRプログラマが必要になってくるというなんとも面白い話ですが・・・

ファームウェアの書き込みはArduinoがあればそれを書き込み機として使うことが出来ます。(ArduinoISPを書き込む)
またUSBaspをお持ちなら同様に書き込み機として使えます。

USBaspを既にお持ちならファームウェアを書き込む際の接続は付属する10ピンのIDCケーブルを接続するだけなので簡単です。
USBaspをお持ちでない方もいるかと思うので、こちらではArduinoを使って書き込みを進めていきます。
USBaspを使う場合も書き込み方法は同じです。

接続

ファームウェアを書き込む際は、本基板にあるジャンパー[SLOW SCK(JP2)]と[FIRMWARE(JP1)]をジャンパーピンを使い短絡させておきます。

まず書き込み機として機能するようにArduino(こちらではUnoを使いました)に[ArduinoISP]スケッチを書き込んでおきます。
[ArduinoISP]はArduino IDEの[ファイル]→[スケッチ例]→[11.ArduinoISP]にあります。

これでArduinoはAVRプログラマとして機能するので、本基板とこのように接続しファームウェアの書き込みを行います。

Arduino本基板
D10RST(RESET)
D11MOSI
D12MISO
D13SCK
5V5V
GNDGND

ファームウェアを書き込む準備

USBaspのファームウェアはThomas Fischl氏の公式サイトからダウンロード出来ます。
古いですが、[usbasp.2011-05-28.tar.gz]が最新のものになります!

ここからavrdudeを使いファームウェアを書き込むのですが、少し話が長くなるので必要なファイルをダウンロード出来るようにしておきます。
ちなみにavrdudeはAVRマイコンにプログラムやヒューズビットを書き換えるためのオープンソースのソフトウェアです。

ダウンロードしたファイルを解凍すると3つのファイルがあり、上記USBasp最新のファームウェアバイナリも含まれています。

ファームウェアの書き込み

それではファームウェアの書き込みです。
本基板と接続したArduinoをPCに接続します。

その際にArudinoで使用しているシリアルポートを確認しておきます。
私の環境では[/dev/cu.usbmodem1463201]となっていました。(Mac環境で作業を行っています)
ご自身の環境で表示されるポートをメモしておきます。

次にターミナルを開き、3つのファイルが入ったフォルダーに移動します。
[cd(スペース) ]と入力し先程のフォルダをドラッグ&ドロップしてリターンを押すと移動することが出来ます。

目的のフォルダに移動できたら次のコマンドを入力してファームウェアを書き込みます。
コピペでOKですが、ポート設定部分はご自分の環境のものに変更して下さい!(/dev/cu.usbmodem1463201部分)

ファームウェアの書き込みが成功するとこのように表示されると思います。

ヒューズビットの書き換え

次にヒューズビットの書き換えです。
同様にこちらのコマンドを打ち込み書き込みを行います

書き込みに成功すればこのように表示されると思います。

以上でファームウェアの書き込みは完了です。
これでAVRプログラマとして使うことが出来ます。
お疲れ様でした!

MEMO
ファームウェアの書き込みで差し込んだジャンパーピン[SLOW SCK(JP2)][FIRMWARE(JP1)]は外して使用して下さい!

動作確認

動作確認です。
Arduino IDEを使った書き込みでは外部書き込み装置を使う設定で行います。

[書き込み装置]に[USBasp]を選択しておき、

[書き込み装置を使って書き込む]から書き込みを行います。

こちらはATtiny85を使った自作ミニゲーム機への書き込みの様子です。
ArduinoISPを書き込んだArduinoボード経由での書き込みよりもスピードが早くていいですね!

【電子工作 / PCB】100均で売ってそうなミニゲーム機を自作しよう!ATtiny85で動かすミニゲーム機TinyConsoleの製作その②[基板実装・ゲームデータの書き込み]

使用パーツ一覧

今回使用したパーツの一覧です。
サイズ等、リンク先ページで確認して下さい!

パーツ定数入手先
抵抗
(0603)
R1 10kΩ
R2/R3 5.1kΩ
R4/R8/R9/R10 270Ω
R5 2.2kΩ
R6/R7 68Ω
R11/R12 1kΩ
Amazon / AliExpress
コンデンサ
(0603)
C1/C2 22pF
C3 100nF
C4/C5/C8 4.7μF
C6/C7 1μF
Amazon / AliExpress
ダイオード
(SOD-123)
D1/D2 MMSZ5227B G2(3.6V)AliExpress
LED
(0603)
LED1(書き込み確認ランプ)
LED2(通電確認ランプ)
AliExpress
ヒューズ
(0805)
F1 500mAAliExpress
MCUU1 ATmega8AAmazon / AliExpress
電圧レギュレータU2 AMS1117-3.3Amazon / AliExpress
クリスタル
(3225)
Y1 12MHzAliExpress
端子J1 Type-Cコネクタ(16P)AliExpress / 秋月電子
J2 ピンヘッダー or ピンソケット(1×8)秋月電子
J3 ボックスヘッダー(10P 2×5)AliExpress / 秋月電子
J4 ボックスヘッダー(6P 2×3)AliExpress / 秋月電子
ピンヘッダー&ジャンパーピンJP1/JP2/JP3 ピンヘッダー&ジャンパーピンAmazon / AliExpress / 秋月電子
スイッチ
(SMD)
スライドスイッチ(MSS2D18 SMT)AliExpress

最後に!

AVRを扱うことが多い方はUSBaspは安価で売られているので1台持っていると便利で重宝すると思います。
私の環境では何かと使う機会が多いことから、自分仕様にアレンジしたボードを製作してみました。

USBaspは今ではもう古い?ISPでの書き込み方法に特化したAVRプログラマとなりますが、これまで使ってきて使いにくかった部分をカスタムさせることにより非常に使いやすいAVRプログラマとして製作することが出来ました。

何かの参考になればと思います。

コメントを残す