Mobile PIC Writer

last up date 2004/05/26

Mobile PIC Writer 5 へ

旧版 Mobile PIC Writer II 誕生 (MPW2) (MPW2)

MPW2 (MPWの高速化バージョン)

MPW-II
外観 (奥に見えるのがPIC16F628A)

PIC16F628Aに何回も書き込みをしていると『遅い』と思うようになり高速化を考え始めました。 単純に高速化するには、動作クロックを上げれば良いだけです。 4MHzから20MHzにするだけで1/5に短縮します。 ただPIC16F628Aのポート数が足りないのです。

MPW/MPW2のコンセプトとして

  • 小型であること
  • 安く作れること
  • 秋葉原で入手可能な部品で有ること

仕事で使う部品なら簡単に小型化でき性能も十分出ます。 量産するなら価格も安くできるのですが、秋葉原で入手困難な部品が多いです。

改版内容

クロック部

クロックをあげる事が、高速化の鍵を握っています。 水晶振動子の20MHzを使うのは、簡単ですが安くはなりません。 そこで前から目を付けていたUSBN9604のClockOutを使い16MHzの外部入力として使いました。 水晶振動子に比べ部品が掛からずポートも1本減るだけです。 ですが、上手くクロックの切り替えができるか問題でした。 PIC自身で、PICのクロックを変更することに成るからです。

USBN9604の電源投入時は、4MHzのクロック出力です。 USBN9604のレジスタを変更して16MHzにします。。 プログラムを作ってみると案外あっさり切り替わってしまいました。 念のため切り替え後ウォッチッドックタイマによるリセットを掛けました。 約1/4の時間でPICからプログラムを読み出せることになりました。 書き込みは、ウェイト等が必要なので余り変わりません。

DC-DC部

前回同様にPICで作っています。 DC-DC用のICも秋葉原で入手可能ですが、価格と大きさで諦めました。 ただし色々改良しています。 高速化に伴いDC-DCの制御周波数が、2kHzから125kHzに上がっています。

これにより

  • PWM駆動のみの制御する。(PFMを使わない)
  • コイルが、47uHから470uHへ変更する。

となります。

また割り込み回数を減らす為にタイマ0を使い約125mS置きに電圧を監視します。

  • 検出電圧が目標の電圧より高い場合は、パルス幅を狭めて電圧を下げます。
  • 検出電圧が目標の電圧より低く、パルス幅が最大値より小さい場合は、パルス幅を広げて電圧を上げます。
  • 2項でパルス幅が最大値より大きく場合、回路に不具合があるとみなしてDC-DCを止めます。

コンパレータの割り込みを使って制御することも可能ですが、電圧範囲を検出する為に2つの検出電圧が必要なので上記方法を取っています。

ゼロプレッシャーソケット使用

制御信号がクロック入力に使われたため、最初からソケットを使う事にしました。 制御用のトランジスタがかなり増えるのですが何とかなります。(なりました。)

回路図

MPWのICSP部とソケット部で別れていましたが..MPW2は、くっついています。 これは、同一基板に実装することが目的です。ソケット部分がなくても動作します。

回路図のダウンロード : mpw2circuit.pdf

部品表

ロケーション 部品名 メーカ/型格 員数 価格 備考
1 U1 PIC16F628A マイクロチップ 1 250円~450円 PIC16F648Aも可
2 U2 USBN9604-28M ナショナルセミコンダクタ 1 600円~800円 USBN9603-28Mも可
3 Q1~Q6 2SA1015-Y 東芝 6 10円~20円  
4 Q7~Q13 2SC1815-Y 東芝 7 10円~20円  
5 Q14 2SJ439 東芝 1 90円~150円 2SJ377も可
6 Q15 2SK2961 東芝 1 50円~80円 2SK2962も可
7 LED1 PowerLED φ3mm - 10mA 1 30円~100円 緑とか青
8 LED2 BusyLED φ3mm - 10mA 1 30円~100円 黄や橙
9 D1 11DQ04 日本インター 1 30円~50円  
10 D2 1SS133 ローム 1 10円~30円 1S1588も可
11 PS1 RLD60P050X リセップタクルヒューズ500mA 用 1 50円~100円
12 PS2 RLD60P010X リセップタクルヒューズ100mA 用 1 50円~100円
13 L1 インダクタ 470uH 130mA 1 50円~100円
14 R1~R20 カーボン抵抗 100kΩ 1/8W 20 10円
15 R21~R24 カーボン抵抗 4.7kΩ 1/8W 4 10円
16 R25~R28 カーボン抵抗 27kΩ 1/8W 4 10円
17 R29~R32 カーボン抵抗 1.5kΩ 1/8W 4 10円
18 R33,R34 カーボン抵抗 820Ω 1/8W 2 10円
19 R35~R38 カーボン抵抗 22Ω 1/8W 4 10円
20 R39,R40 カーボン抵抗 1kΩ 1/8W 2 10円
21 R41,R42 カーボン抵抗 10Ω 1/8W 2 10円
22 R43 カーボン抵抗 1MΩ 1/8W 1 10円
23 R44 カーボン抵抗 220kΩ 1/8W 1 10円
24 R45 カーボン抵抗 10kΩ 1/8W 1 10円
25 C1~C6 積層セラミック 0.1uF 50V 6 20円
26 C7 アルミ電解 1uF 16V 1 40円
27 C8,C9 セラミック 15pF 50V 2 20円
28 C10 アルミ電解 100uF 16V 1 50円~80円
29 C11 アルミ電解 47uF 25V 1 50円~80円
30 C12 アルミ電解 10uF 25V 1 50円~80円
31 C13 セラミック 2200pF 25V 1 50円~80円
32 Y1 水晶振動子 24MHz 1 100円~200円
33 J1 コネクタ USB-B 1 100円~200円
34 SK1 ゼロプレッシーソケット 40Pin 1 1200円

