PIC18spx
1 PIC18spx全般
2 PIC18spx再考
3 PIC18spx2550
4 PIC18F14K50 LVP回復
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台制作してどれぞれを専用機としたいところです。プログラマとしては有効なものと考えますし、シリアル変換器としては安価なデバイスではないでしょうか。
2 PIC18spx再考 2018.05.24
ふと思い出してプログラム専用機をつないでみました。何気なくプログラムを書き込んでみましたが、その速さに少々驚きました。USBカードを新設した影響かもしれません。「これで使える!」と思って、少し手を加えました。
電源にダイオードを入れて5Vから0.7Vほど下げてあったのですが、3.3Vの対応を考えて出力端子の抵抗を120Ωから470Ωに変更しました。しかしオシロスコープで見ると4V程度出ているようです。大丈夫とは思いましたが、念の為電源のダイオードを赤LEDに変更しました。これで電源が3.2V程度になります。出力はオシロスコープで3V強のようです。
mega328pのブレッドボードにつないでプログラムの書込みをしてみると5V、3.3V電源ともに正常に書き込めました。
金属片のリセットボタンを操作が確実な正式スイッチに変更しました。また、USBコネクタも正常品に変えました。
この作品は、ライター専用に作っていて、シリアル変換の機能はありません。したがってBOOTスイッチも付けていません。どのようなファームを書き込んだのかも覚えていない状態です。
起動すると(リセットすると)小さなLEDが高速で点滅します。しばらくして点灯、そして消灯となり短時間後に点滅に戻ります。デバイスマネージャーで見ると、ヒューマンインターフェイスデバイスのHID準拠ベンダー定義デバイスと登録されますが、7、8秒ごとに接続が一瞬切れます。LEDの点滅の間だけが接続されるようです。原因はわかりません。
切れている間は書込みができないのですが、avrdude-GUIでAVRのデバイスreadをして、読めればすぐに書込みボタンで書き込めます。少し不便ですが辛抱しましょう。この現象は他の2台でも起こりますのでファームウエアの仕様だと思います。以前は気が付かなかったのでwin10の関係かもしれません。senshuゼミがなくなったので私にはどうにもできません。
hid18spxの新しい情報がなくなりましたが、手持ちのファイルで、時間を見つけて、もう一度確認したいと思っています。
(続き)
回路図は次のとおりです。
bootスイッチは付けていませんが、ブートローダー書込みコネクタの、使用していないVcc端子を利用しているので、 2番端子と6番GND端子を短絡すればbootスイッチを押した状態になります。なお、上記写真の上が1番端子で下側が6番GND端子です。
それから、デバイスの接続断が解消しました。手元にあるファイル(最新のものと思います)でファームを書き換えたところ問題が解決しました。(他の固体も同様になりました)
pic18spx-20140320フォルダのbinフォルダを開き、(Shift-右クリックで)ここにコマンドプロンプトを開き bootスイッチONの状態でリセットするとLEDが緩やかに点滅しブートローダー起動状態になります。 ここで、
>picboot 18F14k50.hex
を実行するとファームが書き込まれました。
これで晴れて実用になりそうです。
18F2550版について
18F2550を使ったものも過去に作ってありました。これはライター専用機です。
回路図はもちろんのこと、ファームについても何も記録に残していませんでした。起動してみるとライターとしては働くのですが、デバイスが周期的に切断されるのは18F14K50版と変わりません。なんとできないものかと考えましたが、なかなかうまくゆきませんでした。
senshuゼミのファイルにはありません。irukaさんのサイトを探してやっと見つけました。
http://hp.vector.co.jp/authors/VA000177/html/pic18spx.htmlの pic18spx-2014-0317.zip です。
これを解凍すると picmon-18F2550.hex と w.bat があります。しかし、このフォルダには picboot.exe がありませんのでこのバッチファイルは走りません。18F14K50のファイルから picboot.exeをこちらのフォルダにコピーしました。
このフォルダでコマンドプロンプトを開いて w.bat を実行したところ、AVRプログラマとして作動しました。デバイスの中断も修復されています。もちろん、bootスイッチONでリセットして、bootモードで書き込んでいます。
irukaさんのページに回路図がありましたのでコピーをいただきました。
■ 配線 PIC18F2550
(PICライターへの接続はファームの更新が不要な場合は省略できます)
+----------------------------- PIC書き込み器より
| ___ ___
MCLR [1 |__| 28] RB7/PGD <---- PIC書き込み器より
RA0 [2 27] RB6/PGC <---- PIC書き込み器より
RA1 [3 26] RB5/PGM <---- PIC書き込み器より(LVP書き込みのみ)
RA2 [4 25] RB4
RA3 [5 24] RB3
RA4 [6 23] RB2 |書き込み側AVR-chip|
RA5 [7 22] RB1 ------->| SCK |
Xtal Vss [8 21] RB0 ------->| MISO |
+----------> OSC1 [9 20] Vdd | |
+---|□|-+-> OSC2 [10 19] Vss | |
| 20MHz | RC0 [11 18] RC7 ------->| MOSI |
15pF 15pF RC1 [12 17] RC6 ------->| RESET |
| | RC2 [13 16] RC5/D+ --------------------------> USB D+
| | +Vusb [14 15] RC4/D- --------------------------> USB D-
GND GND | ~~~~~~~~~~
|
0.3uF
|
GND
これで2550を無駄にしなくてすみます。やがて使うチャンスが来るかもしれません。
(追記 2018.05.27)
18F14K50 と 18F2550 では書き込み方が違います。
14K50はsenshuさんの修正で、\pic18spx-20140320\bin の中だけで、
>picwrite.exe loader-18F14K50.hex エンター でブートローダーを書き込みます。
電源は3.3Vに注意します。USBは接続しません。
電源を外して、USBを接続して、boot sw ON のままリセットしてブートローダーモードにします。
>picboot.exe 18F14K50.hex エンター でライター/シリアル変換プログラムを書き込みます。
リセットでライターモードになります。場合によってはUSBをつなぎ直します。
2550はirukaさんのファイルとsenshuさんのファイルの両方を使います。
まず、\pic18spx-20140320\binの中で、
>picwrite.exe loader-18F2550.hex エンター でブートローダーを書き込みます。
電源は3.3Vに注意します。USBは接続しません。
電源を外して、USBを接続して、boot sw ON のままリセットしてブートローダーモードにします。
ディレクトリを \pic18spx-2014-0317\firmware に移して、
ここに \pic18spx-20140320\bin の picboot.exe をコピーします。
このフォルダにある w.bat の実行で、ライタープログラムを書き込みます。
(>picboot.exe 18F2550.hex エンターではライターが実行できません。注意!)
リセットでライターモードになります。場合によってはUSBをつなぎ直します。
いずれも、適当なフォルダでコマンドプロンプトを開く必要があります。
3 PIC18spx2550 2018.05.31
手元に PIC18F2550 と 20MHz水晶がありましたので、常用のAVRライターPIC18spxを作りました。
作るに先立って、irukaさんのサイトを探してみました。その結果、
http://hp.vector.co.jp/authors/VA000177/html/PICspx.html と
https://github.com/iruka-/PIC18F_BOOTLOADERのダウンロードで得られる PIC18F_BOOTLOADER-master.zip に情報がありました。なお、senshuさんの改良版との関係で、制作時間の差・ファイル名の変更(混乱)がありますが、よくわかりません。要注意です。
また、これらを総合して、以前の(上記の)PIC18Fspx2550 の回路図がわかりました。
今回のファームウエア書き込みは、1台目のPIC18Fspx2550 がboot loader書き込み端子を持っていることと、2550が直付けでなくICソケット使用であったため、1台目を利用して行いました。HIDaspxでなく、書き込みが簡単なPIC18spx(14K50)を使って、1台目2550に差し込んだチップに書いています。手順は上記の通り次のようにしました。
2550はirukaさんのファイルとsenshuさんのファイルの両方を使います。
まず、\pic18spx-20140320\binの中で、
>picwrite.exe loader-18F2550.hex エンター でブートローダーを書き込みます。
電源は3.3Vに注意します。USBは接続しません。
電源を外して、USBを接続して、boot sw ON のままリセットしてブートローダーモードにします。
ディレクトリを \pic18spx-2014-0317\firmware に移して、
ここに \pic18spx-20140320\bin の picboot.exe をコピーします。
このフォルダにある w.bat の実行で、ライタープログラムを書き込みます。
(>picboot.exe 18F2550.hex エンターではライターが実行できません。注意!)
リセットでライターモードになります。場合によってはUSBをつなぎ直します。
いずれも、適当なフォルダでコマンドプロンプトを開く必要があります。
|
irukaさんの GitHub のPIC18F_BOOTLOADER-master.zipファイルだけで pic18spx 2550 を構成する方法を調べました。
HIDaspxで boot loader を書くこと以外はファイルが揃っています。
次のフォルダーにあるファイルを一つのフォルダ「ファーム書き込み」にコピーでまとめました。
picwriter→picwrite.exe
pic18boot→firmware→hexfiles→loader-18F2550.hex
picmon→picboot.exe
firmware→picmon-18F2550.hex
firmware→w.bat
このフォルダでコマンドプロンプトを開き、
3.3V電源につなぎ、PIC18spxで >picwrite loader-18F2550.hex エンター
(一応、boot sw で切り替えて)
ライターを外して、本体をUSBにつなぎ、 w エンター でファームが書き込めました。
この試作機で上記の回路図を変更した点は次のとおりです。
水晶発振子の22pコンデンサは省略しています。
boot sw の代わりにショートピンをつけました。
通電時のパイロットランプ(青LED)をつけました。
RC2のLEDは省略しています。
reset、bootのプルアップ抵抗は 4k7 です。
3.3Vターゲット対応のため電源にダイオードを入れました(0.5V?)。
AVRへの書き込み端子に 470Ω を入れました。(3.3V対策)
本体への書き込み端子はつけていません。
14K50 とともに使っていくことにしましょう。
4 PIC18F14K50 LVP回復 2018.06.01
初期の頃、18F14K50のLVP(低電圧 プログラム)ビットを 0 にしてしまい、プログラムができなくなりました。
低電圧プログラムでは LVP=1(ON)にする必要があります。その時、FENG3さんのHPで解決策を知りました。以前にメモをしましたが、時間とともに忘れていました。大事なことですから、ここにコピーを置かせていただきます。
2009/8/24
LVPビット
PIC18F14K50 だけでなく、低電圧(単電源)書き込み可能なPICの低電圧書き込みビット(LVP)は工場出荷時とデバイス消去時は‘1’、つまり低電圧書き込み用のPGM端子はPGM端子として設定されています。これをI/Oピンとして使用するためには、LVPビットを‘0’とします。
LVPビットが‘0’であっても高電圧書き込みはいつでも可能(注:古い機種ではPGM端子をプルダウンしておかないと高電圧書き込みと低電圧書き込みが衝突することがある)ですが、いったん‘0’に設定したLVPビットを‘1’に戻すには、高電圧書き込みに対応したPICライタでデバイスを消去するしか方法はありません。
低電圧書き込み専用のPICライタであやまってLVPビットを‘0’にしてしまった場合、次回から低電圧書き込み専用のPICライタでは消去もプログラム書き込みもできなくなってしまいます(たとえば、PGM端子をI/Oピンとしてつかうように設定されたHexファイルを書き込んでしまった場合などです)。
そうした場合、手元に高電圧書き込みに対応したPICライタがなければつぎのようにすれば、LVPビットを‘1’にもどすことができます。
PICライタのVppのラインを一時的に不通にします(×印)。
1、9Vの積層乾電池(006P)に抵抗をかませてPICにVppを供給します。この状態でVddがPICに供給されている場合は、PICはすでにプログラミングモードに入っています。
2、PICライタでデバイスを消去します。 picwriter -e 消去
3、9Vの積層乾電池を回路から取り外します。
4、PICライタのVppのラインを元通り接続します。
以上は高電圧書き込みにVppに9Vの供給が必要な機種のみ適用可能です。Vppに10V〜12V必要な機種には別途10V〜12Vの電源を用意する必要があります。
4 PIC18F14K50 LVP回復 おわり top
工事中
1 めんにゅー 1 2018.04.18