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


超ローコストPICWRITERの製作

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

[第252回]



●PIC16F88とPIC16F627のテスト(2)

前回は時間がなくなったためPIC16F88のテストについて書いただけで終ってしまいました。
今回はそこからの続きです。
PIC16F88に続いてPIC16F627についてもテストをしたのですがいくつかプログラムミスがあってなかなかすんなりとはいきませんでした。
今までいくつかのPICについてのWRITERプログラムを書いてきた経験から概ねREADはうまくいきます。
問題はWRITEです。
PICによってWRITEの手続きが異なっています。
ことに問題はBULK ERASEでなかなかにホネでありました。

下はやっとプログラム修正が終ってPIC16F88のテストに続いてPIC16F627のテストを行なったときのログです。
前回と同様途中の表示は省略してあります。
最初に/PICIDCKでDEVICE IDを読み出しました。
続いて/PICRDを実行しました。
logfile piciolog\0405172816.txt open
*** pic i/o ***
picio-30 connected
>/picidck
400C[A0][07][FF][3F][FF][3F]
>/picrdf
400E[A0][07][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]
>

前にテストを行なったときに/ERASEを実行したので中身はクリアされていました。

そこで/HLOADを実行してテスト用のHEXファイルをロードしたあと/PICWRを実行し続いて/VERIFYを実行しました。
/hload 16f627test.hex
loading 16f627test.hex ...
i=175,binbfend=72
>/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]
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]
[01]


i=68,b=2,[00]400e
[05][00][02][40][0E][F9][3F][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
[03]
picwrend

>/verify
inbfend=0
400E[FF][3F][FF][3F]
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)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(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)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)
[o][o]


i=68,b=2,[00]400e
[06][00][02][40][0E][F9][3F][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(10)(F9)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)
[o][o]
vfend
error=0
>

うまく書き込めたようでベリファイの結果error=0になりました。

念のため/PICRDFを実行しました。
>/picrdf 16f627test250405b.hex
400E[F9][3F][FF][3F]
type=04,uadrs=00
[08]
0000[10][05][28][FF][3F][FF][3F][FF][3F][FF][3F][07][30][9F][00][83][16]
0010[10][85][01][86][01][83][12][21][08][85][00][12][20][A2][0B][0D][28]
0020[10][A1][03][0B][28][FA][30][A0][00][86][06][A0][0B][14][28][08][00]
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]


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[F9][3F][FF][3F]
[10]
>

ここまでできたのですが、そのあと/ERASEを実行したところうまく消去できませんでした。
実は/PICWR、/VERIFY、/PICRDはVpp=9Vでテストをしてうまく出来たのですが、/ERASEではVppが電圧不足だったようです。
Data SheetではVdd+3.5V〜になってますからVdd=5VのときVpp=8.5Vでぎりぎり基準内に入っているはずなのですがBulk Eraseはエネルギーが必要なようでもう少し高い電圧でなければ駄目という結果になりました。


[出典]Microchip Technology Inc.PIC16F62X EEPROM Memory Programming Specification

ということでVpp=13.5Vにして/ERASEを実行しそのあと/PICRDFを実行しました。
/erase
400E[F9][3F][FF][3F]
>/picrdf
400E[F9][3F][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]
>/exit

リモート接続を終了しました
logfile closed at Sat Apr 05 17:31:12 2025

全部消去できたことが確認できました。
今のところはVpp電圧はマニュアルでスイッチON/OFF操作によって設定していますが、いずれはソフトウェアで選択設定できるようにしなければならないでしょうね。
うむむむ。
簡単ローコストのつもりだったけどまた回路が複雑になってしまうか。
ま。でも。近い内に考えてみましょう。
とにかく。
PIC16F627についてはこれでテスト終了です。

超ローコストPICWRITERの製作[第252回]
2025.4.6 upload

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