ソフトウェア

PIC プログラム

今回配布するhexファイルは、PIC16F628Aでアセンブルしてありますが..多分PIC16F628やPIC16F648Aでも動作します。 機能的には、まだ足りない部分もあります。(PIC18系とか)ただしPIC16系用では十分かな?

MPLAB IDE (Ver6.x) 用のソースファイルが入っています。 リンカを使ったプログラム構成になっているのでリンカファイルも登録して使います。 セグメント使ったプログラムは少ないのでわかりずらいかもしれませんが。

ソースファイル へ登録

  • MPW.asm (一番最初に登録してください。)
  • DCDC_c.asm
  • MicroWire.asm
  • PicPROG.asm
  • PicUSB.asm
  • WaitControl.asm

ヘッダファイル へ登録

  • DCDC_c.h
  • MicroWire.h
  • PicPROG.h
  • PicUSB.asm
  • USB9604.asm
  • WaitControl.asm

リンカファイル へ登録

  • 16f628.lkr

プログラムにバグがありました。 いやお恥ずかしい間違えで..割り込みの抜け出し時にPCLACHを戻すのですが、関係ない値を書き戻していました。 よく動いていたものだ。

ダウンロード[mpw_picE2.lzh]

Windows プログラム

一応形には成っています。少し使い勝手が悪いかも。しかも前回と同じくまともな説明書が付きません。

プログラムのPICへの書き込み/PICからの読み出し/ベリファイ位はできます。 またデバイスIDを検査したりします。設定はあちこちクリックしてみてください。

2004/08/20 PIC16F88 の書き込み時にコンフィグのエラーになるバグがありました。 Ver1.0.1で修正しました。

このソフトだけでは、USB部分が動作しません。 柏野さんの uusbd.dll/uusbd.sys が必要になります。 ガジマルの森からuusbdv10.zipをダウンロードしてください。

ダウンロード[MPW101.lzh]

ドライバは、何とか作りたいと思って居るのでその内にできるかも?

その他

写真

上段の写真ですが.. 合成写真とかではなく実際に作ったMPW2の基板です。 トランジスタのフットパターンの間違えがある物の動作はしています。 前のMPWの基板と同じく名刺サイズ(90×55)の大きさに40pinのゼロプレッシーソケットを入れてしまいました。 その為空き領域が無くなっています。 余分に基板作っているので5枚ほど余って足りします。 間違え修正した基板を起こそうかな。

サポートしているデバイス

個人的に使えるPIC16系のフラッシュタイプの物をサポートしています。 ワンタイムタイプや窓付きタイプも使えないことはないのですが.. 現状サポートしていません。

  • PIC12F629
  • PIC12F675 *
  • PIC16F84
  • PIC16F84A *
  • PIC16F627
  • PIC16F627A
  • PIC16F628 *
  • PIC16F628A *
  • PIC16F648A *
  • PIC16F818
  • PIC16F819 *
  • PIC16F873 *
  • PIC16F873A *
  • PIC16F874
  • PIC16F874A
  • PIC16F876
  • PIC16F876A
  • PIC16F877
  • PIC16F877A *
  • PIC16F87
  • PIC16F88 *

* はテストして動作が確認されているデバイス。

USBのベンダID

個人的に取るのは、難しいですね。 本当に誰かプロダクトIDを分けて頂けないでしょうか? 悩みの種です。