CH340G USBシリアル変換とUSBaspの作成

以前も作成したCH340G USBシリアル変換ですが懲りずにAE-ATmega基板用に新たに作ってみました。
さらにUSBaspも同じ基板上に組んでみたいと思います。

CH340G USBシリアル変換の作成
今回は両面基板を使って少しだけ気合を入れて作ってみました。(でも普通は変換基板を使いますよね)
ch340g00
CH340Gの基本回路です

ch340g01
取り付けする位置を決めます。
1番ピンをランドの下に2番ピンがランドの上になるようにします。
半田付けする前に3,5,7,10,12,14番ピンを細いラジペンまたはニッパーで曲げてある足を伸ばすように少しはね上げます。
1,8,9,16番ピンを半田付けします。

ch340g03
3,5,7,10,12,14番ピンを根元に負担を掛けないように小ドライバーなどで押さえながらできるだけ水平に足を伸ばします。
2,4,6,11,13,15番ピンを半田付けします。
隣のランドにリード線を半田付けします。(1/6W抵抗のリード線がいい)
伸ばしたピン(3,5,7,10,12,14番ピン)に弧を描くようにできるだけ接触させてから半田付け。

ch340g04
パスコンとクリスタルを取り付け。(パスコンは裏面でもOK)
半田ブリッジ、半田付け不良が無いか目視でチェック。
ダイソーの200均(?)ルーペがいい

ch340g08
3Vにもパスコンをつけます。
クリスタルの22pは今回の用途では省略可能と思いますが(未確認)ジャンク基板から外して取り付けてあります。
テスターで隣接ピンどうしショートがないか確認しておきます。
この時点でUSBケーブルを直付けして確認します。
伸ばしたピンに半田付けする際は30W位の半田鏝で手短に確実にサクッと仕上げます。

dmesg
直付けしたUSBケーブルをPiに差し込めばch341-uart converterとして認識されるはずです

もし認識されない場合は半田付け不良、回路誤り、接続違いなど原因があるはずです。
再度確認します。

ch340g06
USBコネクタなどの接続が必要ですがIC関連は13mmx17mm以内とコンパクトに収まりました。

この基板上にAVRライタを組んでいきます。
AVRライタは実績のあるUSBaspを採用したいと思います。

USBaspの作成
usbasp00
本家のサイト(Thomas Fischl )を参考にAE-ATmega基板をベースにするため出来るだけシンプルに構成してみました。
MCUはATmega88V-10PUを使用。最大クロック周波数は10MHzですが12MHzでも特に問題なく動いています。(値段も安いです)
クリスタルの代わりにセラミック発振子を使用。コンデンサも内臓しているのでスペースも取りません。
Slow SCKはスライドスイッチを採用。デフォルトは1MHzとかが多いので簡単に操作できます。

