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


超ローコストPICWRITERの製作

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

[第265回]



●PIC16F883(3)PIC WRITERのテスト

今回はPIC WRITERのテストです。
PIC16F883に対して/PICRD、/PICWR、/ERASEのテストを行ないます。
PIC16F883は28pinのPICです。
いままでさわってきたPICは8pin、14pin、18pinでした。
いままでは書き込みを行なうPICをPIC WRITER回路の28pinテストソケットにセットしました。


PIC16F883は28pinですからいままでのPICと同様PIC16F883も28pinのテストソケットにセットできそうなのですが。


28pinのPICは28pinのテストソケットではなくて40pinのテストソケットにセットします。

実は秋月のPICプログラマでも同じ使い方をしています。
それには理由があります。
PICにプログラムを書き込むときに必要な信号端子について[第262回]で説明をしました。
必要なのはVdd、Vss、Vpp、PGC、PGDの5本の端子です。
PIC16F628などの18pinのPIC以外は1pinを基準にして見ると同じ端子配列です。
PIC18F14K50などの20pinのPICでも同じ配列です。
18pinのPICとそれ以外のPICとでは配列は異なりますがそれでもVppだけは同じ4pinになっています。
Vpp以外はVdd(+5V)系の電圧ですがVppだけは+9V〜+13.5Vの高電圧です。
DEVICE IDを読み出すときにもVpp端子に高電圧をかけます。
このときもしもVpp以外の端子に高電圧をかけてしまうとPICが破損してしまう可能性があります。

下はPIC16F883の端子配列図です。

[出典]Microchip Technology Inc. PIC16F882/883/886 Data Sheet

PIC16F883のVppは4pinではなくて1pinに配置されています。
これがPIC16F883を28pinのテストソケットではなくて40pinのテストソケットにセットしなければならない理由です。
実は40pinのPICもVppが1pinに配置されています。
どうして28pinも40pinも含めて全部のPICのVppを4pinに配置しなかったのでしょうかねえ。
何かそうしなければならなかった事情があるのかもしれませんが。
Vppをスイッチで切り換える回路にすることもできないことはないのですが操作ミスや思い違いなどで誤ってPICを破損してしまう危険性があります。
やはりここはコストアップではありますが40pinと28pinのテストソケットを使い分けるほうが安全かと思います。

本題に戻ります。
[第262回]でそれまでさわってきたPICについてWRITERコマンドの使い方を整理したところTYPE0〜TYPE3のいずれかであることがわかりました。
同じ考えでPIC16F883について確認してみたところPIC12F629と同じTYPE3のようです。
そこで今回もPIC16F883がTYPE3だと仮定してWRITERプログラムのテストを行ないました。
下はPIC16F883のテストを行なったときのログです。
最初に/PICIDCKでDEVICE IDを読み出しました。
logfile piciolog\0419152407.txt open
*** pic i/o ***
picio-30 connected
>/picidck
400C[20][20]
>

DEVICE IDとして2020が読み出されました。
PIC16F883のDEVICE IDは202X/3Xです。


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

PIC12F629のときと同様に/PICTYPEコマンドを使いました。
>/pictype=3
pictype=33
[03][61][00][11]
>

続いて/PICRDFを実行しました。
>/picrdf
400E[03][61][00][11]
type=04,uadrs=00
[08]
0000[10][05][28][FF][3F][FF][3F][FF][3F][FF][3F][60][30][83][00][88][01]
0010[10][89][01][03][13][64][30][8F][00][86][01][87][01][83][12][21][08]
0020[10][86][00][18][20][A1][0F][0F][28][A2][0A][22][08][87][00][0F][28]
0030[10][FA][30][A0][00][00][00][A0][0B][1A][28][08][00][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[F4][2F][FF][38]
[10]
>

続いて実行した/PICRDFでは先に秋月のPICプログラマで書き込んだテストプログラムが読み出されました。
/PICRDはOKのようです。

/ERASEを実行したあともう一度/PICRDFコマンドを入力しました。
>/erase
400E[F4][2F][FF][38]
>/picrdf
400E[F4][2F][FF][38]
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]


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もOKです。

/HLOADを実行してテスト用のHEXファイルをロードしたあと/PICWRを実行し続いて/VERIFYを実行しました。
>/hload pic16f883test3.hex
loading pic16f883test3.hex ...
i=229,binbfend=94
>/picwr
400E[03][E3][08][81]
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)(E3)(08)(81)(22)(D7)(EE)(84)(FD)(03)(68)(10)(84)(02)(09)(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)(68)(10)(84)(02)(09)(E4)
i=22,b=6,[00]000a
[05][00][06][00][0A][60][30][83][00][88][01][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(10)(01)(00)(06)(00)(0A)(00)(00)(00)(10)(03)(68)(10)(84)(02)(09)(E4)


i=84,b=2,[00]400e
[05][00][02][40][0E][F7][2F][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(10)(03)(00)(02)(40)(0E)(00)(00)(00)(3C)(03)(68)(10)(84)(02)(09)(E4)
i=90,b=2,[00]4010
[05][00][02][40][10][00][00][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(10)(03)(00)(02)(40)(10)(00)(00)(00)(3C)(03)(68)(10)(84)(02)(09)(E4)
picwrend

>/verify
inbfend=0
400E[03][00][02][40]
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)(40)(10)(00)(00)(00)(3C)(03)(68)(10)(84)(02)(09)(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)(05)(28)(02)(40)(10)(00)(00)(00)(3C)(03)(68)(10)(84)(02)(09)(E4)
[o][o]

i=84,b=2,[00]400e
[06][00][02][40][0E][F7][2F][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(10)(F7)(2F)(FF)(38)(FD)(24)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)
[o][o]
i=90,b=2,[00]4010
[06][00][02][40][10][00][00][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(10)(FF)(38)(FD)(24)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)
[x][x]error!
vfend
error=2
>

あれ?
ベリファイで最後のCONFIGのところでerror=2になってしまいました。
これについては確認が必要です。
今回は時間がありません。
それについては次回で確認をしてみます。

念のため/PICRDFを実行しました。
>/picrdf 16f883test3250419.hex
400E[FF][38][FD][24]
type=04,uadrs=00
[08]
0000[10][05][28][FF][3F][FF][3F][FF][3F][FF][3F][60][30][83][00][88][01]
0010[10][89][01][03][13][65][30][8F][00][86][01][87][01][83][12][21][08]
0020[10][86][00][18][20][A1][0F][0F][28][A2][0A][22][08][87][00][0F][28]
0030[10][FA][30][A0][00][00][00][A0][0B][1A][28][08][00][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]
0060[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[F7][2F][FF][38]
[10]
>/exit


上記のベリファイでのCONFIGのエラーを別にすれば/ERASE、/PICRD、/PICWRの全てうまくできたようです。
今回のPIC16F883に対するWRITERプログラムのテストはVpp=9Vで実行しました。
PIC16F883のVppは10V〜12Vということになっています。
既定値よりも1V低い電圧ですが問題なく書き込みも消去もできました(上記のベリファイエラーはおそらく別の理由です)。

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

超ローコストPICWRITERの製作[第265回]
2025.4.20 upload

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