例年になく花粉症が酷くなって、目がしょぼしょぼしています。鼻も詰まって十分な睡眠が取れてない。今日は会議で眠気を抑えるのが大変でした。以前も書いたけど、日本中で生産性が落ちて経済損失になっているのではないかと思う。
夕食後しょぼしょぼ目の状態でパソコンを睨んで、TOFセンサを使った近接スイッチ(非接触スイッチ)のプログラムを見直しました。
ひとつはWDT(ワッチドッグタイマ)による無限ループ監視です。I2Cをソフトで実現しているのと、TOFセンサからの応答が想定外だったりして無限ループする可能性があるので、その対策です。WDTはタイマのカウント溢れにより約18ms毎にリセットがかかるものです。無限ループしていてもリセットで初期状態(プログラムの先頭に飛ぶ)になります。プログラムが正常に動いているときは、カウンタが溢れる前にWDTをクリアするCLRWDT命令を発行することでリセットがかからないようにします。
18msは短いのでプリスケーラを使ってもう少し時間を空けても大丈夫なように調整します。今回、1:32のプリスケーラ設定で18ms x 32 = 576ms以内にWDTをクリアするようにしました。18msの精度はあまり高くないようなので余裕を見て早めにクリアするようにしています。
先週末にPICやTOFセンサはユニバーサル基板に実装しましたが、もう1セットあるのでそちらを使いブレッドボード上でデバッグ中。某ジャンカー界隈では「ジャンクは2個買え」という教えがあるようですが、「部品も2個買え」です。万が一壊れていたときなど、自分が悪いのか部品が悪いのかの切り分けにも必要です。こうして部品が溜まっていく。
プログラムの二つ目の見直しは、小型液晶画面への表示機能の削除です。TOFセンサのデバッグ時に距離を表示していたI2Cで繋ぐ小型液晶は不要なので回路からも外し、プログラムからも削除します。液晶に数字を表示するために組み込んでいたBCD変換(バイナリから2進化10進数変換)のコードを削除したり、表示するコードを削除。これにより変数レジスタもかなり削減されたので整理しました。また、無駄なコードも見直して少しすっきり。
これで週末にはLED照明に組み込める目途は付きました。まだ修正するかも知れないので、ソースの公開はもう少ししてから。

0 件のコメント:
コメントを投稿