pic18spx   

 pic18spxはirukaさんが開発された複合機能を持つavr開発用のツールです。
次のような特長を持っています。
 1 AVRライタです。HIDaspxと同じ感覚で使えますが専用のUSB機能を使っていますのでより高速に
   なっています。AVRだけでなく、PIC18 と PIC24の一部 にも書くことができます。
 2 特別な部品を使わず簡単に作ることができしかも安価です。\200のPIC18F14K50と12MHzの水晶とコネクタ
   でほとんど終わりです。
 3 製作が簡単です。
 4 PICライタが無くても HIDaspx があればファームを書き込むことができます。私のようにPIC開発環境を
   持たないものには嬉しい条件です。
 5 ライタと同時にUSB-IO制御機能もあります。これだけでPCからIO制御の実験ができます。
 6 USB-シリアル変換機能を持ちます。しかもライタ機能・IO機能と同時に持つことができ、回路やファームの
   変更無しにそれぞれの機能を切り換えることができます。
 7 ライタ/USB-シリアルのファームはブートローダで書き換えられますから変更が簡単です。
 8 IOモニタ機能も持ちます。

このページでもライタ、シリアル変換の項目で専用機として取り上げていますが、ここでは本来の姿で(切替でこれらの複合機能が使える形で)私の理解した事柄を紹介します。

この記事のために作り直しました。手書きのプリントパターン(というよりランド)で、かつ、チップ部品を使いましたので見た目はスマートになっています。秋月のR 1608サイズも慣れてきました。


分解時にICをはずしやすいように脚は極力パターに付かないようにしています。


回路図
irukaさんの回路図です。ライタコネクタ、ISP(ICSP)コネクタ、UARTコネクタは省略です。



今回製作したものの回路図です。


今回はブートローダ書き込み済みのpicデバイスを使いましたからISP書き込み回路は省略しています。また、個人的理由によりLEDの赤と緑が逆になっています。さらに、各種の抵抗値は手持ちの関係から違う値のものを使用しています。



関係ファイル群の準備
原作者はirukaさんですがソフトウエアの開発は千秋ゼミの報告の方が先を進んでいるようです。原作者のirukaさんには申し訳ないのですが、ここでは改善に努力された千秋ゼミのファイル群を利用する方法を説明します。

千秋ゼミのこのページから登録して、download\YCIT版、avrdude, pic18spx関連の評価用アーカイブ に進んで、avrdude-2011-RC18.zip と pic18spx-0831a.zip をダウンロードします。(2011.11.24 現在)

これを解凍して、その中から次のファイルを探し出して一つのフォルダにコピーします。
loader-18F14K50.hex (このローダを組み込むと以後はライタなしにシリアル通信でアプリを書き込めます。) picspx-classic.exe (irukaさんの原典では PICspx.exe です。 senshuさんは一時 picspx-HIDaspx.exe と
    変名しています。最初に必要なブートローダを書き込むソフトです。)
picboot.exe (picに書き込まれたローダを使ってアプリを書き込むPCのソフトです。)
18F14k50.hex (ライタ/モニタ と usb-シリアル変換 のファームウエアです。)
picmon.exe (IOモニタ機能を実現するPCのソフトです。)
picspx.exe (最重要なソフト。avrに書き込むときにメインとなる書き込みソフトです。
           irukaさんの原名は picspx-gcc.exe です。)
