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


超ローコストPICWRITERの製作

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

[第240回]



●PIC16F1503(4)/PICWRで問題が発生

とかくこの世はままならぬ。
まっこと、すんなりとはいかないものです。
ことに私の場合、山あり谷ありといいますか、毎回どつぼにはまってもだえております。
今回はすんなりいくはずだったのですが…。

前回書きましたとおり/ERASEがうまくいったようなので続いて/PICWRのテストにかかりました。
いつものように/HLOADでHEXファイルをロードします。
PIC16F1503用のテストプログラムは16f1503testです。
ソースプログラムは[第238回]にあります。
ロードするのはそのHEXファイル16f1503test.hexです。
/HLOAD 16F1503TEST.HEXを実行しました。
そのあと/PICWRと/VERIFYを実行しました。
下は実行時のログです。
冗長になりますから途中を省略しました。
>/hload 16f1503test.hex
loading 16f1503test.hex ...
i=225,binbfend=92
>/picwr
400C[E2][2C][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=22,b=6,[00]000a
[05][00][06][00][0A][21][00][68][30][99][00][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
[01]


i=88,b=2,[00]000e
[05][00][02][00][0E][E4][3F][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
[01]
picwrend

>/verify
inbfend=0
400C[E2][2C][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)(E2)(2C)(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]


vfend
error=0
>

error=0です。
念のため/PICRDを実行しました。
>/picrdf 16f1503test250321.hex
400C[E2][2C][FF][3F]
type=04,uadrs=00
[08]
0000[10][05][28][FF][3F][FF][3F][FF][3F][FF][3F][21][00][68][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][E4][3F][FF][3F][FF][3F][FF][3F]


type=04,uadrs=01
[08]
400E[FF][3F]
[10]
>/exit

ちょっと見には正しく書き込めたように見えたのですが。
アドレス0040の行に変なデータがあります。
この行以降は全部3FFFのはずなのですが途中に3FE4があります。
これって、ひょっとするとConfigなのでは…?。
400Eのところを見るとやっぱり書き込めていません。
どうやらプログラムミスがあるようです。
どうもCONFIGのアドレス設定に問題があるようです。
1月に作成したプログラムと16F84A用のWRITERプログラムをもとに今回作成したプログラムを比較してみたところ。
確かにそのところに問題があることがわかりました。
PIC16F84やPIC16F628などはかなり昔のICなのでメモリマップがこじんまりとしています。
下はPIC16F62XのPROGRAM ROM MEMORY MAPです。

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

PIC16F628のCONFIGアドレスは2007です。
PIC16F628の場合プログラムメモリは16bit幅(実際は12bit)ですがHEXファイルは8bitなのでアドレスは倍の400E、400Fの2バイトになります。
そしてこちらはPIC16F1503のPROGRAM ROM MEMORY MAPです。

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

PIC16F1503のCONFIGアドレスは8007、8008です。
HEXファイルでの8bitアドレスは倍の01000E〜010011の4バイトになります。
アドレスが2バイト16ビットでは表記できずさらに上位の8ビットを加えた24ビットでの指定になります。
通常のプログラムメモリアドレスは最上位8ビットは00ですがCONFIGの最上位8ビットは01になります。
今までのPIC WRITERプログラムではメモリアドレスが24ビットになるというのは想定外です。
当然そこのところを対策しなければCONFIGの値を設定することはできません。
で。
そこのところの対策をしたところ確かにCONFIGに値は設定できたのですが…。
とんでもない不可解な現象が発生してしまい、その原因の究明に丸1日以上を費やすことになってしまいました。

次回に続きます。

超ローコストPICWRITERの製作[第240回]
2025.3.23 upload

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