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


PICBASICコンパイラ

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
まるでインタプリタ。でもコンパイラです。超カンタン超シンプルです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第225回]



●PIC16F84A(3)はじめにLoad Configありき

とにかく。
PICKITUの解析から導き出された結論としては、どうもそれしかないという考えに落ち着きました。
というよりも、ぶっちゃけもうそれしかやれることは残っていません。
藁にもすがる気持ちでPIC WRITERの先頭にその部分を加えてみました。
まずは試しとして/PICRDのところです。
今まではPIC16F84AにVddとVppを供給したあといきなりユーザープログラムエリアの先頭からプログラムコードを書いていました。
そこのところを変更して/PICRDのプログラムの先頭部分でVddとVppを供給するところを削除して、その代わりに新たに/PICRD1を作ってそこでVddとVppを供給するようにしました。
動作テストとしていままで/PICRDだけでやっていたところを/PICRD1とPICRDの2段階に分割しました。
そして/PICRD1で最初にVddとVppをONにしたあと、データを”0000”にしたLoad Configコマンドを実行し、以下のようにプログラムしました。
1)Vddオン、Vppオン
2)00 0000 Load Config ”0000”  Program Counterが2000Hにセットされる
3)06 Increment Address
4)06 Increment Address
5)06 Increment Address
6)06 Increment Address
7)06 Increment Address
8)06 Increment Address  Program Counterが2006Hになる
9)04 Read Data  デバイスID取得
10)06 Increment Address  Program Counterが2007Hになる
11)04 Read Data  Configデータ取得
12)Vpp=L(Mclrリセット) Program Counterが0000Hになる
13)デバイスIDとConfigデータをホストに送出する

上記のようにプログラムを変更したPIC18F13K50をPIC WRITER回路に実装し、PIC16F84Aをセットしました。
祈るような気持ちでテストスタートしましたところ。
おお!できた!できましたよ!
logfile piciolog\0302215142.txt open
*** pic i/o ***
picio-30 connected
>/picrd1
400C[60][05][FB][3F]
>/picrdf 84atestb250302.hex
type=04,uadrs=00
[08]
0000[10][05][28][FF][3F][FF][3F][FF][3F][FF][3F][83][16][85][01][86][01]
0010[10][83][12][21][08][85][00][10][20][A2][0B][0B][28][A1][03][09][28]
0020[10][3E][30][A0][00][86][06][A0][0B][12][28][08][00][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]


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[FB][3F]
[01]

最初に/PICRD1でVddオン、VppオンしてデバイスID、CONFIGデータを読み込みました。
OKです。
続いて/PICRDFを実行しました。
冗長ですから途中の表示をカットしてあります。
やっと。
うまくいきました。
やっぱり最初にLoad Configの実行が必要なようです。
しかし。
PIC16F627もPIC16F84もそんな必要はありませんでした。
なんだかなあという感じであります。
まま。
とにかくまともに動いてくれたわけですから、それはそれ。
終わりよければ全てよし、ということにいたしましょう。
実は、よくなかったのですけれど。
それはもう少し後でのお話です。
とりあえずうまくいったようですから更にプログラムを変更して/PICRD1と/PICRDに分割したところをもう一度/PICRDにまとめるとともに/PICWRなどほかのコマンドも同じように変更しました。
実は/ERASEはプログラムミスがあることがわかってこの時点ではうまく動作しませんでしたのでそのバグは後で直すことにしてとりあえずはPICKITUでイレーズしたPIC16F84Aを用意しました。

まずは/PICRDで消去済みの確認です。
>/picrd
400C[FF][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]
[10]
>

あれ?
デバイスIDが読み出せていません。
3FFFです。
ちょっとおかしい。
ここはペンディングです。

続いて/PICWRのテストです。
/HLOADでHEXファイルをロードしてから/PICWRを実行しました。
>/hload pic84atest.hex
pic84atest.hex cannot open
>/hload 16f84atest.hex
loading 16f84atest.hex ...
i=167,binbfend=68
>/picwr
400C[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=22,b=6,[00]000a
[05][00][06][00][0A][83][16][85][01][86][01][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
[01]
i=42,b=16,[00]0010
[05][00][10][00][10][83][12][21][08][85][00][10][20][A2][0B][0B][28][A1][03][09][28]
[01]
i=58,b=12,[00]0020
[05][00][0C][00][20][3E][30][A0][00][86][06][A0][0B][12][28][08][00][FF][FF][FF][FF]
[01]
i=64,b=2,[00]400e
[05][00][02][40][0E][FB][3F][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
[03]
picwrend

>/verify
inbfend=0
400C[00][00][00][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)(00)(00)(00)(00)(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)(00)(00)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)
[o][o]
i=22,b=6,[00]000a
[06][00][06][00][0A][83][16][85][01][86][01][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(06)(83)(16)(85)(01)(86)(01)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)
[o][o][o][o][o][o]
i=42,b=16,[00]0010
[06][00][10][00][10][83][12][21][08][85][00][10][20][A2][0B][0B][28][A1][03][09][28]
(10)(83)(12)(21)(08)(85)(00)(10)(20)(A2)(0B)(0B)(28)(A1)(03)(09)(28)
[o][o][o][o][o][o][o][o][o][o][o][o][o][o][o][o]
i=58,b=12,[00]0020
[06][00][0C][00][20][3E][30][A0][00][86][06][A0][0B][12][28][08][00][FF][FF][FF][FF]
(0C)(3E)(30)(A0)(00)(86)(06)(A0)(0B)(12)(28)(08)(00)(A1)(03)(09)(28)
[o][o][o][o][o][o][o][o][o][o][o][o]
i=64,b=2,[00]400e
[06][00][02][40][0E][FB][3F][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(10)(FB)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)
[o][o]
vfend
error=0
>

そのあと/VERIFYを実行しました。
ERROR=0です。

最後に/PICRDで読み出してちゃんと書き込めたかどうかの確認です。
>/picrdf 84atest250305.hex
400C[00][00][00][00]
type=04,uadrs=00
[08]
0000[10][05][28][FF][3F][FF][3F][FF][3F][FF][3F][83][16][85][01][86][01]
0010[10][83][12][21][08][85][00][10][20][A2][0B][0B][28][A1][03][09][28]
0020[10][3E][30][A0][00][86][06][A0][0B][12][28][08][00][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[FB][3F]
[10]
>

あれ?
今度はデバイスIDもConfigも0000です。
やっぱりちょっと怪しいところがあります。
ここは追求する必要がありそうです。
プログラムコードはちゃんと書き込まれているようで正しく読み出せました。
最後に読んだCONFIGはちゃんと読み出せました。
うーん。
やっぱりどこかがおかしい。

PICBASICコンパイラ[第225回]
2025.3.5 upload

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