メインページへ

AKI-H8(3048)を使った赤外線リモコンの解析

記 2006年7月3日

赤外線リモコンの応用機器はいくつか作ってきたのですが、赤外線リモコン信号の解析は製作中の 機器で行ってしまうので解析装置としては残っていません。手軽に使えるものがあるとちょっと便利なので、 作っておこうと思いました。

(ここでは秋月電子様のコンパイラ、リンカ、モニタデバッガを使用してソフトを作成しています。
Renesas純正のHEWとモニタデバッガ、Htermを使用して新たに作り直しました。よろしければこちらも ご覧ください。 AKI-H8(3048)を使った赤外線リモコンの解析2)(2010/9/26)

開発方針など

以前からC言語を使ったH8マイコンの開発には興味がありました。自分のやりたい範囲 では、たいがいのことはPICマイコンをアセンブラで使用することで足りていたのですが、 マイコンの機種に依存するアセンブラにとらわれないC言語と、PICに比べ非常に大きな プログラムを書き込めるH8を使用できれば、より大きなシステムを手軽に開発できるように なるはずです。今回の場合もPIC+アセンブラで作れるのですが、H8マイコン+C言語 を体験しておきたかったのでチャレンジしてみることにしました。

秋月電子様のAKI−H8+マザーボードを使用しました。これを使うと赤外線信号解析に 足りない部分だけを自作すればよいのでハードの設計が非常に楽になります。 C言語コンパイラも秋月様の物を使いました。
H8Mother

赤外線信号の解析方法

リモコンの赤外線信号はデジタル信号として1,0の信号として送受信されます。この場合の 1,0の論理値表現は{電圧レベルのH(高い)、L(低い)}={論理値の1、0}のような 単純なものではなくHの時間、またはLの時間の長さによって決まります。

下図は赤外線リモコンの信号の例です。この例では電圧レベルがHの時の時間の長さによって 論理値の1,0を表現しています。
信号例

1,0を表現する電圧レベルをH,Lのどちらにするか、時間の加減をどの程度にするかは 製品により様々ですが、HとLの時間を計測できればリモコンの信号を解析することが 可能となります。

リモコンの赤外線信号は上記のような電気信号で表現されるのですが、実際の赤外光の 送受信ではH,L信号を約38KHzで振幅変調したものが使われます。これは、自然光や 室内照明などによる干渉を受けないようにするためです。
一般的にリモコンの赤外線信号の受信は受信モジュールを使用して行います。この受信モジュール には変調された赤外線信号を復調する機能が備わっているので、マイコン側では変調・復調を意識することなく 信号を受信することができます。

赤外線信号の受信と保存

赤外線信号の受信には、赤外線リモコン信号受信モジュールCRVP1738(これも秋月様から購入) を使用しました。このCRVP1738から出力される電圧レベルH,Lの時間を逐一計測して内臓RAMに 保存し、受信完了後にまとめてパソコンに転送することにしました。
信号保存

回路と基板

作成した基盤を以下に示します。ピンヘッダとCRVP1738、ジャンパーだけで構成されています。
右の写真はH8マザーボードに装着したときの写真です。
基板表 基板裏

ソフトウェアの処理概要

メイン処理

以下の初期化処理を行う。

  • LCD表示機能
  • キー入力ポート
  • SCI1 RS232C通信機能
  • ITU1 10uS周期のクロックを生成、TIOCA1から出力
初期化処理を終えたらキー入力状態で待機。

赤外線信号受信処理

スイッチS1が押されたら以下の手順で受信処理を行う。

  1. CRVP1738の出力が接続されたPA-2を監視し、Lレベルになるまで待機
  2. PA-2がLレベルになったらITU0を初期化。
    • ITU1が生成したクロックを入力クロックとし、TCLKDから入力
    • TIOCA0入力の立ち上がり、立下り両方でGRA0にインプットキャプチャ
    • インプットキャプチャ、オーバーフローで割り込み許可
  3. インプットキャプチャの割り込みごとにGRA0の値をRAMに保存。
    保存数が200になったら割り込みを禁止し、ITU0を停止して受信処理終了。
  4. オーバーフロー割り込みが発生したら割り込みを禁止し、ITU0を停止して受信処理終了。

受信データRS232C出力

スイッチS2が押されたらRAMに格納された赤外線信号データをシリアルポート (RS232C)に出力する。送信するデータは10進数キャラクタ文字列に変換して 送信する。

ソースファイル

赤外線解析Cソースプログラム
ベクタアドレス指定アセンブラソースプログラム
LCD表示Cソースプログラム
RS232送信用Cソースプログラム

ハイパーターミナルの設定

RAMに保存された赤外線データは、ハイパーターミナルの機能を使ってパソコンに取り込みます。
WindowsをOSとして、RS232C(DSUB9PIN)ポートを装備したパソコンが必要です。
以下のようにハイパーターミナルを設定します。

接続方法
COMXへダイレクト(X:1〜4 パソコンの環境に合ったものを選択してください)
ビット/秒
9600
データビット
パリティ
なし
ストップビット
フロー制御
なし

ハイパーターミナルの”テキストのキャプチャ”を使用するとテキストファイルとして保存 できて便利です。

データを解析する

昔に、秋月様で買ったリモコンキットのリモコンデータを取ってみました。
秋月リモコン

各ボタンの生データは ここにあります。
このデータをエクセルにまとめたものが これです。
データの単位は10μ秒です。

このデータでまず目に付くのが約34000μ秒のHレベルです。おそらくこれがデータの 区切りであり、ひとつのデータを送信し終えたことを表すものだと思われます。先頭からこの 34000μ秒のHレベルまでのデータを以下に示します。 データ加工前

データの最初の3000μ秒以上のLHはヘッダーだと思われます。
Lレベルの時はすべて950μ秒位で安定していますが、Hレベルでは約800μ秒のときと2500 μ秒のときがあります。このことから、Lレベルの時間を固定してHレベルの時間を変化させることに って1と0の論理値をあらわしていることが分かります。
上記のデータからヘッダーとLレベルデータを削除すると以下のようになります。 データ加工1

このデータの約800μ秒を0に、約2500μ秒を1に置き換えると以下のようになります。 データ加工2

ここでそれぞれのデータ観察すると、後半の12ビットは前半の12ビットのデータを論理的に 反転させたものであることが分かります。たとえばpowerのデータで見てみると、
前半:0001 0100 0001
後半:1110 1011 1110
となっています。これは、ビットの誤りがないかどうかを確認するための工夫だと思われます。
データ加工3

さらに観察すると、前半の6ビットがすべて同じであることに気が付きます。おそらくこの部分は 機種コードのようなものだと思われます。よって、リモコンのどのボタンが押されたかを純粋に表す データは7ビット目から12ビット目までの6ビットであると判断されます。
データ加工4