メインページへ

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

HEWを開発環境として使用

赤外線リモコン信号解析セットの製作

記 2010/9/22

AKI-H8/3048Fマイコンボードを使った赤外線リモコンの解析プログラムは以前にも一度作りました。
[AKI-H8(3048)を使った赤外線リモコンの解析]
しかし、これが少々不便であるため専用機として作成しなおそうと思い立ちました。なぜ不便なのかと言うと、 AKI-H8マザーボードは時々ほかの用途で使用することがあるためプログラムを書き換えることがあるためです。 用途ごとに一々書き換えを行うことも意外に面倒ですし、少し手直ししようと思っても以前の開発環境を思い 出すところからはじめなければならないのも(最近ではHEW(Renesas純正の開発環境)を使用することが多いので) 思ったよりも手間がかかります。

今回は、AKI-H8マザーボードのミニ(縮小)版を自作して、そのマザーボード上にAKI-H8/3048マイコンボードを 実装する形で専用機を作りました。最近はAKI-H8/3052をメインとして使うことが多いので、AKI-H8/3048は余っていました。 また、このAKI-H8/3048が占有していたAKI−H8マザーボードが一枚空きます。余っていたたAKI-H8/3048を有効活用する ことができる上に空いたマザーボードもまた、AKI-H8/3052用に改造することができてこれも有効活用できます。

前回は秋月電子様のコンパイラやリンカを使って開発したのですが、今回はRenesas純正のHEWを使って開発しました。
また、前回よりも時間計測の分解能を上げるとともに、パソコンからの指示によって計測の開始・データの転送などが できるようにしました。

赤外線リモコンの信号について

赤外線リモコンとは、テレビやエアコン、ステレオなどを購入するとついてくる一般的なリモコンのことです。
機器を遠隔操作するために赤外線信号を利用して動作指示の信号を送受信することから赤外線リモコンと呼ばれています。

ここでは赤外線信号についての簡単な説明をします。赤外線リモコンのデータ送信・受信の仕組みやフォーマット などについて詳しく知りたい方は、より詳しく説明しているサイトが数多く存在しますのでそちらを検索して参照 してください。

マイコンから見るリモコン信号

信号例

図1.受光モジュールの出力
赤外線リモコン信号を受信する場合、一般的に赤外線リモコン用の受光モジュールを使用します。受光モジュールによって 受信された信号は図1のような波形で出力されます。
赤外線リモコンのデータ送信フォーマットにはいくつかの規格が存在します。主なものとしてはNECフォーマット、家電製品協会 フォーマット、SONYフォーマットなどがありますが、これら以外にも独自の規格を使用しているメーカーも存在しています。
尚、図1は便宜上適当に書いたものなので、特定のフォーマットに基づいてはいません。
図1の波形を簡単に説明します。
  • 信号が0Vになっている期間が赤外線が照射されている期間です。つまり、リモコンの赤外線LEDが点灯している期間を 示します。(点灯といっても実は38kHz(40kHz)でオン・オフを繰り返しています。受光モジュールの出力からは見えないようになっ ています。)。この期間をオン期間と呼ぶことにします。
  • 信号が5Vになっている期間が赤外線が照射されていない期間です。リモコンの赤外線LEDが消灯している期間を 示します。この期間のことをオフ期間と呼ぶことにします。
  • 最初にリーダ・コードが送信されてきます。このリーダ・コードによってこれからデータが送られてくることを 知らせます。
  • オン期間とオフ期間を合わせた時間でひとつのビットデータが表現されます。図1では時間が短い場合を”0”、 長い場合を”1”としています。
  • 図1ではオフ期間の長さを変えて論理値を表現していますが、規格によってはオン期間の長さを変えて論理値を 表現することもあります。
受光モジュールの出力をマイコンに接続することによって、マイコンはリモコン信号を受信することができるようになります。 このとき、受信されるリモコン信号の規格がわかっていれば信号をデコードすることが可能となり、デコードしたデータを元に 処理を行うようにすることでリモコン対応の制御装置を作ることができます。

