H8/3664 赤外線リモコン送受信 bookmark
業務用のプラズマディスプレイを家庭のテレビとして使っていた時、「ビデオのリモコンで電源を操作できない」(リモコンコードが違うため)ということにストレスを感じていました。
そこで「リモコンを変換する機械」を作った時のコードです。
赤外線リモコン受信モジュールをそのままH8/3664のP81(FTIOA)に、赤外LEDはそのまま抵抗入れただけでP76(TMOV)にそれぞれ繋いだだけの基板で動作します。
いろんなWebの赤外線リモコン関連記事を見ているとかなりゴリゴリなコードが多いようなので、せっかく自分なりに組みなおすんだったら、ってことでちょっと凝って(笑)、μITRON準拠のHOSを載せて、その上で独立して動くタスクとして赤外線リモコン送受信ルーチンを実装してみました。
ダウンロード bookmark
更新履歴 bookmark
- 2004/02/15
Version 0.01
初版公開
内部構造について bookmark
このコードはリモコンの送受信タイミングを見るのにH8/3664のタイマW、赤外線リモコン発信の38kHz変調にタイマVをかなりバリバリ使っていますので、他のCPUへの実装は結構難しいかもしれません。
実際の詳しい動作はソースをそのまま読んでいただくとして、概要だけ簡単に説明すると…
- リモコンの受信は、H8/3664のタイマWによるインプットキャプチャを使いタイミングを測定しています。割り込みコンテキスト内でリモコンのデータデコードまで行い、デコードが完了した段階で「リモコン送受信タスク」をイベントフラグで励起し、そこで固定長メモリプールを確保してデコードしたデータを書き込み、メールボックスでアプリケーションレイヤに通知します。
- アプリケーションレイヤはメールボックス経由でデータを受信したら、そのポインタに展開されているデータを読み、処理を行います。処理が完了次第アプリケーションレイヤ側でメモリプールの開放を行います。
- アプリケーションレイヤからリモコンの送信を行いたい時は、アプリケーションレイヤが固定長メモリプールから必要なメモリを確保し、そこに送信したいデータを書き込みます。その後メールボックス経由で送受信タスクへ通知し、さらに送信開始をイベントフラグで通知すると送受信タスクが送信を開始、送信終了次第送受信タスクがメモリプールを開放します。
こう書くと小難しく見えますが、実際はアプリケーションレイヤと赤外線送受信レイヤが完全に分離しているので取り扱いは簡単です。