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


超ローコストPICWRITERの製作

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

[第266回]



●PIC16F883(4)CONFIG2

前回の/PICWRのテストでベリファイエラーになってしまいました。
エラーの内容を確認したところCONFIG2でエラーが発生していました。
/HLOADで読み込んだHEXファイルのその部分は下の通りです。
:02400E00F72F8A
:024010000000AE
:00000001FF

PIC16F883のCONFIGはアドレス2007がCONFIG1で2008がCONFIG2です。
PIC16F883のフラッシュプログラムメモリは16bit構成(実際は14bit)なのでHEXファイル(8bit)のアドレスでは400E〜4011になります。
CONFIG1はF72F(メモリでは下位、上位の順になる)ですがCONFIG2は0000になっています。
下は書き込み後に読み出した同じアドレス部分です(これがベリファイで読み出した値になります)。
:04400E00F72FFF3853
:00000001FF

CONFIG1はF72Fですがそれに続くCONFIG2はFF38になっています。
もとのHEXファイルが0000なのに書き込み後に読み出した値がFF38なのでそこで2バイトのベリファイエラーになったのでした。
ということになるとCONFIG2は一体どういうものなのかということを確認しなければなりません。

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

実はCONFIG2については深く考えていませんでした。
上のドキュメントを見るとヤバいことが書いてあります。
WRITE PROTECTに関する設定のようです。
CONFIG2はほとんどのbitが未割り当てでDefault valueは’1’になっています。
bit10−9がWRITE PROTECTの指定になっていてそこが”00”のときはWRITE PROTECTが有効でそれはEECONによってコントロールされると書いてあります。
これはヤバいです。
bit8はBrown−outの設定でこれはまあどちらでもよいです。
問題はbit10−9です。
こんなコワいCONFIGだとは知りませんでしたのでCONFIG2には何も設定していませんでした。
;pic16f883test
;25/04/16 4/18 4/19
;
; internal 4MHz
        #include <p16f883.inc>
        __CONFIG _CONFIG1,_WDT_OFF & _MCLRE_ON & _LVP_OFF
        __CONFIG _CONFIG2
;

CONFIG2に何も書かないでおくとMPLABは0000を吐き出してくれるようです。
おいおい。
それはないでしょーよ。

で。
下のように直しました。
;pic16f883test
;25/04/16 4/18 4/19 4/21
;
; internal 4MHz
        #include <p16f883.inc>
        __CONFIG _CONFIG1,_WDT_OFF & _MCLRE_ON & _LVP_OFF
        __CONFIG _CONFIG2,_WRT_OFF
;


そのように直したファイルをMPLABでアセンブルしてできたHEXファイルを/HLOADでをロードしたあと/PICWRを実行し続いて/VERIFYを実行しました。
>/hload pic16f883test3b.hex
loading pic16f883test3b.hex ...
i=229,binbfend=94
>/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=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)(FF)(3F)(FF)(3F)(FF)(3F)
i=90,b=2,[00]4010
[05][00][02][40][10][FF][3F][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)(FF)(3F)(FF)(3F)(FF)(3F)
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)(FF)(3F)(FF)(3F)(FF)(3F)

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)(3F)(3D)(23)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)
[o][o]
i=90,b=2,[00]4010
[06][00][02][40][10][FF][3F][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(10)(FF)(3F)(3D)(23)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)
[o][o]
vfend
error=0
>

今度はベリファイでerror=0になりました。
念のため/PICRDFを実行しました。
>/picrdf 16f883test3b250421.hex
400E[FF][3F][3D][23]
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]


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][3F]
[10]
>/exit

下は修正後にMPLABで作成されたHEXファイルのCONFIGの部分です。
:02400E00F72F8A
:02401000FF3F70
:00000001FF

CONFIG2がFF3Fになっています。

下はそれをPIC16F883に書き込んだあと/PICRDFで読み出してセーブした16f883test3b250421.hexのその部分です。
:04400E00F72FFF3F4C
:00000001FF

CONFIGの値がMPLABで作成したHEXファイルの値と一致しました。

PIC16F883のPICWRITERテストはこれで終了です。

超ローコストPICWRITERの製作[第266回]
2025.4.21 upload

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