第 5 章 赤外線通信の実装方式の検討
6.2 CIR による赤外線通信の実装
6.2.5 PPM 変調のデコード
NECフォーマットのCIR通信は一つ要素がある、それは毎回の状態変換の時間である。
Leader code、Custom Code、Data Code、Stop Bit、さらに“1”と“0”の定義も時間の
長さがある。つまりON信号とOFF信号の時間を計って、受けた信号をデコードする。
タイマーで信号を計るために入力キャプチャを用いる(タイマーと入力キャプチャの概念 と使い方は文献[25] [26])。
NECフォーマットの場合具体的なデコード方法は以下の各Frameのデコードフローチャ ートを描いた(本システムのフローチャートの書き方は文献[27]を参照した)。
図 6-7 デコードフローチャート
タイマーで測った時間は毎回IC1(ICは入力キャプチャの意味、本段落の下に説明がある)
の入力値を変化した時から次の変化の前までの時間である。この時間と NEC フォーマット で定義した各状態の時間に比べて、現時点の通信状態と受けるデータ情報を確認できる。
または上図の方法で各Frame毎の32bitの情報を受信できる。
タイマー(TMR):タイマーとは、一定周期に一回増やすカウンタである。使いたいタイマ ーのレジスターbitに開始FLAGを設定すると、時間の計測が始まる。
大部分のPIC24Fは5つタイマーが持っている、TMR1~5である。この5つタイマーは3 種類で分ける、TypeA、TypeB、TypeC である。TypeA は普通な16bit のタイマーである。
1 つTypeBタイマー(16bit)と1つTypeCタイマー(16bit)を組み合わせると、1つ32bitの
タイマーになれる。(PIC24Fのタイマーの種類は文献[28]を参照した)
PIC24Fの5つタイマーの種類は以下である。
TMR1 ⇒ TypeA TMR2 ⇒ TypeB TMR3 ⇒ TypeC TMR4 ⇒ TypeB TMR5 ⇒ TypeC
TMR2とTMR3を組み合わせる、TMR4とTMR5を組み合わせる。
PIC24FのIrDA StackはTMR2を使っているので、TMR3は16bitタイマーとしてしか
使わない。(文献[18]を参照した)
PIC24F の頻度と TMR1~5 のカウント頻度も調べて赤外線受信処理用タイマーはTMR1
とTMR3のどちらでも使用できる。(TMR4とTMR5は32bitのタイマーになれるので、将 来他の機能は使用する可能性がある。)
PIC24FJXXGA002の頻度は最大8MHZを設定できるが、デフォルト値は4MHZである。
([23]を参照した)PIC24FJXXGA002の頻度はデフォルトの時にTMR1~5のカウント頻度は
4つ選択肢である。
1:256 ⇒ 1秒/(4 MHZ /256) = 1000000μs/(4000000/256) = 64μs 1:64 ⇒ 1秒/(4 MHZ /64) = 1000000μs/(4000000/64) = 16μs 1:8 ⇒ 1秒/(4 MHZ /8) = 1000000μs/(4000000/8) = 2μs 1:1 ⇒ 1秒/(4 MHZ /1) = 1000000μs/(4000000/1) = 0.25μs
NEC フォーマットの赤外線受信する時に計りたい時間の最大値は NEC フォーマットの
1Frameの最大時間108000μs([22]を参照した)である。頻度の4つ選択肢のどちらで9000μs
を計れることについて検討する。
108000μs/64μs = 1687.5 < 16bitの最大カウント数(65536回) 108000μs/16μs = 6750 < 16bitの最大カウント数(65536回) 108000μs/2μs = 54000 < 16bitの最大カウント数(65536回) 108000μs/0.25μs = 432000 > 16bitの最大カウント数(65536回)
これで、16bit カウントで108000μsを計れる3 つ選択肢の中に一番早いタイマーのカウ ント頻度の選択肢1:8を選んだ。
入力キャプチャ(Input Capture):入力キャプチャとは、フリーランでカウントするTMR の値をキャプチャ入力ピンの変化により自動的に読み取り、キャプチャレジスターに転記す る機能である。
最終的に使用するPIC24FJXXGA002では入力キャプチャはIC0、IC1、IC2の3チャン ネルが存在している。入力キャプチャと連携して使えるタイマーはTMR2とTMR3である。
TMR2はIrDA Stackが使うので、TMR3しか使えない。