2025.5.11
前へ

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


超ローコストPICWRITERの製作

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

[第282回]



●PIC16F1939

PIC16F1939は40pinのPICです。


[出典]Microchip Technology Inc. PIC16F193X DataSheet

前回まで説明してきましたPIC16F1938は28pinのPICです。
PIC16F1939は40pinなのでPIC16F1938に比べてpin数が多い分I/Oポートの数も多いのですがそういうハードウェアとしての違いを別にすればソフトウェア的にはPIC16F1938と異なるところはありません。
ということで今回はPIC16F1939にPIC1938用のテストプログラムを書いてその後で動作テストをしてみます。
PIC16F1939はソフトウェア的にはPIC1938と同じですからTYPE=3です。
下はPIC16F1939のテストを行なったときのログです。
最初に/PICIDCKでDEVICE IDを読み出しました。
logfile piciolog\0428212518.txt open
*** pic i/o ***
picio-30 connected
>/picidck
400C[C3][23]
>

DEVICE IDとして23C3が読み出されました。
PIC16F1939のDEVICE IDは23CX/DXです。


[出典]Microchip Technology Inc. PIC16F193X Memory Programming Specification

/PICTYPEコマンドを実行しました。
>/pictype=3
pictype=33
[03][01][00][00]
>

まずは念のためにはじめに/PICRDを実行して中身を確認しました。
>/picrdf
400E[03][01][00][00]
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]
0040[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][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[FF][3F][FF][3F]
[10]
>

何も書かれていないことが確認できましたので/HLOADを実行してテスト用のHEXファイルをロードしたあと/PICWRを実行し続いて/VERIFYを実行しました。
>/hload pic16f1938test.hex
loading pic16f1938test.hex ...
i=242,binbfend=98
>/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=88,b=2,[00]000e
[05][00][02][00][0E][E4][E9][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(10)(03)(00)(02)(00)(0E)(01)(01)(00)(3A)(03)(FF)(3F)(FF)(3F)(FF)(3F)
picwrend

>/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)(0E)(01)(01)(00)(3A)(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)(0E)(01)(01)(00)(3A)(03)(FF)(3F)(FF)(3F)(FF)(3F)
[o][o]

i=88,b=2,[00]000e
[06][00][02][00][0E][E4][E9][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(10)(E4)(29)(FF)(3F)(8B)(2D)(A7)(19)(FE)(3F)(FF)(3F)(FF)(3F)(FF)(3F)
[o][x]error!
vfend
error=1
>

ベリファイの結果はerror=1になりました。
このエラーについては前回説明をしました。
このままで問題はありません。
正しく書き込みができています。

/PICRDFを実行しました。
>/picrdf 16f1939test250428.hex
400E[E4][29][FF][3F]
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][68][30][99][00][8D][01][8E][01][20][00][21][08][8D][00]
0020[10][17][20][A1][0F][0E][28][A2][0A][22][08][8E][00][0E][28][FA][30]
0030[10][A0][00][00][00][A0][0B][19][28][08][00][FF][3F][FF][3F][FF][3F]
0040[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][29][FF][3F]
[10]
>


ここまでOKです。
まだ/ERASEのテストをしていませんでした。
/ERASEを実行したあと/PICRDFを実行しました。
>/erase
400E[E4][29][FF][3F]
>/picrdf
400E[E4][29][FF][3F]
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]
0040[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][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[FF][3F][FF][3F]
[10]
>


消去できたことが確認できました。
PICWRITERのテストとしてはすべてOKであることが確認できました。
最後にもう一度プログラムを書いて動作テストをします。
さきほどと同じように/HLOADを実行してテスト用のHEXファイルをロードしたあと/PICWRを実行し続いて/VERIFYを実行しました。
>/hload pic16f1938test.hex
loading pic16f1938test.hex ...
i=242,binbfend=98
>/picwr
400E[03][01][00][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)(03)(01)(00)(00)(0E)(01)(01)(00)(00)(03)(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=82,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)(30)(00)(00)(00)(3A)(03)(FF)(3F)(FF)(3F)(FF)(3F)
i=88,b=2,[00]000e
[05][00][02][00][0E][E4][E9][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(10)(03)(00)(02)(00)(0E)(01)(01)(00)(3A)(03)(FF)(3F)(FF)(3F)(FF)(3F)
picwrend

>/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)(0E)(01)(01)(00)(3A)(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)(0E)(01)(01)(00)(3A)(03)(FF)(3F)(FF)(3F)(FF)(3F)
[o][o]


i=82,b=2,[04]0000
[06][04][02][00][00][00][01][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(01)(A0)(00)(00)(00)(A0)(0B)(19)(28)(08)(00)(8E)(00)(0E)(28)(FA)(30)
i=88,b=2,[00]000e
[06][00][02][00][0E][E4][E9][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(10)(E4)(29)(FF)(3F)(8B)(2D)(A7)(19)(FE)(3F)(FF)(3F)(FF)(3F)(FF)(3F)
[o][x]error!
vfend
error=1
>/exit


下は+3Vで動作中の写真です。


PIC16F1939についてはこれで終わりです。

超ローコストPICWRITERの製作[第282回]
2025.5.11 upload

前へ

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