赤外線リモコン制御モジュール


IR-CTRLは、赤外線リモコンの通信制御モジュールです。日本で使用されている赤外線リモコンの通信フォーマットの殆どを占めるNEC,AEHA(家製協),SONYの3種類の通信フォーマットに対応してみました。送受信は割り込みで駆動されるので、リアルタイム・システムにも容易にポーティングが可能です。

アプリケーション・インターフェース

アプリケーションから呼び出す関数は、次に示す通りです。

/* 初期化 */
void IR_initialize (void);
/* フレーム送信 */
int IR_transmit (
    uint8_t fmt,           /* フレーム形式 (NEC,AEHA,SONY) */
    const uint8_t* data,   /* 送信するバイト列へのポインタ */
    uint8_t len            /* 送信するビット数 */
);

使い方

送信

IR_transmit()を呼び出します。関数からはすぐに戻り、バックグランドで送信を行います。戻り値が0以外の場合は送信が開始されています。不正なパラメータや通信がアイドル状態以外だった場合、戻り値が0になり送信はされません。fmtNECを指定したときは、lenには0または32が指定可能です。0を指定した場合はリピート・フレームが送信されます。fmtAEHAを指定したときは、lenには0または48以上の8の倍数が指定可能です。0を指定した場合はリピート・フレームが送信されます。fmtSONYを指定した場合、lenには12,15,20が指定可能です。送信が完了するとIrCtrl.stateの値がIR_IDLEになります。送信間隔のタイミング制御はアプリケーション側で行います。

受信

受信はバックグランドで行われます。ワークエリア内のステータスを見ることによりフレームの到着を認識します。フレームが正しく受信されると、IrCtrl.stateの値がIR_RECVEDに変わります。IrCtrl.fmtは到着したフレームの種類、IrCtrl.lenはビット数、IrCtrl.buff[]はデータのビット列を保持しています。フレームの正当性のチェック(種類、長さ、チェックサム等)はアプリケーション側によって行います。フレームを処理したら、IrCtrl.stateIR_IDLEをセットしてバッファを解放し、次の通信に備えます。なお、送信動作中は受信できません。

ポーティングのしかた

対象システムには、

が必要です。コンペア機能とキャプチャ機能が同じカウンタで同時に使える場合はそれ1個でOKです。カウンタのサイズは16ビット以上が必要です。8ビットでは十分な精度が得られない場合があります。ソースファイルの変更点は、ir_ctrl.c内のマクロにプラットフォーム依存機能を記述するようになっているので、ここに適切な機能を書き加えるだけでOKなはずです。割り込み処理ルーチン内にはさらに割り込み関係の処理を追加する必要があるかも知れません。具体的な例は圧縮ファイルに同梱のサンプル・コードを参照してください。

資料


戻る