PICBASICコンパイラ
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
まるでインタプリタ。でもコンパイラです。超カンタン超シンプルです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第228回]
●PIC16F84A(5)Vppをオシロで確認
前回のCPLDロジアナを使ったPGCとPGDの観測によってLoad Configコマンドが終った直後あたりでPGCとPGDのパルス出力が突然Lになってしまうことがわかりました。
PIC18F13K50のPIC WRITERプログラムが突然暴走してそこでハングアップしたかのような状態に見えますが、実はその後もWindows側のC++プログラムとPIC18F13K50との間のUSB通信は続いていてPIC18F13K50からは「読み取ったはずの」PIC16F84AのデバイスIDとConfigのデータがUSB送信されてきています。
ということから考えると。
余りに奇妙でありえないことのように思えるのですが。
PIC16F84AがPGCとPGDの端子を突然出力モードにしてしまってLを出力してしまうのではないか。
早い話がPIC16F84Aの暴走です。
そんなことがありか?
それしかほかに考えられることはありません。
PIC16F627もPIC16F84もそんなことはありませんでした。
またPICKITUではPIC16F84Aもまともに書き込みも読み出しもできています。
だとすると。
PIC16F627やPIC16F84ならよいけれどPIC16F84Aに対してはPIC WRITERプログラムが正しく対応できていない、ということになります。
実際にそれまでPIC16F84Aの書き込みや読み出しがまったくできなかったのが/PICRD1と/PICRDを2本立てにしてテストをしてみたところとりあえずはまともに動作するようになりました([第225回])。
それでもなおおかしなところが残っているのはそのあたりのプログラムにもう一工夫が必要ということではあるまいか。
それは。
ひょっとすると、あのあたりではないか?
突然ひらめいた考えがだんだんと確信に変わってきました。
まま。
その前に。
まずはPICKITUのVppの出力をオシロスコープで確かめてからにいたしましょう。
どう考えてもやっぱりそこが怪しい。
そこしかない。
そういうことで。
下がオシロスコープで観測したPICKITUのVppとPGCの波形です。
上側(CH1)がVppの波形です。
Vpp電圧は+13Vほどもありますから垂直のスケールは500mV/divにしてあります(1:10プローブですから入力信号は1/10になります)。
下側(CH2)はPGCです。
PICKITUにPIC16F84AをセットしてREADを実行したときの波形です。
Vppの波形を観測することが目的ですから時間軸はこのくらいにしないと観測できません。
それではPGCは速すぎるので上の画像のようにしか捉えられません。
問題はPGCではなくてVppです。
どうやら狙いが当たったようです。
Vppは何回かLになっています。
VppはMCLR端子に入力されているのでそこがLの期間はPIC16F84Aにリセットがかかっていることになります。
データシートから推測していたよりも随分長いリセット期間で100msから200msもあります。
うむむむ。
この波形だけではどうしてこんなに何回もリセットが必要なのかはよくわからないのですが、とにかくリセットに100msぐらいはかけなければならない(もしくはかけたほうがよい)のは確かなようです。
どうやらそこが決め手のように思われたので/PICRD1の先頭部分でVddとVppをほぼ同時にONにしていたところを最初にまずVddをONにして(このときMCLR=Vdd=0V)それから200msウェイトしてからVpp=+13Vにしました(これもあとで確認したのですがどうもVpp=9Vではだめで+13Vぐらいにする必要があるようです)。
そのようにPIC WRITERプログラムを変更してトライしてみたところ。
できました!
logfile piciolog\0307175428.txt open *** pic i/o *** picio-30 connected >/picrd1 400C[60][05][FB][3F] >/picrd 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] 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] [01] >/picrd1 400C[60][05][FB][3F] >/picrd 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] 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] [01] >/exit リモート接続を終了しました logfile closed at Fri Mar 07 17:55:53 2025 |
/PICRD1で[00][00][00][00]が表示されることはなくなりました。
念のため今日になってからもう一度やってみたのですが下の通りバッチリ決っています。
logfile piciolog\0308090809.txt open *** pic i/o *** picio-30 connected >/picrd1 400C[60][05][FB][3F] >/picrd1 400C[60][05][FB][3F] >/picrd 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] 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] [01] >/exit リモート接続を終了しました logfile closed at Sat Mar 08 09:09:24 2025 |
さらにさらに。
念のためにPICKITUでVppだけではなくてVddについてもオシロで確認してみたところVddは最初にONになったあとはREADが終った後もOFFになることなくずっとONになったままでした。
私は安全のために/PICRDや/PICWRが終ったあとはVddはOFFにしていたのですが、VddはずっとONにしておいたほうがよいのかもしれません。
PIC16F627やPIC16F84ではここまですることなくVddとVppをほとんど同時にONにしてもまともに動作したのですが、考えてみればVddをONにしてからある程度の時間MCLR=Lにしてリセットを十分利かせてからVppをONにしたほうが確実であろうことは理屈としてそういうことだと首肯できます。
確かに無難な対策ではありますが、そのようにすべきでありましょう。
結論として、どうもPIC16F84Aは扱いがちょっとシビアなようです。
ここまでしなければならないのかというところがちょいと何なのですけれど。
ちょいと恨み節であります。
うむむむむ。
この数日間が実に悔やまれる。
ともあれ。
今度こそ本当に。
やっと。
これにて一件落着。
です。
あ。
ちがう。ちがう。
まだ、/ERASEを確認していなかった。
でも。
本日はここまでです。
それは次回にて。
PICBASICコンパイラ[第228回]
2025.3.8 upload
前へ
次へ
ホームページトップへ戻る