制御用マイコンのRC3端子につながっている10kΩの抵抗R_LVPは、通常は不要です。次の記事「PICマイコンのプログラマ その4」で紹介しているHIDaspxを使って制御用マイコン(PIC18F14K50)にファームウエアを低電圧モードで書き込んだ場合には、この抵抗を接続しておいてください。(2011/3/13追記)
回路図の右上にある3.3Vのレギュレータとスイッチは、このプログラマでPIC18F14K50に書き込む場合に使います。そのときは、スイッチを3.3Vレギュレータの側に切り替えて使ってください。PIC18F14K50以外のマイコンに書き込む場合はスイッチをUSB5Vの側にしておいてください。PIC18F14K50に書き込むことがない場合は、3.3Vのレギュレータと切り替えスイッチは不要です。
制御用マイコンPIC18F14K50の左側、RA3の端子につながっているスイッチは、制御用マイコンPIC18F14K50にファームウエア(制御用プログラム)をブートローダー経由で書き込む場合に使います。普段使用するときはこのスイッチをOFFにしておいて下さい。
書き込み対象のPICマイコンを差し込むソケットには、20ピン以上のものを使って、この回路図のように配線しておくと、8,14,18,20ピンのPICに書き込むことができます。どのPICでも、ソケットの一番上に合わせてPICを差し込みます。ソケットには私はゼロプレッシャー(ZIF)ソケットを使っています。ちょっと高いですが、抜き差しが簡単で使いやすいです。安く作るのなら、耐久性が劣りますが普通のICソケットでもいいと思います。が、平ピンではなく、せめて丸ピンタイプのものを使ったほうが耐久性が良いと思います。
これくらいの規模の回路になると、ミニブレッドボードで組むのはちょっと難しくなります。もう少し大きなブレッドボードを使えば、頑張れば組めると思いますが、ユニバーサル基板を使ってハンダ付けで作るのがよいでしょう。
Writer509CDCの使用部品
マイコン | PIC18F14K50 | 200円 |
セラミック発振子 | 12MHz(コンデンサ内蔵) | 20円 |
トランジスタPNP | 2SA1015 | 100円/20個 |
トランジスタNPN | 2SC1815 | 100円/20個 |
ダイオード | 1N4148 | 100円/50個 |
コンデンサ | 0.1μF | 100円/10個 |
コンデンサ | 0.22μF | 100円/10個 |
コンデンサ | 1μF | 100円/10個 |
コンデンサ | 10μF | 200円/10個 |
抵抗 | 470Ω、10kΩ、100kΩ | 各100円/100個 |
LED | 赤色 | 400円/100個 |
USBコネクタ | Bタイプ・メス | 50円 |
ICソケット | ZIFソケット24ピン 丸ピンICソケット20ピン | 700円 60円 |
レギュレータ3.3V | S-812C33AY-B-G | 100円/8個 |
このプログラマに使っているマイコンPIC18F14K50に書き込むプログラムは前回のWriter509CDCのものと全く同じです。一応、こちらにもリンクをおいておきます。
<Writer509CDC用ファームウエア(Ver.1.0)のダウンロード>
(Ver.1.0にアップしました 2011/9/13)
Ver.1.0の動作確認が不十分なので、旧バージョンもおいておきます。
<Writer509CDC用ファームウエア(Ver.0)のダウンロード>
使い方は前回の「Writer509CDC簡易版」で紹介したEriter509CDCと全く同じです。
PC側の制御ソフトは、一応、私の作った書き込みソフトもあります。拡張PIC16F(PIC12F182、,PIC16F1823など)にも対応する目的で作りました。
◆Windows版書き込みソフト<W509CS>
◆Linux、Mac OSXなどクロスプラットフォーム版<W509Mono>
(2011/2/26追記)
回路図を次の4ケ所修正しました。
・3.3Vレギュレータの入力部に0.1uFのコンデンサを追加しました。
・マイコンの右側のピンRC0にLEDを接続しました。USBを接続したときに点滅します。
・Vppの高電圧を作るチャージポンプ回路のダイオードの1つを赤色LEDに変更しました。電圧を微調整するためです。
・VppをON/OFFするトランジスタの回路の抵抗値を2つとも100kΩにしました。
(2011/3/13追記)
回路図を修正しました。
制御用マイコン(PIC18F14K50)のファームウエアを低電圧モードで書き込んで、ConfigurationのLVPが有効になっている場合には、RC3につながっている赤色の10kΩの抵抗R_LVPを接続してください。それ以外の場合はこの抵抗は不要です。
(2011/3/13追記)
このWriter509CDCを使ってPIC18F14K50に書き込む場合、PC側の書き込み制御ソフトは「でんし研」さんの「Writer509+b版」をご使用ください。オレンジ電子さんのオリジナル版のPC制御ソフトではPIC18F14K50は対応していません。
本文中にも書いていますが、PIC18F14K50に書き込む場合は、電源をUSB5Vではなく、レギュレーターの 3.3Vを使ってください。
また、「FENG3」さんの「PICProg4U 2.3.0」も、Writer509でPIC18F14K50にも対応しているのですが、なぜか通信エラーが出たり、読み込みで間違った値が表示されたりするなどの不具合があります。
この問題はオリジナルのWriter509では発生しないので、私のWriter509CDCのプログラムに何らかのバグがあると思います。原因を究明して、プログラムを修正しようと思っていますが、まだできていません。
(2011/3/19追記)
PICProg4Uでエラーが出る原因がわかりました。が、PICProg4Uでエラーが出ないようにすると、今度はオリジナルのPC側制御ソフトでうまく動作しなくなってしまいます。そういうわけで、PICProg4Uを使いたい方のために、PICProg4U用ファームウエアを作成しました。本文中のダウンロードの中に追加しておきました。
この問題について、PICProg4Uの作者FENG3さんに相談したところ、ありがたいことに、次期バージョンでは私のWriter509CDCでも動くように対応していただけるそうです。次期バージョンが出るまでの間は、ファームウエアを使い分けるという暫定対策でお願いします。
(2011/7/13 追記)
今更ながら、いくつかのデバイスで書き込み動作の確認をしたところ、上に記載の回路ではPIC16F627A(628A他も多分同様)にうまく書き込めないことがわかりました。原因はVppの電圧不足のようです。スペック的に満足しているような気がするのですが。
(その後、さらに調べたところ、Vpp電圧の問題ではないようです。Writer509CDCを2つ持っているのですが、1つでは書き込めて、もう1つの方では書き込めないです。原因は不明です。回路はほぼ同じなんですが。)
このようにVppの電圧不足で書き込めない場合は、回路図の左上の、チャージポンプの1段目のLEDを、普通のダイオードに変更すると、Vpp電圧が1V程度上昇します。ただし、そのように変更した場合は、Vppの上限電圧が低いデバイスでの使用にご注意ください。
それと、もうひとつ、PIC12F510で、デバイスの消去がうまくできません。これもVpp電圧不足を疑ったのですが、上限の13.5Vまで上げてもだめでした。原因不明です。
参考までに、チャージポンプ1段目=LEDの場合と、普通のダイオードの場合の、Vpp電圧の測定値を書いておきます。負荷電流=約1mAの場合の値です。
駆動電圧 = 5V | 駆動電圧 = 3.3V | |
LED(赤色) | 11.2V | 7.9V |
ダイオード(1N4148) | 12.1V | 8.8V |
(2011/9/13追記)
ファームウェアをVer.1.0に更新しました。
ターゲットとへの書き込みクロックを少しだけ高速化しました。
あと、PIC12F510に書き込みができない問題を、不完全ながら修正しました。
このファームと、私の作ったPC側制御ソフトW509CsまたはW509Monoを使うとPIC12F510に書き込み可能です。オリジナルの書き込みソフトW509などでは、だめなようです。
↑最後まで読んでいただいた方はこちらのリンクをクリックしてランキングにご協力下さい。
↓ついでに、下のリアクションもチェックお願いします。
2SC1815をエミッタ接地で使われていますが、
返信削除ベースをvdd5vに繋ぎ、抵抗を通じてエミッタをドライブすると、
ベース接地なので速度が速くなります。
(制御極性は反転します)
apollonono さん
返信削除はじめまして。コメントありがとうございます。お返事が遅くなってすみません。
そうなんですか。実は、そういうトランジスタのアナログ的な応答のことは、あまり詳しくないもので。。。勉強になりました。ご教授頂きありがとうございます。今後ともよろしくお願いします。
松田様
返信削除PICをいじり始めて半年余りで、RCDラーターは一応自作したのですが、USBタイプがほしくなって、勉強をかねて、貴殿作成の「Writer509CDC 全機能版」をまねて作成させて頂きました。(鶏と卵タイターから)ありがとうございました。
書込みは、PIC18F14K50、PIC16F88、PIC16F819 でテストして問題ありませんでした。
今後とも宜しくお願いします。以上
匿名さま
返信削除素晴らしいですね!
記事を書いた本人が言うのもなんですが、まさかこの記事を見て、本当に「鶏と卵」から全工程を作製される方がおられるとは思っていませんでした。
実は、私自身でさえ、この全工程を、このとおり辿ってこのライターを作製したわけではありませんでした。もちろん、各工程毎には検証していたのですが。
本当にできるんですね。実証していただき、本当にありがとうございます。
今後ともよろしくお願いします。
こちらの回路、ターゲットマイコン(PIC)への電源供給をIOピンから直接行っていますが、インサーキットでの書き込みはあまり想定されていないのでしょうか?
返信削除はじめまして。書き込みありがとうございます。
返信削除ご指摘のとおり、インサーキットでの書き込みはあまり想定していません。チップ単体での書き込みを想定しいます。
正直なところ、ICSPの経験はほとんどないのですが、
MCLRが有効ならば、ターゲットのVddは別で用意して、ずっとONの状態にして、この回路からのVdd供給(RC6)は接続しなければ、書き込めるような気がします。電源電圧が一致している前提ですが。
MCLRが無効の場合は、ターゲットのVddを別で用意して、トランジスタでもかましておいて、この回路のVdd制御(RC6)信号でスイッチングしてやれば、いけるように思います。
あいまいな答えですみません。
そうなんですね。
返信削除電源はUSBから供給して、トランジスタでON/OFFするようにしてみます。
(※この間のものづくり市にお邪魔した者です)
電源ラインをトランジスタでスイッチングする場合、PNPのバイポーラか、PchのFETを1つでやろうと思うと、RC6のVddの制御信号の極性が逆(ON=0, OFF=1)の方がいいですよね。
返信削除もし、私のW509CDCのプロジェクトをコンパイルしなおせるのでしたら、「HardwareProfile-CDC-W509.h」の中の
#define mVdd_on() mLat_Vdd=1;
#define mVdd_off() mLat_Vdd=0;
という部分を
#define mVdd_on() mLat_Vdd=0;
#define mVdd_off() mLat_Vdd=1;
とすると、RC6のVddの制御信号の極性が逆になります。
Vppと同様にトランジスタ2個で対応しました。
返信削除ただ、パソコンによっては、動くものと動かないものがあります。(ターゲットはPIC16F886で動作確認しました)
うまく動かないものは、ターゲット電源のON/OFFが問題ではないと思います。それ以前の問題と思われます。パソコン側のソフト(PICWrite509b)を立ち上げた時に「プログラマーの接続を確認してください」となりうまく書き込めません。COMポートとしては認識しているようなのですが、何か要因をご存知ないでしょうか?
ダメなPCでは、いつもダメという症状でしょうか?
返信削除たまにダメという症状でしたら、ソフトの起動と、USB挿抜のタイミングによって、ソフトがうまくポートを開けない場合があるようです。
PC依存ということでしたら、経験がないのでわかりませんが、ポートの状態と、通信の状態を確認してみてください。
まずは、デバイスマネージャで、COMxのプロパティを確認して下さい。正常に動作しているか、認識しているか?
製造元:Microchip Tecnology Inc.
場所:CDC RS-232 Emulation Demo
次に、バイナリーデータを送受信できるシリアル通信ソフト(例えばhttp://www.vector.co.jp/soft/win95/hardware/se369900.html)で、通信状態を見てください。ポートの設定は次のとおりです。
データビット:8
パリティ:No
ストップビット:1
速度は何でも大丈夫と思いますが、9600、19200、38400などで試してください。
送受信設定を、デリミタなしで、バイナリ(Hex)での送受信に設定し、次の送受信を確認して下さい。
送信:00(ゼロ) → 受信:00
続いて、
送信:00 → 受信:00の後、Asciiで「W509 Ver.1.24」と続けて受信
(フォントが見難いですが、0はゼロです。)
この送受信ができれば、Writer509CDCは正常に接続されていることになります。
色々とアドバイスありがとうございます。
返信削除そうですね、特定のPCでダメです。
(DELLのノートPCです)
デバイスマネージャではCOMポートとして認識しています。が、パソコン側のソフト(PICWrite509b)では「プログラマーの接続を確認してください」となり接続できません。シリアル通信テストも行ってみましたが、何も返ってきませんでした。。。
色々とアドバイスありがとうございます。
返信削除動かないのは、特定のPCです。
(DELLのノートPC)
デバイスマネージャでは正常に認識していますが、PICWrite509bでは正しく認識していないようです。シリアル通信ソフトでも試してみましたが、0(ゼロ)を送信しても何も返ってきません。
試しにですが、HUBを間に入れて動かしたら、正常に動きました。
これは、”相性”とかいう問題ですかね。。。?
なるほど、そういうことがあるんですね。貴重な動作報告ありがとうございます。
返信削除始めまして。今まで使っていた秋月のライターでは書けないPIC18F14K50に書く必要があって、こちらにたどり着きました。「鶏と卵問題の対策」の通りの手順を経て(HIDaspxは以前作成してありましたので、それほど手間はかかりませんでした。)PIC18F14K50使用のライターができました。PCからも認識されているので、あとは実際に書き込むだけなのですが、迷っている点がありますのでご教授いただけるとありがたいです。回路図のVPPのコントロールですが、簡易版ではRB7に、全機能版ではRC7に接続されていますが、これはPC上のコントロールソフトから見て、どちらでも良いということなのでしょうか。
返信削除それと、匿名さまの投稿(2011年6月10日)では、PIC18F14K50に書き込めたとのことなのですが、W509Csと同梱のDeviceConfig.datでは、デバイスメニューにPIC18F14K50が出てこないのですが、どう対応したら書き込めるのでしょうか。(オリジナルのWriter509でも同様でした。)
数年も前の記事に対する質問で、大変申し訳ありませんが、よろしくお願いします。
済みません。先ほど投稿した者です。PIC18F14K50に書き込むには、「でんし研」さんの「Writer509+b版」を使うというのを見落としておりました。これからDLしてみます。早とちりしてしまい申し訳ありません。RB7とRC7の件についてのみご教授いただければありがたいです。よろしくお願いします。
返信削除匿名様
返信削除お返事が遅くなり申し訳ございません。
Vppのコントロールピンの件ですが、結論から申しますと、簡易版、全機能版それぞれの回路図どおりの接続で正解です。
PICのファームウエアは共通です。
RC7からはActive-Highの出力、RB7からはその逆相のActive-Lowの出力になっています。
簡易版は回路を簡単にするためにpnpトランジスタ1個でやや無理矢理な駆動をしています。
全機能版の方が、部品点数は増えますが、無難な駆動になっています。
こんな説明でご理解いただけましたでしょうか?
Vppのコントロールピンの件、ありがとうございました。これで安心して書き込むことができると思い、制作したWriter509CDC 全機能版をPCに接続し、W509CsやWriter509+b版でPIC16F84Aに書き込んでみました。無事に書き込めたので、当初の目的の18F14K50にWriter509+b版で書き込んでみました。
返信削除正常終了するのですが、Configが一部おかしいような気がします。
あれこれやってみているのですが、まだうまく行きません。もう少し頑張ってみます。
こちらのサイトのおかげで目的が達成できそうです。ありがとうございました。
匿名様
返信削除Writer509bで18F14K50に書き込んだ場合のConfigのVerifyでエラーがでる件ですが、おそらく書き込みは正しくできていると思います。以前、私もその件を調べて、(記憶が確かではないのですが、)CONFIG2Lのbit5のVREGが正しくマスクされていないのが原因ではないかと思います。「VREG is read-only. VREG = 1 for PIC18F1XK50 devices and VREG = 0 for PIC18LF1XK50 devices.」このことにうまく対応できていないようですが、read-onlyなので、このビットが間違っていても、書き込みが失敗しているわけではありません。一度、書き込んだ後に読みだしてみて、確認してみて下さい。
アドバイスありがとうございます。確かに、Verifyでエラーが出ますが、書き込んだ18F14K50は正常に動作しているようです。念のためにConfigの設定についてきちんと調べてみようと思っていたところでしたので、具体的なご指摘をいただき大変助かりました。ありがとうございます。
返信削除