■リモート制御の電源タップ2号機を組んだ。前の日記で「ローサイドスイッチで」と書いたけど、それは結局やめにして、吸い込み制御で。給電線のセンシングは基板上の余裕がないことからやめた。実現したのは、2コ口のサービスコンセントと、DC3.3VのACアダプタ用の非制御コンセントを搭載したということ、ケースに収めたということ。それと、制御用のプロトコルはだいぶこなれた。USARTのなぞのリングバッファのバグも解消した。
ローサイドスイッチをやめたのは、いろいろ紆余曲折あったのだけど、要するに電流が流せればいいということと、基板上のスペースが少ないということからの妥協。スイッチングは3.3V/300Ω→11mAではだめで、3.3V/200Ω→約16mAで動きました。データシートでは5mA~みたいなことが書いてありましたが、回路上何か間違えているのかな。細かく抵抗変えて閾値を探すつもりはないので、そのまま200Ωを使っています。
制御ソフトのプロトコルはだいぶ洗練したというか、単純にした。デバイスの応答はEOF(0x1a)を終端として、そのコンテンツの解釈はコマンド発行側にゆだねるというやり方。TCPみたいにコマンド-レスポンスがパケットに細切れにされる世界ではなく、言うなれば常に1パケットに収まる世界だから、コマンド-レスポンスはコマンド発行側のコンテキストに収まっている。もともとXBeeを使って複数のデバイスが応答を返す可能性があるけれど、それが問題になるのはデバイスが起点でデータが送られてくるケースで、その時は受信側に応答が殺到して区別できない。トークンリングみたいな相互通信抑制のやり方がいいのかな。
USB-USARTブリッジの通信で発生していたなぞのバッファリングは解消した。こちらで作ったデバイス側の受信バッファリングのバグ。ソースコード眺めてすぐに気付いたので、前は疲れていたのかな。このバグに気付かなかったのはちょっとがっかり。
USART通信の箇所は固まったので、あとはXBeeモジュールを使えるように部品を追加すればひとまず完成ということに。ヒューズとか端子台とかディップスイッチの回路とか、改善点はいろいろあるけれど。