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


PICBASICコンパイラ

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

[第173回]



●PIC18F14K22でまさかのエラー(3)

前回からの続きです。
今回はやっと解決編です。
余りにもおかしいベリファイエラー。
ところが繰り返してテストをしているうちに。
おお。
見えてきましたよ。
ひょっとしたら。

運鈍根という言葉があります。
私は運には恵まれているほうだと思います。
鈍はその通りだと思います。
とにかく鈍い。
気が付くのが人一倍遅いです。
若い頃は気が短かった。
まだアマチュアのころは回路がうまく動かないと、腹が立って放り投げてしまうことがよくありました。
ま。でも。2〜3日経つとだんだん落ち着いてきて、放り投げてしまった基板をまた取り出してあれこれいじくりだしたりしていました。
今はトシのせいかずいぶん気が長くなったように思います。
どこかにおかしなところがあるはず。
まま。
コーヒーでも飲みながら、とか。
今日のところは一杯飲んで寝てしまって、明日また考えてみようとか。
余談でありますが。
以前はそういうときはもっぱら金麦でありましたが。
メーカーが苦労して安いものを作って売り出してそれが売れてくるとすぐに課税基準の見直しだとか。
はやい話が増税じゃありませんか。
もう悪代官でありますね。
おぬしもワルじゃのう。
しかし。
庶民はしたたかでありますよ。
金麦はやめました。
黒霧島の1.8Lパックなんざコスパがよくてなかなかにいけるじゃありませんか。
そいつをオンザロックでチビチビやるとか。
私はもともとアルコールには弱いほうなのでそんなに飲めません。
ですからウィスキーだってコスパよく飲めてしまいます。
最近は凛を飲んでいます。
ネーミングが良いじゃありませんか。
こいつも安くてそれなりにいけます。
オンザロックでストレートで飲めるようになってしまいました。
えっと。
余談になってしまいました。
とにかく途中で諦めたりしないで根気よくしつこく続けることが肝要かと。
それで。
繰り返しテストをしているうちに。
何回目かのテストで比較データの異常表示と思われたところにある規則があることに気が付きました。

2行目を見ると本来の書き込みデータ4バイトの後ろが全部00になっています。
そしてその次の行は本来はアドレス0008からの4バイトに値が書き込まれるはずなのですが、そこが0018からの4バイトになっていて、その前後はやはり00が書き込まれています。
それからその下のブロックのアドレス0580を見ると最後のFFであるはずのところがF0になっています。
それからその下のアドレス0590は8バイトしか書き込んでいないのですが、その後ろまで全部値が書き込まれています。
残りの8バイトの値はその上の値と同じです!
そういうことだったのか!
実はテストをしていく過程でFFだけの行は送信しないでパスするようにしたのですがそれと同時に16バイトに満たないデータや後ろがFFであるようなデータは実際に値がある分だけのバイト数を送るようにしました。
うーん。
確かそれはPIC18F4550でもそのようにしたはずだったのですが…。
そこはよく確認していません。
とにかく原因らしきものがわかった以上前に戻ったりしないでその対策をすべきです。
16バイトに満たないデータを送ると書き込み先のPICのバッファに前の値が残っていてそれを全部書き込んでしまうのが原因だったようです。
もうひとつ。
アドレス0008の値がアドレス0018に書かれてしまうことについてはPICの書き込みプログラムに問題があったのに加えてPIC18F14K22だけかもしれませんが16バイト分の書き込みを行なうとバッファの書き込みアドレスが自動的に次のアドレスにインクリメントしてしまうらしいことがわかりました。
自分ではわかっているのですがうまく説明ができません。
とにかくそういうことのようです。
下の方の何行かはCONFIGです。
CONFIGは1バイトずつ書き込みますからそういう問題はありません。
ちょっと見ると左右が違って見えますがアドレスとバイト数を見ながら確認していくと正しく書き込まれていることがわかります。

さて。
同じ書き込みプログラムなのにPIC18F4550以前は正しく書き込みができていたのになぜPIC18F14K22では上記の問題が出てしまうのか?
そしてそれにもかかわらずND80Z3.5版の書き込みプログラムではPIC18F14K22も正しく書き込みできるのか?
ということなのですが。
実はND80Z3.5版とPICプログラム版には大きく異なっているところがありました。
ND80Z3.5版を作るときにPIC18F13K50のバッファが8バイトであることを意識して書き込みデータは16バイトを8バイトに分割して送出していたのでした。
そのようにするとアドレス0018に誤書き込みされることがないことが確認できました。
そこでPICプログラムもそこを変更して8バイト以下の行については8バイトデータとして処理するようにしたところ上記の異常書き込みは起こらなくなりました。

うむむむむ。
こういうところがいかにもMICROCHIPなのですよねえ。
PIC18F13K50もPIC18F14K50も同じような書き込みデータなのに何の問題も起きなくて、それがPIC18F14K22だとそういうことになってしまうなんて。
どうやらPIC18F14K22は中のロジックをちょいと手直しなさったようであります。
できればそういうことはやってほしくないのですけれどねえ。

年の暮れの貴重な2日間を潰してしまいましたが、なんとかやっとクリアできたようです。
これにて一件落着。
今夜は凛のオンザロックで乾杯です。
悪代官くそくらえ。
であります。

PICBASICコンパイラ[第173回]
2024.12.7 upload

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