受信したリモコン信号を解析するには、信号のエッジを用いて、信号の各期間の長さを測定します。
赤外線リモコン用プリアンプからは負論理でデータが出力されますので、
以下の説明は負論理の入力信号として説明します。
(1) リーダ・コード部
リーダ・コードは 9msの on期間ですから、入力信号の立ち下り
(A)をエッジ検出割り込み機能を用いたり、
プログラムによるポーリング処理で検出して、そこから立ち上がりまでの時間測定を行います。
このとき、タイマのキャプチャ機能を使用すると立ち上がり
(B)の検出と時間測定を同時に行えます。
このとき得られる時間がどの範囲なら正常なリーダ・コードと判断するかは誤動作対策を主に考えるか、
リモコンの電池が消耗してもできるだけ受信できるようにするかで決まってきます。
他のフォーマットとして、この長さが 8.5ms程度のものがありますので、
それとヘッダ・コードだけで区別しようとすると 8.7ms程度以上かで判断する必要がありますが、
フレーム全体で区別する場合にはもっと小さい値を用いて判別できます。
次に立ち下り
(C)までの時間測定を行います。
基本的には下記の2種類の時間があり得ますので、
得られた値が 4.5msと 2.25msの中間の 3.4ms以上かで通常のコードかリピートのコードかを判別できます。
リピートの場合には次はフレーム・スペースの確認となります。
リーダ・コードの時間関係
(2) カスタム・コードやデータ・コード部
リーダ・コードの検出が完了した後は、カスタム・コードとデータ・コードの検出を行います。
厳密に行うには、on/off それぞれの期間を確認する必要がありますが、
次の立ち下りエッジまでの時間 (1ビットの時間) を確認するだけでデータの 0/1を判定可能です。
2.25ms (データ=1) か1.125ms (データ=0) の判定ですから、この中間値で判断するのが簡単です。
ただし、間隔が長すぎるときには他のフォーマットでデータが既に送り終わった場合も考えられるので、
上限値も必ず確認してください。
ここでは、32ビット分の信号がキチンとあるかを確認してください。
32ビット分が確認できたら次にフレーム・スペースを確認します。
(3) フレーム・スペース
ここでは、フレーム全体が 108msになっているかの確認を行いますが、
それほど厳密な確認ではなく 32ビット以上のデータがこないことを確認してください。
32ビット分が受信できたら、カスタム・コードのチェック、データ・コードとその反転コードを確認してください。