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


PICBASICコンパイラ

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

[第181回]



●PIC18F45K20

PICBASICコンパイラを作る過程でターゲットに出来そうなPICをいくつか選び出して検討した時期があります。
そのうちの何点かは実際にサンプルとして購入しました。
それと並行して自前のPIC WRITERを製作することを思い付きました。
もう1年半以上も前のことです。
この秋ごろからその作業を再開しました。
PIC WRITERで書き込みテストを最初に行なったのはPIC18F13K50とPIC18F14K50でした。
続いてPIC18F2550とPIC18F4550のテストを行いました。
ここまではUSB内蔵PICとして以前から使ってきたPICです。
その流れでPIC18F2450およびPIC18F14K22とPIC18F45K50のテストも行ないました。
いずれもPIC18F13K50/14K50用に作った書き込みプログラムをそのまま使って書き込みも読み出しもできることが確認できました。
そうなると欲が出てきます。
ひょっとすると同じプログラムでまだほかにも書き込みができるPIC18Fがあるのでは?
ということで以前にいずれ試してみようと思ってサンプルとして購入したけれどそのままなっていたものや、ちょっと試してはみたもののうまくできなかったものなどについて、あらためて試してみることを思いつきました。
たまたまつい先日試したPIC18F45K50に近い型番のものとしてPIC18F45K20が手元にあるのが目に付きました。
購入したままで試すところまでいかずにそのままになっていたものです。
名前はPIC18F45K50に近いのですけれどDataSheetで確認してみたところVddが+5Vではなくて+3Vでした。
多分そういうこともあって手をつけずにそのままにしていたようです。

[出典]Microchip Technology Inc.PIC18F2XK20/4XK20 DATA SHEET

USBモジュールは無いようです。
しかしクロックはMax64MHz!
これはすごい。
ピン配列はPIC18F45K50と同じようです。

[出典]Microchip Technology Inc.PIC18F2XK20/4XK20 DATA SHEET

せっかく購入したままで手付かずになっていたものなのでとりあえず試してみることにしました。
問題はVdd電圧です。

[出典]Microchip Technology Inc.PIC18F2XK20/4XK20 DATA SHEET

うむむむ。
残念ながら+5Vでは0.5Vだけオーバーしてしまいます。
なんたって絶対最大定格ですものね。
こいつを越えると’parmanent damage’だそうです。
あなおそろしや。
もっとも’may cause’であって’must cause’とは書いていらっしゃらない。
まあ、メーカー様としてもユーザーが+5Vを使ってしまうだろうことは当然想定していらっしゃるはず。
ここはおそらくタテマエでありましょう。
過去の知識と経験からしましてここは+5Vでも大丈夫。
多分ですけれど。
maybe,perhaps,probably…。
勇を鼓してやってしまいましょう。
念のために書き込み時の電圧を確認してみますと。

[出典]Microchip Technology Inc.PIC18F2XK20/4XK20 Flash Memory Programming Specification

Vpp=9Vは問題ありませんがVdd=3.6Vmaxはいかにも低い。
Vdd=+5Vにして大丈夫か?

多分。
大丈夫でありましょう。
ええ。
やってしまいましたよ。
下はそのログファイルです。
llogfile piciolog\1213215454.txt open
*** pic i/o ***
picio-30 connected
>/picrd
startcode=01
type=04,uadrs=00
[01]
**************************************************************************************************************************************************
**************************************************************************************************************************************************
**************************************************************************************************************************************************
**************************************************************************************************************************************************
**************************************************************************************************************************************************
**************************************************************************************************************************************************
**************************************************************************************************************************************************
**************************************************************************************************************************************************
**************************************************************************************************************************************************
**************************************************************************************************************************************************
**************************************************************************************************************************************************
**************************************************************************************************************************************************
**************************************************************************************************************************************************
**************************************************************************************************************************************************
****[01]
type=04,uadrs=30
[01]
0000[10][00][07][1F][1F][00][8B][85][00][0F][C0][0F][E0][0F][40][00][00]
...............[01]
>/hload 45k50test.hex
loading 45k50test.hex ...
i=365,binbfend=152
>/picwr
startcode=01
i=6,b=2,[04]0000*i=14,b=4,[00]0000*i=26,b=8,[00]0018*i=46,b=16,[00]0020*i=66,b=16,[00]0030*i=86,b=16,[00]0040*i=106,b=16,[00]0050*i=118,b=8,[00]
0060*i=124,b=2,[04]0000*i=132,b=4,[00]0000*i=138,b=2,[00]0005*i=148,b=6,[00]0008*vfend

>/verify
inbfend=0
startcode=01
i=6,b=2,[04]0000[01]*i=14,b=4,[00]0000[01]*i=26,b=8,[00]0018[01]*i=46,b=16,[00]0020[01]*i=66,b=16,[00]0030[01]*i=86,b=16,[00]0040[01]*i=106,b=16,[00]
0050[01]*i=118,b=8,[00]0060[01]*i=124,b=2,[04]0000[01]*i=132,b=4,[00]0000[0f]*verify error! 0,02-00
i=138,b=2,[00]0005[0f]*verify error! 5,d1-81
i=148,b=6,[00]0008[01]*vfend

