• 検索結果がありません。

カウンタ・クリアによるリモコン受信

第3章  システム・クロック切り替えの応用

5.3  リモコン受信

5.3.1  カウンタ・クリアによるリモコン受信

このプログラム中で,リモコン信号を受信する場合のパルス有効幅を表5−1に,各信号の処理方法を①から

⑥に示します。リモコン信号のリピート信号は,有効入力があってから250 ms以内の場合のみ有効とします。ま た,正常データ取り込み後の3 msの時間内に信号を入力した場合もデータを無効とします。

表5−1 入力信号の有効時間

① リーダ・コード(ロウ)

16ビット・タイマ/イベント・カウンタのインターバルを1.5 msに設定し,割り込み処理でポート・レベ ルのサンプリングを行い,5回連続でロウ・レベルを検出したときにリーダ・コードと判断しインターバル を7.81 msに変更します。その後,INTP0の立ち上がりエッジの割り込み要求によって,リーダ・コードのロ ウ・レベルのパルス幅を計測します。

図5−13 リモコン信号のサンプリング

インターバル時間 1.5 ms 7.81 ms

ノイズ ノイズ 5回連続ロウで有効

信 号 名 リーダ・コード(ロウ)

リーダ・コード

(ハイ)

カスタム/

データ・コード

出力時間 9 ms 4.5 ms 2.25 ms 1.125 ms 2.25 ms

有効時間 6.8 ms-11.8 ms 3 ms-5 ms 1.8 ms-3 ms 0.5 ms-1.8 ms 1.8 ms-2.5 ms 通常

リピート 0 1

② リーダ・コード(ハイ)

INTP0の立ち下がりエッジの割り込み要求によって,リーダ・コードのハイ・レベル間のパルス幅をタイマ のカウント値により計測します。

③ カスタム/データ・コード

INTP0の立ち下がりエッジの割り込み要求によって,1ビット(1周期)ごとのパルス幅を計測します。32 ビット目のデータ取り込み後に,反転データとカスタム・コードの一致をテストします。さらに,33ビット 目にデータのないことを確認します。

④ リピート・コード検出

リーダ・コードのハイ・レベルが3 ms未満のときに,リーダ・コード出力後からINTP0立ち上がりまでのパ ルス幅を計測します。

⑤ リピート・コードの有効期間

有効なデータ入力後,16ビット・タイマ/イベント・カウンタの割り込み処理(1.5 msインターバル)で サンプリングし,リピート・コードの有効時間250 msを計測します。

⑥ パルス幅計測中のタイム・アウト

パルス幅計測中に16ビット・タイマ/イベント・カウンタの割り込み要求(7.81 ms)が発生したときは,

タイム・アウトになりデータは無効になります。

(1)パッケージの説明

<パブリック宣言シンボル>

RMDATA :リモコン受信データを格納 RPT :リピート有効期間判断フラグ IPDTFG :有効データの有無判断フラグ RMDTOK :入力信号の有効の有無判断フラグ RMDTSET :入力信号の有無判断フラグ

<使用するレジスタ>

バンク0 :AX,BC,HL

<使用するRAM>

名 称 RPTCT RMENDCT SELMOD LD̲CT RMDATA WORKP

用    途 リピート・コード有効時間カウンタ データ入力後の無入力時間カウンタ モード選択

リーダ信号検出カウンタ 有効データ格納エリア 入力信号格納エリア

属 性 SADDR

SADDRP

バイト 1

名 称 IPDTFG RMDTOK RMDTSET RPT

<使用するフラグ>

用    途 有効データの有無

入力信号の有効の有無 入力信号の有無

リピート有効期間が経過したかどうかの判断

<ネスティング>

5レベル12バイト

<使用するハードウエア>

●16ビット・タイマ/イベント・カウンタ

●P00/TI00/INTP0

<初期設定>

●OSMS=#00000001B 発振モード選択レジスタ 分周回路を使用しない

●16ビット・タイマ/イベント・カウンタの設定

 CRC0=#00000100B CR00, CR01の動作モード選択

 TMC0=#00001100B TM0とCR00一致でタイマ・クリア・モード     TCL0=#00100000B カウント/クロックfXX

 CR00=#6290 コンペア・レジスタ00

●SCS=#00000011B INTP0サンプリング・クロックfXX/26

●PPR0=0 INTP0高優先順位割り込み

●TMMK0=0 16ビット・タイマ/イベント・カウンタ割り込み許可

●カスタム・コードをCSTMに定義し,パブリック宣言

●RAMクリア

<起動方法>

INTP0,INTTM00の割り込み要求で起動

(2)使 用 例

(3)SPDチャート

レジスタ・バンク1を選択 マスタ割り込み許可

