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


超ローコストPICWRITERの製作

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

[第303回]



●PIC16F1825(2)もとのHEXファイルがおかしい

前回は駄目もとでとりあえず「試し書き」をしてみたところベリファイでエラーが出てしまいました。
適当に選んだ元ファイルなのでそれが原因かと思って過去記事を確認してみました。
そこでわかったことはどうやら前回選んだ16F1827TEST.HEXは作成途中のファイルだったようです。
まともなファイルは16F1827TESTE.HEXのようです。
そこで16F1827TESTE.HEXをロードして再度書き込みテストをしてみることにしました。
logfile piciolog\0613181047.txt open
*** pic i/o ***
picio-30 connected
>/picidck
400C[64][27]
>/hload 16f1827teste.hex
loading 16f1827teste.hex ...
i=287,binbfend=118
>/pictype=3
pictype=33
[03][61][00][01]
>/picwr
400E[03][61][00][01]
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)(03)(61)(00)(01)(26)(DF)(2C)(84)(FF)(03)(60)(10)(84)(08)(08)(E4)
i=12,b=2,[00]0000
[05][00][02][00][00][05][28][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(10)(01)(00)(02)(00)(00)(00)(00)(00)(02)(03)(60)(10)(84)(08)(08)(E4)
i=22,b=6,[00]000a
[05][00][06][00][0A][23][00][8C][01][8D][01][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(10)(01)(00)(06)(00)(0A)(00)(00)(00)(10)(03)(60)(10)(84)(08)(08)(E4)
i=42,b=16,[00]0010
[05][00][10][00][10][21][00][8C][01][8D][01][F3][30][99][00][22][00][22][08][8C][00]
(10)(01)(00)(10)(00)(10)(00)(00)(00)(20)(03)(60)(10)(84)(08)(08)(E4)

i=102,b=2,[04]0000
[05][04][02][00][00][00][01][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(03)(01)(00)(0A)(00)(40)(00)(00)(00)(4A)(03)(60)(10)(84)(08)(08)(E4)
i=108,b=2,[00]000e
[05][00][02][00][0E][E4][3F][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(10)(03)(00)(02)(00)(0E)(01)(01)(00)(4A)(03)(60)(10)(84)(08)(08)(E4)
i=114,b=2,[00]0010
[05][00][02][00][10][FF][3F][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(10)(03)(00)(02)(00)(10)(01)(01)(00)(4A)(03)(60)(10)(84)(08)(08)(E4)
picwr end

>

続いて/VERIFYを実行しました。
>/verify
inbfend=0
400E[03][00][02][00]
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)(03)(00)(02)(00)(10)(01)(01)(00)(4A)(03)(60)(10)(84)(08)(08)(E4)
i=12,b=2,[00]0000
[06][00][02][00][00][05][28][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(02)(00)(28)(02)(00)(10)(01)(01)(00)(4A)(03)(60)(10)(84)(08)(08)(E4)
[x][o]error!

i=108,b=2,[00]000e
[06][00][02][00][0E][E4][3F][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(10)(E4)(3F)(FF)(3F)(C0)(18)(67)(16)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)
[o][o]
i=114,b=2,[00]0010
[06][00][02][00][10][FF][3F][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(10)(FF)(3F)(C0)(18)(67)(16)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)
[o][o]
vfend
error=45
>

えっ?
まさかのerror=52???
あっ。
そうでした。
うっかりして前回書き込みを行なったまま/ERASEを実行しないでそこに新しいプログラムを上書きしてしまいました。
最終的には/PICWRを実行するときにその前段で内部的に/ERASEを実行するようにするつもりです。
しかし今はデバッグ中ですからしばらくの間は/ERASEと/PICWRは別々に実行するようにしています。
/ERASEを実行しその後/PICRDFを実行して消去できたことを確認しました。
>/erase
400E[FF][3F][C0][18]
>/picrdf
400E[FF][3F][C0][18]
type=04,uadrs=00
[08]
0000[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
0010[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
0020[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
0030[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]

07D0[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
07E0[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
07F0[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
[01]
type=04,uadrs=01
[08]
400E[FF][3F][FF][3F]
[10]
>

もう一度/PICWRを実行し続いて/VERIFYを実行しました。
>/picwr
400E[FF][3F][FF][3F]
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)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)
i=12,b=2,[00]0000
[05][00][02][00][00][05][28][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(10)(01)(00)(02)(00)(00)(00)(00)(00)(02)(03)(FF)(3F)(FF)(3F)(FF)(3F)
i=22,b=6,[00]000a
[05][00][06][00][0A][23][00][8C][01][8D][01][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(10)(01)(00)(06)(00)(0A)(00)(00)(00)(10)(03)(FF)(3F)(FF)(3F)(FF)(3F)

i=108,b=2,[00]000e
[05][00][02][00][0E][E4][3F][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(10)(03)(00)(02)(00)(0E)(01)(01)(00)(4A)(03)(FF)(3F)(FF)(3F)(FF)(3F)
i=114,b=2,[00]0010
[05][00][02][00][10][FF][3F][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(10)(03)(00)(02)(00)(10)(01)(01)(00)(4A)(03)(FF)(3F)(FF)(3F)(FF)(3F)
picwr end

>/verify
inbfend=0
400E[03][00][02][00]
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)(03)(00)(02)(00)(10)(01)(01)(00)(4A)(03)(FF)(3F)(FF)(3F)(FF)(3F)
i=12,b=2,[00]0000
[06][00][02][00][00][05][28][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(02)(05)(28)(02)(00)(10)(01)(01)(00)(4A)(03)(FF)(3F)(FF)(3F)(FF)(3F)
[o][o]

i=108,b=2,[00]000e
[06][00][02][00][0E][E4][3F][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(10)(E4)(3F)(FF)(3F)(C0)(18)(67)(16)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)
[o][o]
i=114,b=2,[00]0010
[06][00][02][00][10][FF][3F][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(10)(FF)(3F)(C0)(18)(67)(16)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)
[o][o]
vfend
error=0
>

今度はERROR=0になりました。
最後に確認のため/PICRDFを実行してHEXファイルを作成しました。
>/picrdf 16f1825test250613.hex
400E[FF][3F][C0][18]
type=04,uadrs=00
[08]
0000[10][05][28][FF][3F][FF][3F][FF][3F][FF][3F][23][00][8C][01][8D][01]
0010[10][21][00][8C][01][8D][01][F3][30][99][00][22][00][22][08][8C][00]
0020[10][15][20][A3][0B][10][28][A2][03][0E][28][0A][30][A1][00][1B][20]
0030[10][A1][0B][17][28][08][00][64][30][A0][00][00][00][00][00][00][00]
0040[10][FF][30][8D][06][A0][0B][1D][28][08][00][FF][3F][FF][3F][FF][3F]
0050[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]

07D0[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
07E0[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
07F0[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
[01]
type=04,uadrs=01
[08]
400E[E4][3F][FF][3F]
[10]
>/exit

今回プログラムの書き込みテストに使った16F1827TESTE.HEXは[第192回]でPIC16F1827の書き込みテストに使っています。
そのとき書き込み後に読み出して作成したHEXファイルと今回作成したHEXファイルをWinMergeで比較してみました。

左がPIC16F1827のHEXファイルで右が16F1825のHEXファイルです。
完全に一致しています。
それでずっと下の方に行きますと。

ここは本来はCONFIGアドレスなのですけれど左側のファイルを作成した時点ではまだそこのところがうまく出来ていなくて結果として左右が違っています。
右側の最下行がCONFIGデータです。
でも。
あれ?
左側はファイルエンドのところでCONFIGデータが出てきています。

CONFIGの値は左右で一致しています。
しかし。
右側のアドレスはちょっと違う…。
それに右側には本来必要な
020000040001
がありません。
ちょっとこれは気が付きませんでした。
ここはPICWRITERのプログラムエラーではなくてWindows側のCppプログラムのミスのようです。
どこかの時点でバグが入ってしまったようです。
ちょっと確認してみます。

超ローコストPICWRITERの製作[第303回]
2025.6.15 upload

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