■以前からほそぼそと作っていた新しい制御デバイスのファームと基盤回りができあがった。あとはケースに収めるだけ。温湿度、気圧、照度センサを載せて、赤外線リモコン、外部リレー制御、プッシュボタンと盛り込んで、初めてAVRのピンを使い切ったと思う。自分ではいくつか新しい試みをしていて、ただ、世間的には珍しくない回路ではある。
1)ディップスイッチの読みをアナログにした。
4ビットのディップスイッチを直列につなぎ、4つあるスイッチの裏側それぞれに異なる値の抵抗を平行で取り付けました。1つのスイッチをONにすると対応する抵抗の両端が短絡し、オミットされるので、スイッチ全体の抵抗値が変化します。ディップスイッチに使った抵抗は1K,2K,3,9K,8.2Kを使い、スイッチ外部に置いた固定抵抗との分圧で電圧を読み取ります。
2)プッシュスイッチ
これは単純に割り込みを使ってINTを読み取るだけです。割り込み発生を検知した後、一定サイクルで動く割り込みフラグチェックでソフトリセットさせることで、チャタリングを検出しにくくしています。
3)Xbeeのアソシエーション出力を外部タイマに使う
Xbeeのアソシエーションインジケータはデフォルトで2Hzの方形波を出します。専用のRTCと比べたら信頼性はあてにできないと思うのですが、正確さを必要としなければおおまかな外部タイマーとして利用できます。今回作ったファームでは、各種センサ出力を定期的に記録するために使いました。
ファームウェアの基本的なモジュールは過去に作ったものからの再利用ですが通信バッファ回りを見直してデバイス側で通信の拾いこぼしが出ないようにしています。Xbeeでは文字単位のドロップではなく、トランザクション単位でドロップすることがあるのでその対策をと思ったのですが、どうもコーディネーター側でドロップが出ているようです。LinuxサーバーとXbeeとの間ではフロー制御がうまくいっていないようなので、そちらにもデバイスを作ってコーディネーター側のフロー制御を強化する必要がありそうです。