USBのD-,D+ラインにツェナーダイオードが入っていませんが3.6VZDの入手性が悪いため当初3.3VZDを入れたのですが5Vで認識しませんでした。(3.3VZDを取り替えると認識できるときもあります)
今回で2台目の製作なのですが1台目も同様の結果でした。
USBの詳しい動作は分かりませんがwebの解説を見ながら調べたところD-ラインは抵抗でプルアップされているとロースピードデバイスとして認識されるとあります。
USBaspのD-ラインはR1(2.2K)でプルアップされています。
当サイトの環境ではD-ラインをツェナーなしで電圧を計ると5V動作時約4V(3.3V動作時約3V)、3.3VZDを取り付けると2.3V前後を計測します。(ツェナーなしでは正常に認識できます)
5V動作でR1のVCCを外して外部から電圧を加え可変していくとやはり2.2V~2.3Vで認識できるかできないかのしきい値にあたるようです。
試しに手持ちのZDを取り付けてみると3.9VZDで約2.9V、5.6VZDで4Vになります。
このラインのベストな電圧は正確にはわかりませんが3V前後が安全ラインかなと推測しています。
1台目のUSBaspは結局ZDなしで特に問題なくこれまで使用してきたので今回もシンプルになしで一旦製作してそのうち試してみようと思います。(自己責任で!
D+端子は差動動作で信号のあるときのみ電圧が現れるので白色LEDを取り付けモニタに利用します。
こちらも1台目で問題なく動作していました。光かたで認識も書き込みも正常かどうか大体わかります。

変更してみました。 (2014/10/08)
もう一度D–ラインの電圧を整理してみます。
USBasp   5v動作    3.3v動作
3V3ZDなし  4v      3v     5v,3.3v OK
3V3ZDあり  2.2v     2v     5v NG 3.3v OK

3V3ZDなしの場合認識はしますが5v動作時4vと高いのが気にかかります。
3V3ZDありの場合5v動作時はスレッショルドレベル以下になりNGですが3.3v動作時はスレッショルドレベルも相対的に低めに推移していると思います。
USBの解説をみるとローレベルデバイスの場合D–は3.3vから1.5kの抵抗でプルアップしています。
したがって3.3v動作時はUSBaspもZDなしのプルアップのみで適正な動作になるものと思われます。
ここのI/Oは3.3vのため5v動作のUSBaspはこれに合わせるため3V6のZDを採用しているものと思います。
但しこのラインは抵抗でプルアップしている回路なので低インピーダンスの電源回路のようなツェナー動作とは違うため調整が必要なのかもしれません。

今回のUSBaspは5v及び3.3vで使いため小信号のダイオードを追加して電圧をシフトしてみました。
USBasp    5v動作   3.3v動作
3V3ZD+DI(1本) 2.7v    2.35v    5v,3.3v OK
3V3ZD+DI(2本) 3.2v    2.65v    5v,3.3v OK
usbasp+ch340g
CH340G USBシリアル変換とUSBaspの全回路図
ダイオードは普通の小信号用であれば大抵使えると思います。
1本でもおそらく問題なく使えると思いますがD+も同じ電圧がきてると思います。
白色LEDで頭は3.0v~3.2vに押さえられている(ハズ)ですのでここに合わせて2本仕様としました。
この回路でしばらく使ってみようと思います。

ファームウェア書き込み
書き込みには以前作成したUSBaspを使用します。
Thomas Fischlのページからusbasp.2011-05-28.tar.gzをダウンロード、展開します。
展開するとusbasp.2011-05-28/Readme.txtがありますのでその中にfuse bitの設定があります。
# TARGET=atmega88 HFUSE=0xdd LFUSE=0xff

$ avrdude -c usbasp -p m88 -u -U hfuse:w:0xdd:m
$ avrdude -c usbasp -p m88 -u -U lfuse:w:0xff:m

クリスタルの設定ですがセラミック発振子でもOKでした。
セラミックのfuse bitの設定はこちら

$ avrdude -c usbasp -p m88 -u -U hfuse:w:0xce:m
$ avrdude -c usbasp -p m88 -u -U lfuse:w:0xff:m

次にusbasp.2011-05-28/bin/firmware/usbasp.atmega88.2011-05-28.hexを書き込みます。

$ avrdude -c usbasp -p m88 -U flash:w:usbasp.atmega88.2011-05-28.hex

Piに接続するとこんな感じで認識されます。

$ dmesg | tail
[11065.853453] usb 1-1.2.3.3: new low-speed USB device number 11 using dwc_otg
[11065.962488] usb 1-1.2.3.3: New USB device found, idVendor=16c0, idProduct=05dc
[11065.962526] usb 1-1.2.3.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[11065.962542] usb 1-1.2.3.3: Product: USBasp
[11065.962555] usb 1-1.2.3.3: Manufacturer: www.fischl.de

usbasp01
上側のスライドスイッチは電源スイッチ

下側のスライドスイッチはSlow SCK

usbasp02
チップ部品はすべて不要の家電品から再利用します。
小型化に役立ち、コストもかかりません。
なれるとリード部品より楽に組み上げられます。

線材は半田付けをしやすくするため多少長めにしてありますがそれでも以前の作より少しビューティーかと思います。

hub01
シリアル変換とUSBaspは全くの別の回路となるためこのままではUSBケーブルを2本接続する必要があります。
スペースも無ければ、また2本差し込む事もうれしくありません。

今回もセリアの100均ハブが登場します。

hub02
USBはMINIを使いたいため外してしまいますが外しにくいですね。
60Wクラスの半田鏝が必要です。(火傷注意)

うまく固定できれば外さずにUSB延長ケーブルでも使用可能と思います。

usbasp03
各D-,D+のみシリアル変換とUSBaspに接続します。

ノーマルのUSBコネクタはそのままUSBハブとして使います。

usbasp04
取り付けはピンヘッダを立てて自由に取り外しできるようにします。

一端は外したUSB端子にもう一端はアースパターンに直接半田をして立てています。

きっちり固定されるのでごく普通にUSBハブとして利用できます。

usbasp06
USB MINI端子は取り付けスペースが限られるため端子の曲げがきつくなり1個端子を折ってしまいました。
MINI端子も本体から出ている部分に負担を掛けるとすぐに折れてしまいます。
(1個資源を無駄にしてしまいました:)

usbasp07
次回はAE-ATmegaに取付、試してみたいと思います。