2016-06-14 19:53 | カテゴリ:PIC応用回路

AD変換した値を赤外線で送る


小物工作とプログラムを続けています。(模型製作はちょっと休憩です!)
前回は、AD変換した値をRS232のシリアル通信で、PCに送信するテストまで行いました。
9600bpsのシリアル送信でちゃんと遅れたことが確認できました。
今度は、このシリアル通信(有線方式)を赤外線通信(無線方式)で送ろうと、試みました。

赤外線通信(IR)は、TVのリモコンなどで幅広く実用になっています。
TVリモコンでは、メーカーによって、動作コマンドのコードが決められていますが、通信の基本は共通です。

つまり、赤外線のON/OFFをシリアル通信の様に断続して行い、受信側では、それを元の信号に戻すわけです。
ポイントは、赤外線のONの際に約38KHz(周期26.3マイクロ秒)で変調が掛けられていると言うことです。
したがって、送信回路側では、この変調をかけて、赤外線LEDを点滅させなければなりません。

一方、受信側では、この変調を元に戻す(復調)作業は、実は、赤外線受信モジュール内で自動的に行ってくれています。

IR_Sens.jpg
IRS.jpg

続きは、、、、、


よって、このモジュールからの出力は、そのまま、シリアル信号として、読み取ることが出来ます。

さて、第一歩は、PIC内蔵のPWM回路を、この赤外線送信の規格に合うように変調させる基本波形を得られるように設定することです。

PICのPWMは以前にもご紹介したことがありますが、ある程度お決まりの作法にのっとってパラメータ(周期とデューティー)を決めればOKなんです。
まずは、周期です。

関係するレジスターは

CCPR1L
CCP1CON(ビット5、4のCCP1XとCCP1Y)
PR2

です。
詳細なレジスターの意味はPICのマニュアルを御参照いただくとして、下記の数値を求めていきます。


PWM周期=(PR2の値+1)x 4 x 発振器周期 x タイマー2のプリスケーラ値 で、決まります。

発信周期は20MHzのPICの場合は、0.05(マイクロ秒)
TMR2のプリスケーラ値は、1/1、1/4、1/16からの選択です。

で決まります。
PR2は、0-255、プリスケーラ値は、1、4、16からの選択ですが、プリスケーラは、デューティー比を決める際にもかかわってきますので、同じ値で無ければなりません。

と言う訳で、私は、

PWM周期=(PR2=33)X4X0.05X(プリスケーラ=4)として。
PWM周期= 26.4マイクロ秒
としました。


デューティー比は、だいたい30%くらいとマニュアルのテスト波形にありましたので、約30%(8.8マイクロ秒)として

デューティー長(マイクロ秒)=(CCPR1L+X+Y=10ビット値)X 0.05 X (プリスケーラ=4)
              =(CCPR1L+X+Y=44)    X 0.05 X 4
              = 8.8マイクロ秒

としました。
ここで、CCPR1L+X+Y=44の設定方法ですが、CCPR1L=11、X=0、Y=0で、
二進表記で 00001011 00
となります。


PWMの初期設定は、この様になります。

PWM_ini.jpg

実際にPWMをONにするには、デューティーをセットします。
OFFにするには、デューティーをゼロにします。

PMW_SS.jpg

オシロで波形の確認をしました。

PWM_01.jpg

PWM_02.jpg

拡大すると、PWMの波長は、ちゃんと、約27マイクロ秒となっています。

===============================================
オシロの画面の矢印が間違っていました(失礼しました)
===============================================

正しくはこちらです。

PWM_03.jpg


これらを組み込んだプログラムはこちらです。
SWをON・OFFにすることで、PWMもON・OFFになります。

Prog004.txt


【ジャンル】:趣味・実用 【テーマ】:ホビー・おもちゃ
コメント(7)

管理者のみに表示する