リモコンコード表示器
以前、PCMチューナのリモコンコードの読み取りでは、仕様抜きで単にコードを再現するための物でした。
今回、NECフォーマットが資料として、ある程度詳細に出ていたので、この際コードの表示器を作りました。
また、ヤフオクで数種類のリモコンを大量に落札したので、有効利用する為もあります。
リモコン信号の受信は秋月のTFK4というキャリア40KHzの受信ユニットです。
本来一般的な38KHzのが好ましいのですが、2KHz程度のマージンはあるようで、問題なく動作しています。

データフォーマット
NECフォーマットは、全4バイト(32ビット)のデータを一回のリモコン押下しで送信します。
データの構成は以下の様になっています。
| リーダーコード | カスタムコード(16ビット) | データコード(8ビット) | データコードのビット反転(8ビット) |
データの各ビットはキャリア信号(38KHz〜40KHz)のオンとオフの時間の組み合わせで表現します。(青部分)
0.56mSのキャリアオン+0.56mSのキャリアオフで論理0を表現し、
0.56mSのキャリアオン+1.69mSのキャリアオフで論理1を表現します。
データ順は最下位ビットが先頭です。(LSBファースト)
リーダーコード部は、9mSのキャリアオン+4.5mSキャリアオフで、データブロックの先頭である事を表します。(白部分)
また、キー押下しがリピートの場合、一度通常のデータブロックが送られた後、2回目以降は、
データの無いリーダーコード部だけのブロックが送られます。
この場合、通常のデータブロックと見分ける為に、リーダーコードが9mSのキャリアオン+2.25mSキャリアオフとなります。
なおリモコンコードの詳細は、上記リンクをご参照下さい。
以下、リモコン受信ユニットからの出力波形です。
一回の押下しのデータ全体波形(負論理)

リーダーコード部の波形(負論理)

データ0の波形(負論理)

データ1の波形(負論理)

データ受信の方法
もっとも安易に考えられるのは、各キャリア信号の立ち上がりから、次の立ち上がりまでの時間を測る事です。
いつものように、マイコンはアトメルのAT90S2313を使うので、この用途にはタイマー1のキャプチャー機能が良さそうです。
タイマー1のキャプチャーは、PORTDのビット6(ICP端子)の信号変化で、16ビットカウンターの値を、
ICR1レジスタに格納し、その値を読み取ると同時に割込発生が可能です。
もう御解りのように、ICP端子にリモコン受信ユニットの出力をつなぎます。
リモコンユニットはアクティブLなので、立ち下がりエッジで割込が発生するように設定します。
この割込ルーチンの先頭で、読み取ったICR1レジスタ値から、以下の判定をします。
(同時に16ビットカウンターの値をクリアし、次の測定に備えます。)
各データを32ビット読み取ると、1ブロックの読み取り完了です。
お気づきのように、各ビットは次のキャリアが来て、初めて1、0を判定する事が出来ます。
では32ビット目はどうするのか、という疑問が出ます。
そのために、ストップビットと呼ばれる0.56mSのキャリアで、この矛盾を解消しています。
データ表示の方法
作品のリモコンコード表示器の写真を見ると、4桁の7セグLEDが乗っていますが、
リモコンフォーマットは4バイトなので、8桁の数字を表示するする必要があります。
その為、1秒毎に交互にカスタムコードとデータコードを切り換え表示します。
どちらを表示しているか判断出来るように、赤、緑LED点灯で明示しています。
4桁の各セグメントは、1mS毎のダイナミック点灯となっています。
1mS周期のタイミングは、タイマー0を使います。
詳細はソースファイルをご覧下さい。
リモコンの生データを見る
このリモコンのキャリア周波数は何KHzかを知りたい場合があります。
そんな場合の為に、ボード上にフォトTrを乗せてあります。
ただ、信号は微少なので、上手く観測するには、リモコンの向きやら距離やらの調整が結構大変です。
ダウンロード
| ファイルの種類 | ファイルの形式 | コメント |
| 回路図 | PDF | |
| ソースファイル | 非圧縮 | コンパイラはCodeVisionAVR |