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


超ローコストPICWRITERの製作

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

[第301回]



●PIC16F1455(7)LVPモードでWRITE/READ

前回は残っておりましたERASEテストを行って確実に消去できたことを確認しました。
それで一件落着なのですけれど。

なんとなく面白くないのですよね。
せっかくレベル変換回路まで手作りしたというのに結局使わないままになってしまいました。
そりゃあRC0/RC1端子による書き込み読み出し方法を使うというのが正攻法です。
ですけれど。
せっかくレベル変換回路まで作ったのですからここは一番LVPモードも試してみたいじゃありませんか。
もっともLVPモードにエントリするのは簡単ではありません。
それなりの手続きが必要です。


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

最初に32ビットのキーコードを送る必要があります。
上記引用文の中ほど’0100 1101 …とあるのがそれです。
まるで暗証番号です。
これを下のようにシリアル送出します。


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

なかなかに面倒です。
つうことはPICWRITERプログラムにもそのような機能を追加しなければなりません。
現在進行中のPICWRITERはLVPモードには対応しないつもりですからそれは本来不要な機能変更です。
しかし言うなれば私個人の意地と興味からすることです。
まあこういう機能も作っておけばそのうち役に立つこともあるかもしれません。
ということでPIC16F1455のLVPモードに対応したプログラム変更を行なってしまいました。

下はテスト中のログです。
デバッグのためのデータも表示しています。
logfile piciolog\0612183910.txt open
*** pic i/o ***
picio-30 connected
>/piclvp,4,4D434850
xh=34,xl=44,[4d]xh=34,xl=33,[43]xh=34,xl=38,[48]xh=35,xl=30,[50]
[04][4d][43][48][50]
[92][01][C2][C0]
>

32ビットのキーコードを送出するためのコマンド/PICLVPを作りました。
キーコードは4D434850です。
これでうまくLVPモードにエントリできればあとは高電圧モードと同じようにWRITE/READできるはずです。
デバイスIDを読んでみました。
>/picidck
400C[21][30]
>

おお。
PIC16F1455のデバイスID”3021”が読み出せました。
LVPモードエントリ成功です。
なんだか胸が高鳴ります。
まま。
落ち着いて。
まずは/PICRDFの実行です。
>/pictype=3
pictype=33
[03][06][00][81]
>/picrdf 16f1455_250612.hex
400E[03][06][00][81]
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]

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]
>

前回ERASEしましたから全部3FFFです。
もっともアクセスに失敗していてもこうなりますからこれだけではなんとも言えません。
テストを先に進めます。
HEXファイルをロードして/PICWRを実行しました。
>/hload 16f1455test.hex
loading 16f1455test.hex ...
i=225,binbfend=92
>/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][21][00][34][30][99][00][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][09][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)
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)(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][09][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(10)(E4)(09)(FF)(3F)(DA)(3C)(CF)(19)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)
[o][o]
vfend
error=0
>

おお。
おお。
error=0です。
ちょいと感動です。
念のために/READFを実行しました。
>/picrdf 16f1455test250612.hex
400E[E4][09][FF][3F]
type=04,uadrs=00
[08]
0000[10][05][28][FF][3F][FF][3F][FF][3F][FF][3F][21][00][34][30][99][00]
0010[10][8E][01][23][00][8E][01][20][00][14][20][14][20][14][20][14][20]
0020[10][21][08][8E][00][A1][0A][0C][28][19][20][19][20][19][20][19][20]
0030[10][08][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]
0050[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][09][FF][3F]
[10]
>/exit

ここまでできましたからLVPモードでWRITEもREADもうまくできたと考えてよいと思いますがさらに念のため今回/PICRDFで読み出して保存したHEXファイルと高電圧モードでWRITEしたあとで同じように読み出して作成したHEXファイルをWinMergeで比較してみました。

内容が一致しました。
成功です!

下はLVPモードで書き込み読み出しを行なったときのPICWRTER回路ボードの写真です。

間にレベル変換回路をつないでいます。
この回路を入れないと書き込みも読み出しもできません。
Vpp端子(MCLR端子)にVdd(+5V)を供給するために高電圧と+5Vを選択するためのショートピンを追加しました。

左端の赤いショートピンがそのためのピンです。
今は5V側にセットしています。

これにて一件落着です。
今夜は黒霧島で乾杯!

超ローコストPICWRITERの製作[第301回]
2025.6.12 upload

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