2020年8月16日(日) 21:07
PICが元あった位置の上空に、小基板を浮かせた状態で設置。
パターン面の絶縁とか固定は、動作確認が済んだ後で行う。慌てて処理して、配線ミスが後から発覚すれば、目も当てられない。
電源を入れると、何も起こらない。
液晶画面に、何も表示されない。
LCDは正常に表示できることが確認済みなので、PIC側の問題である。
まず、起動直後にブザーを鳴らすようなプログラムを書き込む。電源を入れると、ちゃんとブザーが鳴った。
次に、LCD電源コネクターに5Vが来ているのを確認。これもOK。となると、残るはPICのI2C配線2本だけだ。GPIOピンと、コネクターの導通は問題なし。あらゆる部分が問題無しだが、プルアップ抵抗で遂に異常発覚。配線2本のうち片側はVCCとの間に1.8KΩが計測されたが、もう1本はVCCと短絡している。
結局、原因は使用した基板だった。これ間違えて、水平方向に穴同士が短絡しているIC実装向き基板なのだ。特殊パターン基板であり、汎用基板ではない。間違って購入し、扱いに苦慮している。
今回はPIC単体実装に近いので、在庫処分のチャンス!と持ち出した。そして、水平方向にパターン短絡していることを失念し、I2Cプルアップ抵抗を取り付けてしまった。実際は、パターンが短絡しているので1.8KΩが無意味。実装の物理的都合で、片側だけが罠にハマった。
カッターナイフでパターンを切断したら、LCDが普通に表示されるようになった。
幾つかバグを取り一見正常に動作するようになったので、改めて筐体を閉じてレーザー銃にセット。さすがに今回は、ちゃんと閉じることができた。
本来より遥かに高い電圧で、ローバッテリーになるようにしてある。レーザーを発射し、ローバッテリー時の挙動を確認。警告状態には想定通りに入ったものの、そこから徐々に警告レベルが上がるのではなく突然レーザー停止になった。ブザー鳴りっ放し。更に、レーザーは停止するのに空冷ファンは停止せず、LCD表示もセル電圧表示のまま。
ローバッテリーが警告ではなく停止レベルになると、LCD表示が変化するし空冷ファンだって停止する。バッテリーの消耗を抑えるため、当然だ。
改修前と同様、ローバッテリーが早過ぎる。しかも、ローバッテリー時に行っているはずの処理と動作が異なる。
こうなると、デバッグは極めて面倒臭い。
プログラムを書き変えるたびに、レーザー銃から外してコントロールBOXを分解し、PICを取り出す。またPICをセットしてコントロールBOXCを組み立て、レーザー銃にセットする。猛烈に、デバッグ効率が悪い。
しかも、散々苦労してデバッグした結論が、極めて不穏当。これ、明らかに、XC8のバグにハマってる。
8ビットマイコン用のCコンパイラーというシロモノは、どうも完成度が怪しい。
具体的には、固定文字列が恐ろしく信用できない。メモリー節約でもしているせいなのか、固定文字列の実装が疑惑だらけなのだ。正常に固定文字列をメモリーに実装できていないと疑われる挙動だらけで、しばしばメモリーをブッ壊している疑惑がある。
void foo("文字列");
これを安心して記述できないCコンパイラーって、どうよ?
written by higashino [ファイバーレーザー] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]
Generated by MySketch GE 1.4.1
Remodelling origin is MySketch 2.7.4