第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
4
名 称 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)プログラム・リスト