USBaspはThomas Fischl氏の設計に基づくAtmel AVRマイクロコントローラー用のUSB ISP/TPIプログラマーです。
Arduinoで使われているATmegaやATtinyといったAVRマイコンにプログラムやブートローダーなどを書き込む際に使える、いわゆるAVRプログラマーです。
オープンソースプロジェクトとなり同氏のWebサイトでハードウェア&ソフトウェア(ファームウェア)情報が公開されています。
参考 USBasp - USB programmer for Atmel AVR controllersThomas Fischl最近のAVRマイコンはUPDI(単線式)での書き込み方式になっていますが、ATmega328Pが使われているArduino UnoやNanoなど、またATtiny85といったISP経由での書き込みになっているATtinyシリーズのマイコンなどもまだまだよく使われます。
ArduinoといったAVRマイコンを扱うことが多い方はUSBaspは1台持っていると何かと便利です。
そしてUSBaspは安価で入手することが出来るので自作する必要は全く無いとは思いますが・・・
Arduinoから電子工作を始めた私としては自分仕様にカスタマイズさせた使いやすいものを1台作っておきたかったので、自作のUSBaspを製作してみることにしました!
自作のUSBaspを製作する
Arduinoから電子工作を始めたという方、結構多いと思います。
私もその一人です。
最近小学生の甥っ子くんがArduinoを始めたこともあり、自分が電子工作を始めた頃のことを思い返していたのですが・・・
そういえばUSBaspといったAVRプログラマはよく使うので、今なら自分仕様にカスタマイズさせて自分の環境で使いやすいボードを自作する事が出来るのでは?
そんなことから自作のUSBaspの製作を始めました。
USBaspはオープンソースプロジェクトとして公開されているので、互換製品やクローンモジュールといったものが多く販売されています。
Amazonなどでも数百円程度で簡単に入手する事が出来ます。
そしてArduinoは初心者でも扱いやすいのが良く、Arduinoが1台あればArduino IDEに標準で用意されているサンプルスケッチ「ArduinoISP」を書き込めばAVRプログラマ(書き込み装置)として使うことも出来ます。
Arduinoをやられている方ならもうお馴染みの方法ですね。
しかしながら新しいAVRマイコンで採用されている単線書き込み式(半二重通信)のUPDIと比べると、ISPでの書き込みにはMOSI/MISO/SCK/RESET、そして電源VCC/GNDを入れると計6本の接続が必要となってきます。
毎回どれがMISO?SCK?みたいな感じになり、これが結構面倒なんですよねー!
そんなことからUSBaspを使うことも多いのですが、何分もう古いデバイスなのでこれまで使ってきて気になる部分をカスタムし自分仕様のUSBaspを自作してみようと思います。
カスタムしたい箇所
USBaspはThomas Fischl氏の設計に基づくオープンソースプロジェクトとなり、ハードウェア構成やファームウェアなど必要な情報はサイト上に公開されているのでUSBaspを自作で作るのは比較的簡単に出来ると思います。
参考 USBasp - USB programmer for Atmel AVR controllersThomas Fischlファームウェアはよく出来ていて(カスタムファームも出ているようです)、コアとなるマイコンはATmega8(またはATmega48/ATmega88)が使われたシンプルなハードウェア構成となっています。
これをベースにして自分仕様のUSBaspを自作するならどのような仕様にするか?
ボードの形状などによっても構成や仕様は変わって来そうです。
当初このような2.54mmピッチ(2×3)6ピンのポゴピンが付いたスティックタイプのものを考えていました。
これまでUSBaspを使ってきて、おそらく実用ではこのような形状がシンプルで使いやすいかな?と思いますが・・・
テスト等で何度も書き込む用途で使用する場合は接続した状態を保てる据え置き型のボード形状が便利となり、ポゴピンプローブと接続して使うといった選択肢も出来る方が便利そうです。
据え置き型のボードで製作する場合、まずオリジナルのUSB端子を変更したいところです。
オリジナルのボードではType-A端子が使われていますが、PCやUSBハブなどに直接差し込む必要がありここからケーブルを引っ張っていき・・・これが使っていて一番面倒となる部分です。
今ならType-C端子を使いケーブルを伸ばしてきて接続する方が使いやすい思います。
あと端子まわりですが、ISPでの書き込みではMOSI/MISO/SCK/RESET/VCC/GNDの6P使用となるので10Pから6Pボックスコネクター(または6Pのピンソケットのみ)に変更しようかとも考えましたが、使用する用途やケーブルなどの関係もあるので・・・
据え置き型のボード形状にする場合小型なものでもある程度のスペースを確保することが出来るので、6Pと10Pのボックスコネクターという構成にする予定です。
また8Pのピンソケットも付けそこからジャンパーワイヤー等でブレッドボードなどへの接続も出来るように考えています。
そしてターゲットデバイスには、5V以外に3.3Vの電源供給も出来ると便利そうです!
以上を踏まえ私仕様のUSBaspは以下箇所に変更を加えたこのような カスタムボードにしてみようかと考えています。
- Type-C端子に変更
- 6P&10Pボックスコネクターと8Pピンソケットから使用可能
- ターゲットデバイスへの電源供給電圧の切り替えが可能(5V or 3.3V)
全体構成
上記を踏まえ現状全体の回路構成はこのようなものを考えています。
基板アートワークはI/Oラベルを大きく取り見やすくした上で、全体サイズ60mm×40mmとコンパクトに収めることが出来ました。
オリジナルに基づきジャンパーパッドは、ターゲットデバイスへの電源供給パッド(TARGET SUPPLY)・セルフファームウェア書き込み用パッド(FIRMWARE)・低クロック動作用パッド(SLOW SCK)の3つをパッドを設置しています。
自作ボードなので極力無駄な部分や不必要なものはカットしたいので、オリジナルのUSBaspでは一度も使ったことがない低クロック動作用のジャンパーはカットしてもいいかな?と考えています。
コアで使用されているATmega8Aは工場出荷時に内部1MHzオシレータ用にプログラムされているようで、自作基板では生チップを使うことから初めてファームウェアを書き込む際に必要となるのですが、調べてみるとUSBaspのカスタムファームウェアを製作されている方もいるようです。
参考 usbasp improvedGithubこのようなカスタムファームウェアを使う場合ソフトウェア的にターゲットが応答しない場合は自動的にSCKクロックを低速にする機能が付いているようなので、低クロック動作をさせるジャンパーパッドはカット出来そう?ですが・・・ブレッドボードでのテストでは問題有りませんでしたが、どうしようかな?
最後に!
Arduinoから電子工作を始めた私としてはこれまで使う機会が何かと多かったUSBaspなんですが、ここ最近自作キーボードの製作でATmega32U4にブートローダーを書き込んだりとまた新たに使う用途も出てきました。
自作基板の製作も始めたことから、今なら自分仕様のUSBaspを自作することが出来そうなので製作してみることにしたのですが・・・実際に製作した際にまた詳しくご紹介出来ればと思います。
コメントを残す