信号解析のために

未知のリモコン信号を解析するには図1で示したようなリモコン信号を解析することになります。これはつまり、 リーダコードや論理値のオン期間・オフ期間の時間を計測してその特徴を検討することになります。 特定の規格の特徴がわかっていればその規格と一致するかどうかもわかるようになります。

赤外線リモコン信号解析セット

概要

ブロック図

図2.赤外線リモコン信号解析セットブロック図
製作した赤外線リモコン信号解析セットのブロック図を図2に示します。受光モジュール基板上の受光モジュールでリモコン信号を 受信し、その信号のオン期間・オフ期間をAKI-H8/3048で計測・保存します。 保存したデータはRS232C接続でパソコンに転送することができます。 計測・データ転送の指示はミニ・マザーボード上のスイッチか、パソコンからの信号で行います。

回路図

回路図を以下に示します。
ほとんどがミニ・マザーボードの回路図です。 赤外線信号を受信する部分はIC一個だけを乗せた受光モジュール基板の回路だけです。

回路図

図3.回路図
ミニ・マザーボード 書き込み回路、スイッチ、LED、RS232Cなど、秋月電子様のAKI-H8マイコン専用マザーボードとほぼ同じ ピン接続・回路になっています(LCD接続はありません)。 ミニ・マザーボード上のスイッチを操作することによってモードの設定・動作の指示を行います。
受光モジュール基板 受光モジュールが乗っている基板。受信したリモコン信号をAKI-H8/3048マイコン基板に供給します。
受光モジュールだけの非常にシンプルな回路です。
AKI-H8/3048マイコン基板 秋月電子様のマイコンボード。信号の計測・保存、データの送信などを行います。
回路図では信号の接続だけを表現しています。
パソコン RS232C接続でミニ・マザーボードと接続して、保存したデータを受信、動作の指示などを行います。 パソコン上のソフトはハイパーターミナルか同等のターミナルソフトで行うことができます。
ミニ・マザーボード セット
ミニ・マザーボード ミニ・マザーボード+受光モジュール基板

H8/3048Fのソフトウェア

開発環境

HEW(High-Performance Embedded Workshop)とモニタデバッガを使用して開発しました。
H8/3048F用のモニタデバッガについては H8/3048Fモード7用モニタデバッガ生成メモを参照してください。
今回作成したC言語ソースコードを含むHEWのワークスペースです。

動作モード

操作方法によって動作モードを二つに分けました。 モードの切り替えはディップスイッチの8番によって行います。起動時に8番スイッチがオフならスイッチモード。 オンなら通信モードで動作します。
動作モード 操作方法 ディップスイッチ8
スイッチモード ミニ・マザーボード上のスイッチ操作に従って動作する。 オフ
通信モード RS232C接続のパソコンから送られてくるコマンドに従って動作する。 オン

動作の指示

動作の指示方法は以下のようになっています。
動作スイッチモード通信モード動作表示
信号の計測・保存SW1を押す"g"を受信LED1点灯
保存データの送信SW2を押す"t"を受信LED2点灯
保存データ数の送信SW3を押す"n"を受信なし
信号計測のキャンセルSW4を押すSW4を押すなし
スイッチモードで動作している場合、各動作時にコメント文字列をパソコンに送信しますが、通信モードで動作している 時にはコメント文字列は送信されません。また、通信モードで動作している場合、パソコンから送られてくるコマンドに 対してエコーバックを行いません。
これはパソコン側ソフトをVBなどで作ることを想定したもので、パソコンに余計なコメントやエコーバックを送信しないように することで、VBの処理を少なくすることを狙ったものです。

通信の設定

パソコンとの通信にはH8/3048F内臓のSCI0モジュールを使用しています。
SCI0の設定を以下に示します。
通信速度38400bps
データビット数8bit
ストップビット数1bit
パリティなし
フロー制御なし