picspx.ini (書き込みソフトの初期値設定ファイルです。)
picwrite.exe (pic18用書き込みソフトです。)
writer24.exe (pic24シリーズの書き込みソフトです。
fuse.txt (ヒューズ設定確認用ファイル。)



ファームウエアの書き込み
まずブートローダを書き込みます。PIC専用ライタを使えば簡単に済みますが、ここではHIDaspxを使う方法を紹介します。
ポートの耐圧が低いので、電源は3.3vを用意します。無ければ乾電池2個の3Vが良いでしょう。また、ライタは出力が3.3Vが望ましいのですが、100Ω程度の抵抗が入っておれば5Vでも良いとのことです。
  コマンドプロンプトを立てて、HIDaspxを接続して、 
  >picspx-classic loader-18F14K50.hex エンター 
  を実行します。
>picspx-classic loader-18F14K50.hex
*Device:PIC18F14K50  DEV_ID:0x4766
Erase ...
Writing   ... 0800
Verify Ok.... 0800
Writing Fuse ...
WARNING: config LVP=OFF -> ON .
CONFIG: 00 32 2a 1e 00 88 05 00 03 c0 03 e0 03 40

>
書き込みとベリファイに計2分強かかります(同じPCでも日によって時間が違うようです)。2台目からはこのPIC18F14K50で作ったライタを使いますと5秒で終わります。HIDaspxを使った長い書き込みはブートローダを1回書くだけです。今回は書き込み済みのデバイスを使用しました。
ブートローダの書き込みが終わるとUSBに接続します。bootloaderが働いているとRC0のLEDがゆっくり点滅します。

続いて、ライタ/IOモニタのファームとシリアル変換ファームを書き込みますが、これは 18F14k50.hex に両方が含まれていますので一つのファイルを書き込めば 0x800 から始まるライタ/IOモニタのファームと と 0x2a00 から始まるusb-シリアル変換のファームが同時に書き込まれます。書き換えるときはloaderモードにしておきます。
>picboot 18F14k50.hex
TARGET DEV_ID=14 VER=1.1(Bootloader)
Erase ...
Writing ... 3f80
Verifying ... 3f80
Verify Ok. 
これでファームウエアの準備は完成です。ハードとファームを含めて pic18spx の完成です。



モードの切替
ソフトウエアでモードの切替ができるのですが、senshuゼミ最新版ではスイッチ操作だけで ライタ/IOモニタ、usb-シリアル変換、loader、の3種のモードを切り換えることができます。

リセットボタンを押すと → しばらくして緑LEDが高速点滅して ライタ/IOモニタモード になります。

リセットボタンを押して、すぐにブートボタンを押すと → 緑と赤LEDが低速で交互に点滅して 
シリアル変換モード になります。

ブートボタンを押したままで、リセットボタンを押すと → loaderモード になります。



使い方
AVRプログラマとして使う → 別項のプログラマ(ライター)を参照してください。
usb-シリアル変換器として使う → 別項のUSB-UARTコンバータ を参照してください。
IOモニタとして使う → ライタ/IOモニタモードで picmon.exe を実行します。 "?"コマンドで使用法が表示されます。現在のところ、必要性を感じていないので不勉強で理解できていません。


その他(メモ)
usb-シリアル変換専用機に設定する:リセット後はEEPROMのff番地を読みデフォルトの"ff"だと 0800 番地のアプリを実行します。ここを"2a"に書き換えるとリセットでシリアル変換アプリが実行されるので専用機になります。 書き換えにはloaderモードでpicmon.exeを使用します。
    >picmon
    TARGET DEV_ID=14 VER=1.1
    PIC> dr ff ff                //ff番地を表示せよ
    0000ff ff ff ff ff ff ff ff ff  ........  //内容はff
    PIC> er ff 2a                //ff番地に2aを書き込む
    PIC> dr ff ff                //確認
    0000ff 2a ff ff ff ff ff ff ff  *.......  //2aが書かれた
    PIC> q
    Bye.
当然の事ながらスイッチ操作だけでライタモードにすることはできません。元に戻すには loaderモードでEEPROMのff番地にffを書き込みます。
    >picmon
    TARGET DEV_ID=14 VER=1.1(Bootloader)
    PIC> dr ff ff
    0000ff 2a ff ff ff ff ff ff ff  *.......
    PIC> er ff ff
    PIC> dr ff ff
    0000ff ff ff ff ff ff ff ff ff  ........
    PIC> q
    Bye.
usb-シリアル変換専用機に設定するの項 おわり

シリアル番号を設定する:デフォルトは 0001 ですが変更ができます。同時に2台を使う場合はシリアル番号の変更が必要です。
シリアル番号は picspx.exe で確認できます。
   >picspx -ph?
   VID=04d8, PID=003c, [AVRetc], [PIC18spx], serial=[0001] (*)
シリアル番号はEEPROMの f0番地からのデータで割り当てられます。
f0番地=数値の4(桁数として決まっている)
f1番地=1桁目のアスキーコード
f2番地=2桁目のアスキーコード
f3番地=3桁目のアスキーコード
f4番地=4桁目のアスキーコード
で、デフォルトは f0〜f4が ff ff ff ff ff であり、シリアル番号は 0001 となっています。
今、シリアル番号を 1234 とするには次のように操作します。

loaderモードにする(bootを押したままreset)。
   >picmon
   TARGET DEV_ID=14 VER=1.1(Bootloader)
   PIC> dr f0 ff                                 // f0から表示せよ
   0000f0 ff ff ff ff ff ff ff ff  ........      // 値はすべてff(デフォルト)
   PIC> er f0 4                 // f0 は必ず 4 と書くこと
   PIC> er f1 31                                 // 1桁目は"1"
   PIC> er f2 32                                 // 2桁目は"2"
   PIC> er f3 33                                 // 3桁目は"3"
   PIC> er f4 34                                 // 4桁目は"4"
   PIC> dr f0 f7                                 // f0から表示せよ
   0000f0 04 31 32 33 34 ff ff ff  .1234...   // シリアル番号は 1234
   PIC> q
   Bye.
デフォルトに戻すには
   >picmon
   TARGET DEV_ID=14 VER=1.1(Bootloader)
   PIC> fr f0 f7 ff                               // f0からf7を ff で満たせ。
   PIC> q
   Bye.
シリアル番号を設定するの項 おわり


おまけ



使ってみて
モードの切替に微妙なタイムラグが必要なようです。windowsがデバイスを切断、接続するために幾分かの時間が必要ですからそのon,offの音を頼りに切り換えるのが良いようです。むやみに切り換えているとwindowsが認識しなくなり再起動が必要になったケースもあります。
他所にも書きましたが使うなら2台制作してどれぞれを専用機としたいところです。プログラマとしては有効なものと考えますし、シリアル変換器としては安価なデバイスではないでしょうか。






















工事中 inserted by FC2 system