2025.6.2
前へ
次へ
ホームページトップへ戻る


超ローコストPICWRITERの製作

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
「PICBASICコンパイラ」からスピンオフ!!
過去記事を参照することなどを考えて該当する過去記事は「PICBASICコンパイラ」のまま連載回もそのままとします。
以後は前回記事からの流れで[第236回]からとします。
「PICBASICコンパイラ」はなるべく早く連載を再開したいと考えています。
PICはローコスト、高機能で種類も豊富なお手軽マイコンですがプログラムを書き込むためのWRITERが必要です。
それをできるだけ安価に作ってしまおうというプロジェクトです。
最終的には製品化を考えています(組立キット、完成品)。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第293回]



●PIC16F54(11)PICWRITERのテスト

前回まで秋月のPICプログラマの解析データについて書いてきました。
当初PIC16F54のWRITERプログラムがどうしてもうまく動作しないことが悩ましくて窮余の策として秋月のPICプログラマの解析を試みたのですが。
[第287回]に書いておりますように解析を試みている途中でPICWRITERプログラムがうまく動作しなかったのはプログラムにバグがあったこととPIC16F54のDocumentをしっかり読まなかったことなどが原因であることがわかりました。
わかってしまえばなんてこともないことで、解析を続けるよりも先にPIC16F54のためのWRITERプログラムは出来てしまいました。
しかしせっかくいいデータが取れたことでもありますから私自身の備忘録を兼ねて説明をしてきました。
実のところ出来上がったWRITERプログラムのテストも何日か前に済ませています。
今回はそのときのログをもとにしてPIC16F54へのプログラムの書き込みと読み出しテストについて簡単にまとめておきます。
PIC16F54は今までに試したPICとは書き込みのためのプログラムの仕様が少し異なることがわかりましたので今までに作成したPICWRITERプログラムに一部機能を加えました。
PIC16F54に対しては今までのPICとは異なる書き込みプログラムを選択することになるためそれをPICTYPE=5として選択することにしました。
最初に/PICTYPE=5を実行しそれから/ERASEを実行してからPIC16F54用テストプログラムのHEXファイルをLOADしそしてそれを/PICWRコマンドでPIC16F54に書き込みました
logfile piciolog\0528161943.txt open
*** pic i/o ***
picio-30 connected
>/pictype=5
pictype=35
[05][01][00][00]
>/erase
400E[05][01][00][00]
>/hload 16f54testb.hex
loading 16f54testb.hex ...
i=133,binbfend=56
>/picwr
400E[05][01][00][00]
pictype=5
uadrs write
i=6,b=2,[04]0000
[05][04][02][00][00][00][00]
(01)(05)(01)(00)(00)(0E)(01)(00)(00)(20)(05)(FF)(0F)(FE)(0F)(FF)(0F)
configdata[fb][0f]
config write
i=51,b=2,[00]0000
[05][00][02][00][00][FB][0F]
(10)(01)(00)(02)(00)(00)(00)(00)(00)(02)(05)(FF)(0F)(FE)(0F)(FF)(0F)
[inc][01][00][02][00]
i=6,b=2,[04]0000
[05][04][02][00][00][00][00][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(01)(01)(00)(02)(00)(00)(00)(00)(00)(02)(05)(FF)(0F)(FE)(0F)(FF)(0F)
i=26,b=16,[00]0000
[05][00][10][00][00][00][0C][05][00][06][00][12][02][25][00][0C][09][11][02][26][00]
(10)(01)(00)(10)(00)(00)(00)(00)(00)(10)(05)(FF)(0F)(FE)(0F)(FF)(0F)
i=46,b=16,[00]0010
[05][00][10][00][10][F1][02][05][0A][F2][00][03][0A][00][00][F0][02][0C][0A][00][08]
(10)(01)(00)(10)(00)(10)(00)(00)(00)(20)(05)(FF)(0F)(FE)(0F)(FF)(0F)
config pass
picwr end

通例では/ERASEの後は/PICRDを実行して消去できていることを確認するのですが、実はこの時点ですでに何回か/ERASEのテストは行なっていて正しく消去できることは確認済みでしたのでここでは確認のための/PICRDは行なわずに/PICWRを実行しました。
前回までの秋月のPICプログラマでの書き込み読み出し動作の解析ではなんだかよくわからない動作をしていることが読み取れました。
しかしわざわざそんなことを真似しなくてもここは理屈通りで出来るはずと思ったので作成したPIC16F54用のプログラムは「合理的」な考えに基いて作成しました。
PIC16F54の面倒なところはVppをONにするとアドレスが3FF(CONFIGアドレス)になってしまうところです。
アセンブラのソースプログラムでもCONFIGの記述はプログラムの先頭に書きます。
しかしそれをアセンブルして作成されるHEXファイルではCONFIGデータはファイルの最後に書かれる仕様になっています。
そこのところをまともに読んで書き込みプログラムを作ると秋月のPICプログラマのように何回かVppのON/OFFを繰り返さなければなりません。
そこで今回作成したPIC16F54用のWRITERプログラムではHEXファイルを読み込んでバッファに保存したHEXデータを先に一度サーチしてCONFIGデータを読み出して書き込んでしまいます。
それを行なっているところが上のログの中ほどより少し上で
configdata[fb][0f]
config write
と表示しているところです。
それを済ませてから[inc]コマンドでアドレス000に行ってプログラムデータの書き込みを行っています。
そこからは通常のHEXデータの読み込み手順で行いますから最後に再びCONFIGデータを読むことになります。
そこは最初に書き込み済みなのでそれをパスして書き込みを終了します。
そこがログの終わりにある
config pass
です。

/PICWRを実行した後で/PICRDFを実行して書込みが正しく行なわれたことを確認するとともに読み出したデータをHEXファイルとして保存しました。
>/picrdf 16f54testb250529.hex
400E[05][08][20][00]
type=04,uadrs=00
[08]
config [FB][0F]
0000[10][00][0C][05][00][06][00][12][02][25][00][0C][09][11][02][26][00]
0010[10][F1][02][05][0A][F2][00][03][0A][00][00][F0][02][0C][0A][00][08]
0020[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
0030[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
0040[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
0050[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
0060[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
0070[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
0080[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
0090[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
00A0[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
00B0[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
00C0[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
00D0[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
00E0[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
00F0[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
0100[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
0110[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
0120[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
0130[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
0140[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
0150[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
0160[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
0170[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
0180[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
0190[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
01A0[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
01B0[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
01C0[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
01D0[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
01E0[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
01F0[10][FF][0F][FE][0F][FF][0F][FE][0F][FF][0F][FE][0F][FF][0F][FE][0F]
0200[10][FE][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
0210[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
0220[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
0230[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
0240[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
0250[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
0260[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
0270[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
0280[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
0290[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
02A0[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
02B0[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
02C0[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
02D0[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
02E0[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
02F0[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
0300[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
0310[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
0320[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
0330[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
0340[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
0350[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
0360[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
0370[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
0380[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
0390[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
03A0[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
03B0[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
03C0[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
03D0[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
03E0[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
03F0[10][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F][FF][0F]
config [FB][0F]
[10]
>

PICRDの場合もPICWRのときと同じで最初にCONFIGデータを読んでしまいます。
そしてそのデータは一時保存しておいてHEXファイルの最後のところにSAVEしています。

下はベリファイです。
>/verify
inbfend=0
400E[05][01][00][1F]
config [FB][0F]
i=6,b=2,[04]0000
[06][04][02][00][00][00][00][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(01)(FB)(0F)(00)(1F)(FE)(00)(00)(20)(00)(05)(F0)(02)(0C)(0A)(00)(08)
i=26,b=16,[00]0000
[06][00][10][00][00][00][0C][05][00][06][00][12][02][25][00][0C][09][11][02][26][00]
(10)(00)(0C)(05)(00)(06)(00)(12)(02)(25)(00)(0C)(09)(11)(02)(26)(00)
[o][o][o][o][o][o][o][o][o][o][o][o][o][o][o][o]
i=46,b=16,[00]0010
[06][00][10][00][10][F1][02][05][0A][F2][00][03][0A][00][00][F0][02][0C][0A][00][08]
(10)(F1)(02)(05)(0A)(F2)(00)(03)(0A)(00)(00)(F0)(02)(0C)(0A)(00)(08)
[o][o][o][o][o][o][o][o][o][o][o][o][o][o][o][o]
i=52,b=2,[00]1ffe
[06][00][02][1F][FE][FB][0F][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(02)(FE)(0F)(05)(0A)(F2)(00)(03)(0A)(00)(00)(F0)(02)(0C)(0A)(00)(08)
pictype=5 config [FB][0F](FB)(0F)
[o][o]

vfend
error=0
>/exit

/VERIFYもPICWR、PICRDと同様に先にCONFIGデータを読んでしまってからそれを最後のところでもとのHEXファイルのCONFIGデータと比較しています。

テストプログラムを書き込んだPIC16F54の動作テストをしました。
[第285回]で行なったのと同じテストです。

[第285回]の写真と同じに見えますがそのときは秋月のPICプログラマで書き込んだ後の動作テストでした。
今回は上のログにある通り試作中のPICWRITERを使ってPIC16F54にテストプログラムを書き込んだ後に動作テストをしています。

超ローコストPICWRITERの製作[第293回]
2025.6.2 upload

前へ
次へ
ホームページトップへ戻る