DENON CS-PCMチューナー(DTU-1600AL)のリモコンコード解析


左写真の上段がDTU-1600ALで写真右がリモコンです。
1998年に購入の、まだデノンになる前の頃のCS-PCMチューナーです。
引っ越し先でもミュージックバードは絶対に聴きたかったので、真っ先にアンテナを設置しました。
8畳の洋間をオーディオ部屋にして、放送もそこで聴くことを想定していたので、同軸ケーブルも
その部屋のエアコンから引き込みました。
しかし、実際には隣の仕事部屋にいる事がほとんどなので、音声信号を平たいモジュラー線で廊下をはわせて
仕事部屋のミニコンポで聞いています。(驚いたことに、思ったほど音が劣化しません)
しかし、当然リモコンが届かないので選曲が出来ません。
そこで、同梱リモコンと同様の機能をする赤外線発生器を作り、キー情報を仕事部屋から何らかの通信
手段で送り、リモート操作をしようと思いつきました。
以下、誤りです。
リモコンコード解析結果
リモコンから出た信号をフォトTrで受信し、キャリア周波数やデータ構成を解析しました。
一回のキー押下しに対して以下の様な波形であることが解りました。
キャリア周波数:40KHz
同期信号:キャリア(9mS)
データ0:無信号(1120uS)
データ1:キャリア(560uS)+無信号(560uS)
キーを押すと、最初の9mSは受信側を起動する同期信号と思われる連続したキャリアが出ます。
それ以降7バイト分のビット情報が続きます。
1ビットの時間は1120uSで、各ビットはキャリア(560uS)+無信号(560uS)で論理1を示し、
無信号(1120uS)で論理0を示します。(論理1,0は反対かも知れません)
以下各キーに対する、データ構成を示します。(MSB先頭の順です)
以下2004/5/24の作品のよって読み取った結果です。
| キー | キーに対するデータ構成(HEX) |
| POWER | EE 13 F7 08 |
| 1 | EE 13 EF 10 |
| 2 | EE 13 EE 11 |
| 3 | EE 13 ED 12 |
| 4 | EE 13 EC 13 |
| 5 | EE 13 EB 14 |
| 6 | EE 13 EA 15 |
| 7 | EE 13 E9 16 |
| 8 | EE 13 E8 17 |
| 9 | EE 13 E7 18 |
| 10 | EE 13 E6 19 |
| 11 | EE 13 E5 1A |
| 12 | EE 13 E4 1B |
| SOUND | EE 13 E0 1F |
| + | EE 13 FF 00 |
| − | EE 13 FE 01 |
解析結果確認
上の解析結果を確認するため、赤外線でコードを出力するボードを作りました。
タイミングをきっちり合わせたのが良かったのか、実際のチューナーでもあっさり受信成功でした。

解説
回路図ではRS-232Cのコネクタが配置されていますが、まだ実装していません。
ソフトもSIO部分は、まだ出来ていません。
マイコンはROM2KのAT90S2313を使いました。
40KHzのキャリア信号を作るのにタイマー/カウンター1が便利です。
ボード上の4つのSWはそれぞれリモコンSWのPOWER、1、+、−に対応します。
各ビットの信号送出時間などはダミーループで時間稼ぎします。
リモコンコードなどの固定データはEEPROMに格納します。
肝心の赤外発光ダイオードは東芝のTLN105Bというピーク波長が950nmのタイプです。
これに約50mA流して発光させます。
コンパイラは前回も使ったGCC-AVRです。今のところバグには遭遇せず順調に使えています。
最適化を抑止しているので結構ROMを喰いました。
ダウンロード
| ファイルの種類 | ファイルの形式 | コメント |
| 出力ボード回路図 | PDF | |
| ソースファイル | WINZIP | コンパイラはAVR-GCC |
パソコンと接続
上記AVRの赤外線発光ユニットにSIO機能を持たせ、パソコンからのRS-232Cを通して
選曲出来るように改良しました。
パソコン側画面はこのようになります。

さすがに2KのAVRでもSIO機能を入れると、足りなくなり最適化オプションを有効にしました。
最適化無しで2Kを越えていたのが、1740バイトほどになります。
一挙に300バイトも減ってしまうのは強力ですが、大丈夫かなという不安も残ります。
問題なく動作していますが、一つだけ以下の点が気がかりです。
GCC-AVRの割込みは、
INTERRUPT(SIG_OVERFLOW0)
{//割込み許可有り
foo();
}
SIGNAL(SIG_UART_RECV)
{//割込み許可無し
foo();
}
のようにINTERRUPTで宣言された割込み関数は、その関数が呼ばれた直後に
多重割込みが出来るようにマスター割込みを許可します。
一方SIGNALで宣言された割込み関数は禁止のままです。
最初、SIOの受信割込みをINTERRUPT(SIG_UART_RECV)のように割込み許可にしていたら、
意図通りに動作せず、試しにSIGNAL(SIG_UART_RECV)と宣言したら正常に動作しました。
これが、最適化によるものかどうかは、サイズオーバーで最適化がはずせないので確認出来ませんでした。
ダウンロード
| ファイルの種類 | ファイルの形式 | コメント |
| 改良後のAVR側Cソース | WINZIP | コンパイラはAVR-GCC |
| パソコン側VCプロジェクト | WINZIP | コンパイラはVC6.0 |