■家電制御デバイスはフィールドテスト中。サーバーと通信を繰り返して複雑なシーケンスを処理しなくて良いので、だいぶいい感じ。赤外線リモコン操作は確実性が低いので、スイッチ操作をしたら実際に電源が入ったかどうかを確認しないとならないのだけど、そのあたりの操作がデバイスで閉じて処理できるのでやりやすい。ただ、ちょっと間違えると応答待ちでループに入ってしまったりして、その手のバグ出しはちょっと手間がかかってる。ちょっとした条件の違いでハマることがあったりするし、家電品の消費電力量がアナログ量なので微妙にぶれるところがあったりするのも難しいし、面白いところです。
それはそれとして、デバイス作りがひと段落ついたのでATmegaのお勉強。今までI2CはADコンバータのピンと重複していることもあって自前のルーチンで処理していたのですが、ATmegaシリーズにはペリフェラルとしてTWIモジュールを持っているのでそれをまじめに使ってみました。
マスタモードで通信するI2Cのサンプルライブラリをいくつか見つけて、データシートを時折確認しながら動くかどうかを試していたのですが、最初はなかなかうまくいきませんでした。ブレッドボード上に組んでいたのですが、ジャンパ線を適当に使っていたのがよくなかったらしく、SDAとSCLの線長を合わせたら動くようになりました。今回I2Cの外部デバイスに選んだのは赤フグから出ているI2Cの8セグ(TWIディスプレー)ですが、クロック周波数は400Hz程度にまで落とさないとだめでした。ブレッドボードでなく、まだユニバーサル基盤など使えばもう少し成績は良くなるかもしれません。
I2C対応チップの中には正規のI2Cに対応していない、変則的なプロトコルを実装しているものもあって、そうしたチップについては自前で組んだI2Cモジュールでないと対応できないのですが、標準的なものであればもちろん組み込みペリフェラルを使ったほうが良いわけです。ただ、ADCのチャンネルを2つ使われるので、そこはトレードオフになっていて、たぶん、外付けのアナログマルチプレクサなどでチャンネルを補うことで対応できるだろうと思っています。まだ、具体的に作るものは考えていないのですが、ちょっと調べておこうかなと。