IF:入力信号あり(IPDTFG)

INTTM00

THEN

IF:有効データあり(RMDTOK)

THEN

IF:リピート有効時間内(250 ms)に入力なし THEN

リピート・コード無効状態に設定  RPT,IPDTFG,RMDTOKクリア リピート有効時間をカウント ELSE

リーダ・ロウ時間カウント S̲LOWCT ELSE

IF:データ入力終了後(4.5 ms以内)に入力なし THEN

有効データありに設定  RMDTOK,RMDTSETセット

リーダ・ロウ検出モードに設定 S̲M0SET リーダ・ロウ検出用カウンタを初期化 ELSE

リーダ・ロウ時間カウント S̲LOWCT

IF:リーダ・ロウ検出モード S̲LOWCT

THEN

IF:P00 = LOW THEN

IF:5回連続P00 = LOW THEN

リーダ・ロウ計測モードを選択 16ビット・タイマを7.81 msに設定 INTP0立ち上がりエッジ検出モードに設定 INTP0割り込み許可

リーダ・ロウ検出用カウンタを初期化 ELSE

リーダ検出用カウンタを初期化 ELSE

リーダ・ロウ検出モードに設定 S̲M0SET リーダ検出用カウンタを初期化

レジスタ・バンク0を選択 100μsウエイト WAIT CASE:SELMOD INTP0

OF:1

IF:P00 = HIGH LEAD̲L

THEN

100μsウエイト WAIT IF:P00 = HIGH

リーダ・ロウ計測モード LEAD̲L リーダ・ハイ計測モード LEAD̲H

カスタム・コード/データ取り込みモード CDCODE リピート・コード検出モード REPCD

異常データ検出モード ENDCHK OF:2

OF:3 OF:4 OF:5

THEN

タイマ読み出し CR̲READ

IF:6.8 ms ≦ リーダ・ロウ ≦ 11.8 ms THEN

リーダ・ハイ検出モードを選択

INTP0立ち下がりエッジ検出モードに設定 ELSE

リーダ・ロウ検出モードに設定 S̲M0SET

IF:P00 = LOW LEAD̲H

THEN

100μsウエイト WAIT IF:P00 = LOW THEN

タイマ読み出し CR̲READ IF:2 ms ≦ リーダ・ハイ ≦ 5 ms THEN

IF:リーダ・ハイ ≧ 3 ms

ELSE THEN

カスタム・コード/データ取り込みモードを選択 データ格納用エリアのイニシャライズ

ELSE

リピート検出モードを選択

INTP0立ち上がりエッジ検出モードに設定 リーダ・ロウ検出モードに設定 S̲M0SET

IF:P00 = LOW CDCODE

THEN

100μsウエイト WAIT IF:P00 = LOW THEN

タイマ読み出し CR̲READ IF:0.5 ms < 入力データ ≦ 2.5 ms THEN

IF:入力データ ≧ 1.8 ms THEN

CYセット ELSE

CYクリア

データ格納エリアにCYを格納 IF:データ入力32ビット終了 THEN

IF:カスタム・コード一致 THEN

IF:カスタム/データ・コードの反転データ一致 THEN

データ・コードを格納 入力データありの状態に設定

 IPDTFGセット,RMDTSET,RPT,RMDTOKクリア 異常データ検出モードに設定 S̲M5SET

ELSE

リーダ・ロウ検出モードに設定 S̲M0SET ELSE

リーダ・ロウ検出モードに設定 S̲M0SET ELSE

リーダ・ロウ検出モードに設定 S̲M0SET

IF:P00 = HIGH REPCD

THEN

100μsウエイト WAIT IF:P00 = HIGH THEN

IF:有効データあり THEN

タイマ読み出し CR̲READ IF:リピート・コード ≦ 1 ms THEN

リピート・コード有効状態に設定  RPTセット

データ入力終了状態に設定

異常データ検出モードに設定 S̲M5SET ELSE

リーダ・ロウ検出モードに設定 S̲M0SET ELSE

異常データ検出モードに設定 S̲M5SET

IF:P00 = LOW ENDCHK

THEN

100μsウエイト WAIT IF:P00 = LOW THEN

入力信号を無効状態に設定  IPDTFG,RPTクリア

リーダ・ロウ検出モードに設定 S̲M0SET

キャプチャ・レジスタの読み出し 16ビット・タイマ動作停止 タイマ・スタート CR̲READ

リーダ・ロウ検出モードを選択 INTP0割り込み禁止

16ビット・タイマを1.5 msに設定 S̲M0SET

異常データ検出モードを選択 リピート有効時間用のカウンタを設定 16ビット・タイマを1.5 msに設定 S̲M5SET

(4)プログラム・リスト