最初にERASEチェックの意味で/PICRDを実行しました。
CONFIGを除いては[*]のみの表示なので正しく消去されていることが確認できました。
おお。
CONFIGもなんとなくそれらしい値が読めているようです。

続いてもとになるプログラムデータファイルとして45K50TEST.HEXをロードしました。
当然CONFIGの記述はPIC18F45K20とは異なっているはずなのですが。
まずはこのままやってしまいましょう。
HEXファイルロードコマンドは/HLOADです。
そのあと書き込みコマンド/PICWRを実行しました。
/PICWR実行後に/VERIFYを実行しました。
プログラム部分ではエラーは表示されていません。
うまく書き込みできたようです。
下から三行目と二行目でエラーが表示されていますがここはCONFIGです。
そうなることは一応想定内です。
/PICRDFを実行してHEXファイルを作成した後もとのファイルと比較してみることにしました。
下はそのログファイルです。
>/picrdf
startcode=01
type=04,uadrs=00
[01]
0000[10][0C][EF][00][F0][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
0010[10][FF][FF][FF][FF][FF][FF][FF][FF][5B][6B][5C][6B][5D][6B][5E][6B]
0020[10][5F][6B][93][6A][94][6A][95][6A][3C][50][81][6E][82][6E][83][6E]
0030[10][20][EC][00][F0][3D][2E][18][EF][00][F0][3C][06][14][EF][00][F0]
0040[10][0A][0E][0D][6E][28][EC][00][F0][0D][2E][22][EF][00][F0][12][00]
0050[10][F0][0E][0C][6E][00][00][00][00][0C][2E][2A][EF][00][F0][12][00]
0060[10][24][0E][0C][6E][2A][EF][00][F0][FF][FF][FF][FF][FF][FF][FF][FF]
**************************************************************************************************************************************************
**************************************************************************************************************************************************
**************************************************************************************************************************************************
**************************************************************************************************************************************************
**************************************************************************************************************************************************
**************************************************************************************************************************************************
**************************************************************************************************************************************************
**************************************************************************************************************************************************
**************************************************************************************************************************************************
**************************************************************************************************************************************************
**************************************************************************************************************************************************
**************************************************************************************************************************************************
**************************************************************************************************************************************************
***********************************************************************************************************************************************[01]
type=04,uadrs=30
[01]
0000[10][00][02][1F][1C][00][81][81][00][0F][C0][0F][E0][0F][40][00][00]
...............[01]
>/exit

リモート接続を終了しました
logfile closed at Fri Dec 13 21:57:27 2024

CONFIGもそれなりに書けているようです。
もとのHEXファイル45K50TEST.HEXのCONFIGの部分と上のログファイルの書き込み前の/PICRDのCONFIGの部分と書き込み後の/PICRDFのCONFIGの部分を比較してみました。
:0400000002225F3C3D
:02000500D181A7
:060008000FC00FE00F40E5

0000[10][00][07][1F][1F][00][8B][85][00][0F][C0][0F][E0][0F][40][00][00]  (1)
0000[10][00][02][1F][1C][00][81][81][00][0F][C0][0F][E0][0F][40][00][00]  (2)
         02  22  5F  3C      D1  81      0F  C0  0F  E0  0F  40           (3)

最初の3行は45K50TEST.HEXのCONFIGの部分です。
(1)は書き込み前のCONFIGです。
0000はCONFIGの先頭アドレスでその後ろの[10]はその行が16バイト(10H)であることを示しています。
(2)は書き込み後に読み出したCONFIGです。
(3)は45K50TEST.HEX(最初の3行)の値をCONFIGの値に合わせて並べました。
もとは(1)の値であったところに(3)を書き込んだために(2)になったことがわかります。
もとの値は工場出荷時の値です。
それを(2)のように書き換えてしまいました。
PIC18F45K50では意味のあったCONFIGの値を本来のPIC18F45K20のCONFIGを無視して無理やり書き換えてしまいました。
そうしてもまさか壊れてしまうことはないでしょうが、いったいどのような設定になったのかちょいと興味があります。

下はCONFIGビットの明細です。

[出典]Microchip Technology Inc.PIC18F2XK20/4XK20 DATA SHEET

これを見るとCONFIG1L(アドレス300000)は無いようです。
CONFIG1Hは初期値07のところが書き込み後は02になりました。

下がCONFIG1Hの説明です。

[出典]Microchip Technology Inc.PIC18F2XK20/4XK20 DATA SHEET

おお。
書き込み後はFOSCの設定が0010になりました。
HSモードです。
よかった!
あっと。
PLL enable(0110)ではないのでCLOCKは実装クリスタル(12MHz)のままということになります。
その後のCONFIG2Lから後ろはプログラムの実行にそれほど影響しないので説明を省きます。

ということで。
これなら多分動作してくれるのでは。

PICBASICコンパイラ[第181回]
2024.12.16 upload

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