
PIC Writerの製作未検証や実験や+αなどのページ■ PIC Writer509のDC-DCコンバーター部について ■ 2005/08/19
プログラマー部がショボイわりに、DC-DCコンバータ部がゴッツくてアンバランスなため、
別の昇圧回路を考えてみた。![]() 元の昇圧回路は、13V/50〜100mAくらい取れるような回路だったけど、 フラッシュタイプのPICのみの書込みであれば 1mAもあれば十分のようだ。 実際には、トランジスタでのスイッチや、LEDなどで消費する電流があるため20mAくらいほしいところ。 使用する部品も、安くて入手性のよい部品がいい。 タイマーICで有名な555(C-MOSのもの)を使ってみた。 使用するインダクターにもよるが5mAくらいなら取れそうだ。 早速、以前に作ったPIC Writer 509のDC-DCコンバータ部を全部はずしてしまった。 そして、この昇圧回路を余っていた基板の切れ端に組んでみた。 ![]() 昇圧回路がないと、なんとも貧粗なプログラマーだ。その左にあるのが3端子(6端子?)昇圧モジュール。 黄緑色の抵抗のように見えるのが470μHのマイクロインダクター。 それ以外の部品は電子工作をやったこととがある人にとっては、定番中の定番ばかり。 やはり、5mAが限度か。VppにはいっているLEDもはずした方がよさそうだ。 マイクロインダクターの直流抵抗が20Ωくらいあるのも原因の一つだが、やはり555の出力(Discharge端子)がそれほど電流が取れないのだろう。 ![]() 取り付けるとこんな感じ。 何とか動くみたい。 消費電流を測ってみた。(16F84Aの場合) アイドル時:26.7mA、 書込みや読み出しなどのアクセス時:33.0mA 内訳は、 電源表示のLED:約5mA、 アクセス表示のLED:約5mA、 昇圧回路:約20mA、 PICその他:1〜2mA やれやれ…、ほとんどが昇圧回路の電流でした。それもそのはず、… 昇圧回路の定電圧部分はツェナーで強制的に電圧を押さえ込んでいる回路になっているためです。 そのために負荷電流が一定範囲なら常に同じ電流を消費しているのです。 トランジスタ1本追加してやれば、負荷電流に応じて消費電流を減らすことができるけど、まぁいいか。 注意として、トランジスタでスイッチしたVppやVddラインのLEDを省略する場合、 トランジスタが正常にON/OFFしているか確認し、 トランジスタが完全にOFFできていないようなら8.2Vのツェナー電圧を変更してみるとか、 LEDの代わりに20k〜100kくらいの 抵抗を入れる。 ここまでくると、40Pinのゼロプレッシャーソケットの付いたプログラマーを作ってみたくなる。 ![]() ![]() 無理やり25x15穴の基板にレイアウトしてみたけど、ジャンパー多いし、大丈夫か? やっぱり無理だ。ゼロプレッシャーソケットって意外と大きいからもう一回り大きい基板でないと載らない。 Programmerのメインページに16F57に対応するように改造した40Pinゼロプレッシャーソケットの回路を載せてみた。
DC-DCコンバーターの回路はこれら以外にも多くの回路が考えられるし、専用のICも多数ある。 NJM2360Aのオリジナルと思われるモトローラ(現ONセミコンダクター)のMC34063は、ダイソーなどで\300位で売られている 車のシガーソケット(12V)から携帯充電用に電圧を(約5.5V)落とすアダプターにもよく使われている。 いくつかのサイトで分解・解析した様子が書かれているし、ダイオードやコイル(値は不明)もここから取ることができるのでこれを改造してもいいかもしれない。 他にはテキサスインスツルメントのTL497AやTL499Aなどもある。 TL499Aは8ピンのIC内にショットキーダイオードも内蔵しているので、NJM2360より回路が簡単になる。 MAXIMからもいくつものICが出ていてMAX630などは同じような感じで使用できそうである。 MAX662は3段のチャージポンプに12Vの安定化回路が内蔵されているので、コイルも不要でコンデンサ2個の外付けで動作する。 電圧が12V固定なので13V必要とするPICにはちょっと不安かもしれないが、12Vで書込みができるデバイスも幾つもあるので 試してみる価値は十分にあると思うし、もしかしたら少しくらいなら電圧を上げることができるかもしれない。 ■ 失われたキャリブレーションデータを求めて ■
2005/09/26
いろいろなPICの中で内部CR発振回路を内蔵しているものの中には、なるべく正確な周波数で発振できるように 周波数の補正値(キャリブレーションデータ)を持っているものがある。 内部CR発振回路を持っているデバイスでも、キャリブレーションデータを持っていないものもある。 ほとんどのPICプログラマーではこのキャリブレーションデータが失われないように、プログラムの書込み時や デバイスの消去時に、一旦キャリブレーションデータを読み出し、デバイスの消去後キャリブレーションデータを 書き戻すような処理を行っている。 従って、通常キャリブレーションデータが失われることは無いはずだが、操作ミスやプログラマーの不調などで キャリブレーションデータを失ってしまうことも絶対にないとは言い切れない。 万一、キャリブレーションデータを失ってしまった場合はどうしたらいいだろう…? あらかじめ読み出しておいてどこかにメモしてあった場合には、そのデータを書き戻せばいいのだが、 多くのPICに書き込んだり慣れてくると、読み出してメモするのも面倒になってやらなくなってしまう。 失われたキャリブレーションデータを復元することはそんなに難しいことではない。 PIC12F629/675などでは、ConfigurationWordを適切に設定することによって内部発振周波数の1/4の周波数(1MHz)をClockOutに出力することができる 従って、周波数カウンタでこれを計測し、1MHzに近くなるようにキャリブレーションデータを変更しながら計測/書込みを繰り返せばよい。 ところが、ソフトウェアをメインで行っている人などは周波数カウンタを持っていない人が多く、また、計測/書込みを繰り返すのも手間がかかる。 滅多に行うことではないが、簡単な操作で行うことができる方がいいのでこんなプログラムを書いてみた。 ・周波数カウンタを持っていても持っていなくても使用できる。 ・周波数カウンタを持っていない場合は、パソコンのシリアルインターフェースにデータを送って、 エラーの有無で周波数を推測する。 ・キャリブレーションデータは、パソコンのターミナルソフトに表示される。 ・スイッチ入力でキャリブレーションデータをUp/Downして周波数の変化を見ることができる。
■ Writer509開発時の様子など… ■
2005/09/29
Writer509を作る前にもPICを使っていくつか回路を作ってはいたけれど、いきなり完成形を目指して作り出してもうまくいくはずもなく、 何か簡単なテスト回路でも作って少しずつ動かした方がよさそうだと考えた。 それまで使っていた「AKI−PICプログラマー Ver.3」を眺めていたら、ゼロプレッシャーソケットが2個もついてるし、 電源回路もついてるし、シリアルインターフェースもついてるし…ちょっとこれを使ってやろうと思った。 秋月のPICプログラマーは28ピンのPICで制御されているが、それには理由があって、「古いタイプのPICには、書込みコマンドやデータをパラレルで入力するものがある」ためである。 趣味ではそのような古いタイプのPICは使わないだろうと、さっぱりと切り捨てることにした。 これからたくさん出てくるであろうPIC18シリーズも書き込みコマンドがちょっと違うし、これも除外した。 あまり手を広げても失敗しそうな感じがしていたが、よく使われているPIC12FシリーズとPIC16Fシリーズぐらいならいいだろうということにした。 コントローラに使うPICは、今までよく使ってきたPIC12C509A(またはそのフラッシュタイプの12F509)が使えたらいいなぁと思って考えてみると、 PIC自体の電源(Vdd,Vss)に2本。 パソコンと通信するシリアルインターフェース(TxD,RxD)に2本。 ターゲットデバイスにコマンドやデータを送るライン(PG-Clock,PG-Data)に2本。 ターゲットの電源を制御するライン(Vdd,Vpp)に2本。 で、まったく余裕がないが8ピンのPIC12C509A(後にPIC12F509、PIC12F675へと変わる)で決定した。
■ Writer509用 通信テストプログラム ■
2006/02/16
上で紹介したプログラムは、Writer509のPC用ソフトを自分で作成したり、アレンジしたり、いろいろいじり回したい人のためのプログラムであったため、 普通にPICに書き込むためにWriter509を作製して使用する人には不要で使いずらいものになっている。 ここで紹介するテストプログラムは、Writer509を作製したが正常に動作しない場合、問題箇所の切り分けに使用することができる。 主に、PCとWriter509間でデータを送受信して通信の正常性を検証するのに用いることができる。
・テストカウントに設定した値(1000〜100000)とOKのカウントが異なる場合も通信エラーが発生している可能性がある。 ![]() [SmallBlock]では青枠内の部分がテストできる。 NGカウントが0でない場合は以下の項目をチェックするとよい。 ・バイパスコンデンサの0.1μはPICの近くに配線されているか。 ・PIC12F508/509(または12F629/675)に書き込まれているOSC補正値は正常か。 ・D1,D2は付いているか。 (同一基板上でUSB-シリアル変換IC等が接続されている場合は不要) ・R1,R2の値が極端に異なっていないか。 (多少の違いはOK。同一基板上でUSB-シリアル変換IC等が接続されている場合は不要) ・R9のプルアップ/プルダウンは間違っていないか。 (同一基板上でUSB-シリアル変換IC等が接続されている場合は不要もしくはプルアップにする) ・PCと接続するケーブルに断線・接触不良などがないか。 ・USB-シリアル変換ケーブル・ICなどを使用している場合は、ドライバーソフトが正常にインストールされているか。 【「Writer509通信テスト」プログラムのダウンロード】 【補足】([LargeBlock]でのエラーについて) 一般的にいって、プログラマーの処理能力に比べるとPCの処理能力は格段に大きいので、PCからプログラマーへの データやコマンド転送は十分注意しながら行う必要があるが、プログラマーからPCへのデータ転送は連続して送信しても PCがデータを取りこぼすことはないはずであるという考えでいた。 現に、Writer509ではPCからプログラマーへは1Byteずつ送信し、プログラマーからPCへは必要なだけ連続して 送信するように作られているが今まで特に問題は出ていなかった。 Writer509が多くの人に利用されるようになると、想定していた以外の環境で使用する人も出てきた。 そこで、プログラマーからPCへのデータも小さいブロックで転送するようにしてみた。 Writer509の実行ファイル [W509.exe] があるフォルダに作成される [W509.ini] ファイルに以下の行を追加する。
尚、この設定を行うと転送速度がわずかに遅くなるので、今までの状態で特に問題がない場合は行わないほうがいい。 また、基本的に不安定な通信を補うものではないため、上記の[SmallBlock]での通信テストでNGカウントが出る場合は この設定を行っても改善されることはない。 ([SmallBlock]での通信テストでNGカウントが"0"であるにもかかわらず、[LargeBlock]で通信エラーが起きている 場合のみ有効) ■ Writer509とRTS、DTRの関係 ■
2006/04/15
Writer509では基本的にシリアルインターフェースのうち、TxdとRxdしか使用しない。 回路図上では、RTS-CTS、DTR-DSRが接続されているがこれは従来からの慣習でPC-9801等で使用されているi8251ではCTSがOFF(又は未接続)では 送信できないという仕様などからこのように接続されているものがあったが、 現在のPCではWindowsでの使用においてハンドシェークを未使用に設定しておくことによってこれらを自由に使用できる。 バージョン2.21からINIファイルに以下の行を追加することによって、RTSとDTRの2つの制御線を自由に使用することができるようになる。
Optionタブに以下のように表示され、RTSとDTRをON/OFFできるようになる。 ![]() Writer509の回路の作り方にもよる(昇圧回路やLEDなど)が、消費電流を減らした回路にすることによっては Writer509の電源に利用することができるかもしれない。 なお、この機能を利用するとWriter509の起動にやや時間がかかるので、使用しない場合はINIファイルへの追加を行わないほうがよい。 また、シリアルインターフェースから取り出せる電流はPCやUSB-シリアル変換ケーブルによるところが大きいのであくまでも 自己責任の範囲で利用すること。 ■ Write509に「FTDI」のUSB-シリアル変換チップを使う場合 ■
2006/12/21
Writer509のプロトコルは、通常のシリアルインターフェースにとってはどうってことない構造になっているが、 USB-シリアル変換デバイスにとってはちょっと酷のような感じがしないでもない。 それは、USBがデータを単なるバイト列としてでなく、パケットというデータの塊として送受信しているためである。 実際、Writer509の動作を見ても、[READ](読み出し)や[BLANK?](ブランクチェック)、[Verify](べりファイチェック)のように、 Writer509からPCへまとまったデータを受信する場合は、どんなインターフェースを使用してもそれほど大きな速度変化はない。 ところが、[PROG.](書込み)のように短いデータ(1〜2Byte)を、送受信頻繁に切り替えながら通信するとインターフェースによって 速度が大きく変わってくる。 それでもFTDI以外のCP2102やPL2303などのデバイスは、(ハードかドライバーソフトかは不明だが)シリアルデータをうまい事USBのプロトコルに乗せているようで、 標準のシリアルインターフェースとあまり変わらない速度で通信できている。 次の表は、あるテスト機(PC)でテストプログラムを使っていろいろなインターフェースを比較したものである。
()内は対策後の測定時間。 それ以外はドライバーをインストールしたままのデフォルトの状態。 掲示板を通して多くの人にテストをしてもらったりアドバイスをもらった結果と、いくつか実験した結果をまとめると次のような対策が有効ではないかと思われる。 この対策をすることによって、他のインターフェースと同等とまではいかなくても、かなり改善されることが測定結果からわかる。 ・Windows 2000/XPの場合 デバイスマネージャから該当するCOMポートのプロパティを開き、[Latency Timer] を最小にセットする。
・Windows 98/98SE/Meの場合 送受信データがある場合に制御線を変化させてデバイスに通知する。
■ Writer509用の最初の1個のファームウェアを書き込む方法 ■
2007/07/01
Writer509のようにファームウェアを必要としたPICライターでは、PICライターを作成する前にPICにファームウェアを書込む必要がある。 世間ではこれを「鶏と卵問題」などと言って、 PICライターを作るにはファームウェアが必要 -> ファームウェアを書き込むにはPICライターが必要 -> … と、なって何もない状況では部品を買ってきて組み立てただけでは動かすことができない。 既に別のPICライターを所持していて2台目の作製の場合や、周囲にPICライターを借りられる環境がある人はいいが、そうでない人のために簡単な書き込み器を作ってみた。 この回路は、「でんし研さん」のサイトに載っているAVR書き込みのアイデアや、「エレキジャック」に載っている PICデュアルライターにも使われている「RS-CR方式」を応用したもので、簡単な回路で「最初の1個のファームウェア」を書込むことができる。 ただし、この回路には次のようなデメリットもあるのでそのことをよく理解したうえで作製/使用してほしい。
つづく・・・
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||