Darkside(https対応しました)

名前

URL

タイトル

コメント

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)]

この記事へのトラックバックPingURL

Comments

TrackBacks

Darkside(https対応しました)

Generated by MySketch GE 1.4.1

Remodelling origin is MySketch 2.7.4