USB 接続式 PIC ライタ


はじめに

しばらく, シリアルポート接続式の PIC ライタを愛用していたのですが, こいつは, 外部電源が要らない利点がありますが, PC を選ぶとか, USB シリアルケーブルで動かないという欠点があります. 近年シリアルポートの無い PC が増えてきたため, この欠点がきつくなってきました.

そんな折, Writer509 なるライタを見つけました. なんとなく良さそうです. これはダイオードを使ってシリアルと直結し, 12F509 という 8pin の PIC を使っています. この回路に対し,

という構想を考えました.

構想を練っている段階で, デュアルライタ なる似たような物を発見しました. これを適当に改造し USB 接続にするだけにしようかとも考えたのですが, 手元にコイルとかシャントレギュレータとか無いこともあって, あれこれ変更点を考えた結果, かなり違ったものになってしまいました. その過程で, なぜかメリットの一つであった 内蔵オシレータ利用を取りやめました.

回路

以下が回路図です. なお緑の部分は, 制御用 PIC のファームウェアを焼くためのものですので, 既に PIC ライタを持ってる場合は必要ありません. 一方, 赤い部分はおまけ機能用ですが, 現状使っていませんのでめんどうなら無視してかまいません. その場合は, 18pin IC ソケットの 10 番ピンを GND に落としてください.

R1,22.2K
R3100K
R410K
R51M
R6100K
D1〜41N4148 (1S1588 でも可)ショットキーバリアならなお良と思う
D51N4148 (1S1588 でも可)
C147uF 電解10〜100uF くらいならなんでも可
C2,30.1uF 積層セラミックパスコン
C40.1uF 積層セラミック
C50.1uF 積層セラミック
C6〜80.1uF 積層セラミック1.5uF 程度ならなお良, 電解不可
C947uF 電解4.7uF〜47uF 程度ならなんでも可
LED1好きな色で
LED2好きな色で
Tr12SC1815
Tr22SA1015
FT232RL
PIC16F648AIC ソケットで固定
9.22MHz セラミック振動子
USB TypeB コネクタミニ B でも可
18pin IC ソケットゼロプレッシャソケットでも可

C6〜C8 はパスコン用に大量に手元にあるので 0.1uF を使いましたが, 正直ギリギリです(おかげで, R3〜5 をかなり大きな値にする必要が出てきました). 注釈に書いたように, もう少し容量の大きい奴を使う方がいいかもしれません. と言っても, そのために大きいコンデンサを購入するくらいなら, コイルとダイオードを買って, 以下のような感じに組む方が, 効率・部品代共に 安上がりになるんじゃないかなと思います. ただしコイルのインダクタと CCP1 の周波数は適当に調整する必要があるでしょう (ネタは こちら です).

もともと, 手持ちの部品で作ったため昇圧回路は結構いい加減です. コンデンサ (C6〜C8) の容量, ダイオード (D1〜D4) の特性によっては 仕様書の指定より, 電圧が高くなりすぎたり, 逆に低かったりするかもしれません. 多少ずれてても動くもんだと考えていますが, ツェナーをつけるなど心配なら適当に対策してください.

また, C5 は設計上あるべきでは無いのですが, これが無いと手持ちの PIC (12F629/675/683, 16F84A/648A/819) のうち 12F629/675 に対し焼き込みが できませんでした. 付けても上記 6 個は焼きこめるのでほっといています.

次の問題は FT232RL が足間 0.65mm 表面実装品なので, ユニバーサル基板で作ることはほぼ不可能ということです. まぁその辺は Strawberry Linux等でモジュールが 売ってるようなので活用してください. 幸いなことに私は基板加工機を 使えましたので, 次のようなものを作りました (両面だと加工するのがめんどうなので, 片面用にしました).

手抜きにより, どこに何を配置するかは書きません. 回路図と以下の写真で推測してください.


これは試作品です. 上記パターン図と比べ, C5, R5, R6 の位置が違います.

あっそれから, PC で本回路を動かす場合, FTDIからドライバをダウンロード・ インストールする必要があります. その辺の説明は割愛します. その際は ここの情報を参考に, Latency Timer を 1 にする必要があります.

また, PC に挿すと「USB デバイスが認識されません」と出る時があります. その時は一旦 PC からはずし, PIC の 5pin と 14pin をピンセット等でショート させてから繋ぎ直してください.

注意! :
後日 PIC のデータシートを見直すと Open Drain の電圧 (Vod) が MAX 8.5V
であることが発覚しました. つまり上記回路は規格以上の電圧を駆動させている
ことになります. 一応私の所では動いてますが, やはりツェナーを入れて電圧を
落とすか, トランジスタを二段にするなりの細工が必要かと思います.
(しかし、なんて使えんポートだ)... 2007.6.22 追記
さらに後日, 別の用途で FT232RL を使ったのですが, なぜか認識されません. FT232RL はこの回路の他に何度か利用実績があり, 認識まではうまくいくはず とはんだブリッジ等を疑ったのですがどうしてもわかりません. データシートを見直すと, TEST ピンを GND に落とす必要があることが判明. 今まで動いているんだからこれが原因じゃないはずと 思いつつ, 半分ヤケに試してみると認識されるようになりました. という訳で, 上記回路図は TEST ピンを GND に落としてませんが落とした方が いいと思います. ... 2007.12 追記

カスタマイズ時の注意

