200 likes | 492 Views
赤外線リモコンの信号受信. 前回に引き続き赤外線について学ぶ 今回は受信 新しい機能:インプットキャプチャ. 資料作成者 中村. 赤外線モジュールの仕様. 赤外線受信モジュールには「キャリア周波数」というものがある。 主に「40 kHz」、 「38 kHz」 。 今回使用するモジュールは「38 kHz」 。. High. Low. 受光モジュールの出力. 赤外線LEDの出力. High. Low. 受光モジュールの出力. ※ 出力が反転する. 赤外線 LED からHiを出力すると受信モジュールはLowを出力。
E N D
赤外線リモコンの信号受信 • 前回に引き続き赤外線について学ぶ • 今回は受信 • 新しい機能:インプットキャプチャ 資料作成者 中村
赤外線モジュールの仕様 • 赤外線受信モジュールには「キャリア周波数」というものがある。 • 主に「40kHz」、「38kHz」。 • 今回使用するモジュールは「38kHz」。
High Low 受光モジュールの出力 赤外線LEDの出力 High Low 受光モジュールの出力 ※ 出力が反転する 赤外線LEDからHiを出力すると受信モジュールはLowを出力。 逆に赤外線LEDからLowを出力すると受信モジュールはHiを出力。
リーダーパルス 0 1 0 1 0 この幅を計測する 受信信号の解析方法 • 送られてくる信号の幅(時間)が計測できれば、その幅の違いで、1ビット・0ビットデータの区別ができる。
パルス幅を測る • パルス信号の始まりと終わりを検出するには、・ プログラム上で常に入力を監視してその変化を調べるポーリング方式・ ITUのインプットキャプチャ機能を利用してフラグの変化を監視する方法・ インプットキャプチャによる割り込み機能を利用した方法 などが考えられる。
入力信号 入力パルス インプットキャプチャ機能 • ITUの機能の1つ。 • パルス幅や周期の測定ができる。 ITUのインプットキャプチャ機能を利用すると、パルスの立ち上がりと立下りを自動で検知し、そのときのTCNTの値を自動でGRAやGRBに書き込んでくれる機能などがあり便利です。
例 カウント値 FFFF GRB 00 時間 計測時間 入力パルス 立下り 立上り インプットキャプチャ機能 • インプットキャプチャ/アウトプットコンペア端子(TIOCA、TIOCB)の入力エッジを検出して16TCNT の値を GR に転送することができる。検出エッジは立ち上がりエッジ/立ち下がりエッジ/両エッジから選択できる。 立上りを検出するか 立下りを検出するかは レジスタで設定する。 入力信号
カウント値 IMFB1=1 FFFF GRB 00 時間 入力パルス 計測時間 立下り 立上り TNTC 00 1000 => GRB インプットキャプチャ パルス信号の始まりを検出してカウンタTCNTのカウントを開始し、パルス信号の終わりが検出された時のTCNTの値を読み取る。
リーダーパルス 0 1 0 1 ※ストップビット 0 立下り この幅を計測する インプットキャプチャを使用した赤外線リモコン信号の解析 信号の立下りを検出する 例:5ビットの信号の場合 ※ ストップビットがないと最後の信号の立下りが検出できない
インプットキャプチャ 立下りで検出 カウント値 FFFF GRB 00 時間 計測時間 16TNTC 00 XX ⇒ 0 YY 各パルス幅を測定するには TNTCをクリアする必要がある XX YY ※ レジスタで設定可能 GRB
インプットキャプチャ割込み • 考え方はタイマ割り込みと同じ • タイマ割り込み ⇒ GRとのコンペアマッチで割込み発生 • インプットキャプチャ割り込み ⇒ 立上りエッジ or 立下りエッジ検出で 割込み発生
インプットキャプチャ割込み関数 main処理 1 割り込み発生(立下りエッジ検出) 割り込み関数 2 1.ITU1.GRBの値にTNTCの値が入る⇒ パルス幅 2.カウンタをクリア ⇒ TNTC=0
使用するレジスタ • 受光モジュールの接続端子はPA5なので、ITU1を使用する。また、ジェネラルレジスタ(GR)はGRBを使用する。 • タイマ I/O コントロールレジスタ(TIOR)インプットキャプチャの設定、検出エッジの設定 • タイマコントロールレジスタ(16TCR)内部タイマの設定、クリア条件の設定 • タイマインタラプトステータスレジスタ B(TISRB)割込みの許可/禁止の設定 • タイマスタートレジスタ(TSTR)タイマのスタート
TIOR - IOB2 IOB1 IOB0 - IOA2 IOA1 IOA0 設定 1 1 0 1 1 0 0 0 タイマ I/O コントロールレジスタ(TIOR)の設定 GRA、GRB をアウトプットコンペアレジスタとして使用するか、インプットキャプチャレジスタとして使用するかを選択します。 またその機能を選択します。 ・立下りエッジでGRBのインプットキャプチャ IOB2 = 1, IOB1 = 0, IOB0 = 1
TCR - CCLR1 CCLR0 CKEG1 CKEG0 TPSC2 TPSC1 TPSC0 設定 1 0 1 0 0 0 1 1 タイマコントロールレジスタ(16TCR) 16TCNT のカウンタクロックの選択、外部クロック選択時のエッジの選択およびカウンタクリア要因の選択を行います。 ・GRBのインプットキャプチャで16TCNTをクリア CCLR1 = 0, CCLR0 = 1 ・内部クロック: 1/8でカウント TPSC2 = 0, TPSC1 = 1, TOSC0 = 1 ・1/8 クロック = 16/8 MHz = 2MHz = 0.5us ⇒ 1カウント 0.5 us
TISRB - IMIEB2 IMIEB1 IMIEB0 - IMFB2 IMFB1 IMFB0 設定 1 0 1 0 1 0 0 0 タイマインタラプトステータスレジスタ B(TISRB) GRB のコンペアマッチ/インプットキャプチャの発生を示し、GRB のコンペアマッチ/インプットキャプチャ割り込み要求の許可/禁止を制御する。 IMIEBビットを1にして、GRBのインプットキャプチャによる割り込み発生を許可 今回はITU1を使用するので、IMIEB1が対応する。 割り込みが発生すると、IMFB1が1になる。
TSTR - - - - - STR2 STR1 STR0 設定 1 0 0 0 1 0 1 0 タイマスタートレジスタ(TSTR) チャネル 0~2 の 16TCNT の動作/停止を選択します。 STR1 = 1でIUT1スタート STR1 = 0でITU1ストップ
インプットキャプチャ動作設定 インプットキャプチャ 入力の選択 (1)TIORにより、GRをインプットキャプチャレジスタ に設定し、インプットキャプチャ信号の入力エッジを 立上りエッジ/立下りエッジ/両エッジの3種類から 選択する。※ただし、対応するポートのDDRを0に クリアした状態でTIORの設定を行うこと。 (2)TSTRのSTRビットを1にセットして、16TCNTの カウント動作を開始する。 カウント動作開始 <インプットキャプチャ動作> ※今回対応するポートはDDRのビット5。初期状態は0。