リモコン信号の計測と保存

赤外線受光モジュールから入力されるリモコン信号のオン期間、オフ期間を全て計測してメモリに保存します。 保存の様子を図4に示します。
信号保存
図4.時間データの保存

オン期間、オフ期間の時間計測はH8/3048F内臓モジュールのITU1を使用して行います。ITU1の入力であるTIOCA1に 入力されるリモコン信号のエッジ毎(立上り・立下りの両エッジ)にインプットキャプチャを行うように設定することによって 実現しています。また、ITU1の入力クロックはITU0で生成しており、生成されるクロック周期を1μ秒にすることによって 1μ秒単位の計測を行うように設定しています。

計測の終了条件は以下の二つです。

  • データを格納する配列が全て使用されたとき。
  • 計測中の計測値がH'7FFFF(524287μ秒)を超えたとき。
データを格納する配列の数は、”sekigai_kaiseki.h”ファイルのDATA_MAXマクロ定義の値を変えることで変更できます。
ただし、この値を大きくしすぎるとメモリーが不足してしまって実行ファイルが作れなくなってしまいます。特にモニタデバッガ 用にコンパイルする時には100あまりでメモリ不足になってしまいますので注意が必要です。
データ数の変更
図5.保存データ数の変更

使ってみる

スイッチモード

スイッチモードで動作させたときのハイパーターミナルの画面を図6に示します。 動作画面
図6.動作画面
  • スイッチモードで電源を入れると、コメント「***** 赤外線リモコン解析 ****」が表示され、LED3が点灯します。
  • SW1を押すと計測が開始され、コメント「***** data rec start ****」が表示され、LED1が点灯します。
  • 受光モジュールに任意のリモコンを向けてボタンを押し続けると「***** memory ovf ****」「***** data rec end ****」 のコメントが表示され、LED1が消灯します。
  • memory ovfは保存データ数が最大値に達したことを意味しています。今回はリモコンのボタンを押し続けたため 最大データ数まで計測が行われましたが、リモコンのボタンを一瞬だけ押すだけだと最大データ数までの信号がこないため タイマーオーバーフローになります(計測値がH'7FFFF(524287μ秒)を超えたとき)。タイマーオーバーフローになったときの コメントは「***** timer ovf ****」です。計測終了時には必ずどちらかのコメントが表示されます。
  • SW3を押すとdata suu= に続けて計測・保存したデータの数が表示されます。
  • SW2を押すと保存されているデータが順次送信され画面に表示されます。送信中はLED2が点灯します。また、データ送信 の最初と最後にそれぞれ「***** data tr start ****」「***** data tr end ****」のコメントが表示されます。
  • 一番最初に送信されてくるデータは最初のオン期間、つまりリーダ・コードのオン期間に該当します。データは計測した 順番どおり送られてくるので2番目以降はオフ期間、オン期間・・・・・と交互に送られてきます。
  • SW21を押す前に、ハイパーターミナルのテキストのキャプチャを実行しておくと、送られてくるデータを テキストファイルに保存することができます。

通信モード

通信モードで動作させた場合、以下の点でスイッチモードと違いがありますが、動作自体は同じです。
  • 動作の指示がパソコンから送られてくるコマンドである。ハイパーターミナルから'g','t','n'などのキーを 押すことで操作できます。このとき押したキーのエコーバックは帰ってきません。
  • スイッチモードで表示されたコメントは全て表示されません。

計測データ

今回も前回と同じ、秋月様で購入したリモコンのデータを計測してみました。



実はこのリモコン、当時から二つ持っていました。それぞれのPOWERのデータを計測して、前回のデータと比較しやすいように エクセルシートに貼り付けてみました(図7)。前回の計測データはold1,old2で、10μ秒単位で計測されています。今回 製作したソフトウェアで計測されたデータはnew1,new2で、1μ秒単位で計測されています。
計測データ新旧比較
図7.計測データ新旧比較