新しい機能を追加するためとか, 配線上の都合により接続を変えたいと思う ことがあるでしょう. 基本的にファームや回路をいじればどうにでもなりますが, 注意が何点かあります.

鶏卵問題

本回路には PIC を使っているため, その PIC にファームを書き込む必要があります. しかし, 今作っている回路が PIC への焼き込み器です. 鶏が先か, 卵が先かという問題が発生します.

実は設計上, PIC ライタを持って無くても焼けるように作ってみました. しかし, 実際自分で本当にできるか試してみてもなぜか成功しません. 何分 Windows 側の制限だと思うのですが, 一回のテストに 30 分くらいかかりますし, 大体本回路を作る人は, 既に PIC ライタを持ってると考えてもいいんじゃないか とも思えます. あまり需要の無さそうな機能に時間を潰すのもなんなので この問題はしばらくほっとくことにしました.

と言うわけで, なんらかの手段で焼いてみてください. 一応, やろうとした手段を こちら に記して おきます.

PIC ファーム

ファームのソース及び HEX ファイルは こちらです. Ver1.24 を元に作ってますが, 改造にあたって個人的に見やすいよう にかなり書き換えちゃいました. ので, 本家で新しいバージョンが出たら対応はめんどうでしょう.

プログラムを焼いたら所定の位置に挿してください. PC と繋いで LED2 がピカピカ光ったら成功だと思います.

せっかくなので, 幾つか拡張命令を作ってみました. もっとも活用するためには専用のソフトが必要です. 残念ながらそんなもの作ってませんし作る予定もありません.

PC 側ソフト

Writer509 を使ってください. ただ, 私個人すごくハマッたこととして, PIC に焼きこむ時, 「PROG」ボタンを押す前に 「ERASE」ボタンを押して PIC をブランク状態にすることがあります (PROG の右の v ボタンを使って ERACE が含まれた項を選択する手もあります).

さて, 本ファームは上述の通り通信速度は ff-ff コマンドで 9600〜115200 で変えることができます. しかし, Writer509 では当然ながら対応していません. PIC 自身の通信速度を変える簡単な方法は再焼きこみだと思います. EEPROM の先頭番地に数値 (00〜04) が保存されています.

などの方法を取ってください. このうち HEX ファイルを変える方法ですが, 開くと最後から二行目に 0200BA で終わってる部分があります. これを 0000BC, 0100BB, 0300B9, 0400B8 等と書き換えれば大丈夫なはずです.

一方, いくら PIC 側で通信速度を変えたとしても, Writer509 は 38400bps 固定で作られています. Writer509 の作者であるオレンジ電子工作さんは, ソースを公開して下さっているので, このソースをいじるのが王道だと思います. しかし, コンパイル環境を整え, 大昔習った Pascal の文法を思い出しつつ 手を加えるのは面倒そうというのが本音でした.

そこで安直な方法として, バイナリ書き換えを行うことにしました. 適当なバイナリエディタ (私は strling.exe というのを愛用してます. ) で W509.exe (Ver.2.31) を 開きます. 速度の設定は 79ff4 あたりに 38400 を 16 進で表わした数値 9600 が, ひっくり返って 00,96,00,00 と書かれてます. これを 115200 にしたければ 00,c2,01,00 にするといいでしょう. なお当然ですが, W509.exe のバージョンによって, 番地は異なります.

動作確認

手持ちの PIC で 書き込みができるか, 時間はどの程度かかるか測定してみました. 表中の数値は こんな感じで, 1555 (bsc 0x55,2) と 2aaa (goto 0x2aa) をプログラム空間に埋め込んだ データに対し, 書き込み (Erase, BlankCheck, Program, Verify) の秒数を ストップウォッチで測ったものです (小数点以下は四捨五入). またドライバの Latency Timer は 1 にしています. それから 18 系は持ってないので確認していません.

PIC 9600 19200 38400 57600 115200 備考
16F84A 17 9 8 1024word
16F648A 54 35 26 23 20 4096
16F819 25 10 7 2048
12F629 16 8 7 1024
12F675 16 8 7 1024
12F683 26 10 8 2048

オリジナルの Writer509 が 38400bps ですから, 当初の期待程速くはなりませんでした. 理由は, オリジナルのファームでも, 書き込み時間の大半が書き込み命令後の時間潰しであるため, 通信及び個々の命令を速くしても, 影響が少なかったことだと思います. まぁ同じもの作ってもしょうが無いので, 毛色の変わった Writer509 ということで勘弁してください.

高速化について

本回路は, 従来ソフトウェアで実現していたシリアル通信処理を ハードウェアで実現するようにしたので, PIC 的には随分暇にな りました. その暇時間の間に書き込み処理だのベリファイなど別のことをやらせると, もっと速くなると考えています. もっともそれを実現するためには, PC 側のソフトも作らなくてはなりませんし, ファームも大改造が必要です. もともと 30 秒で焼ける物を, 苦労して例えば 10 秒に縮める価値があるかですが, 残念ながら私にはそれが見出せません.

まぁ技術的に面白そうだとは思うので, 老後の楽しみに取っておきたいのですが, その頃はきっと PIC なんてすたれてると思います. そこで, この楽しみを行う権利は独占しないことにしました. 誰かチャレンジしてみる人はいませんか?

追記

2011 年現在なら本回路じゃなく PIC18F14K50 を使ったライタ の製作を勧めます. 表面実装品が無く, IC も実質 1 個とシンプルです. まぁ最初の pic をどう焼くかという問題は依然としてありますが…


[戻る]