2017年1月14日土曜日

TWE-Liteで赤外線リモコン信号を送信

 赤外線リモコン信号の受信だけでなく、送信もできるようになりました。

 送信用のパーツを追加した回路図は、こちらです。
TWE-LiteのGPIOでは赤外線LEDを十分な明るさで点灯させることができないので、余っていたトランジスタを使いました。LEDの電流制限抵抗は、もっと小さくしたほうが良さそうです(50mA位は流したい)。

 赤外線リモコン信号を駆動するTIMER2は、標準アプリでは代替割り当てによってPWM2(or DO0)に割り当てられていますが、NPNトランジスタのベースと一緒にDO0をプルダウンしてしまうとプログラムモードに入れなくなるので、代替割り当てではなくデフォルトのピン割り当てのDO12(標準アプリではDI1)をTIMER2の出力として使っています。
  p-ch FETやPNPトランジスタならば、標準アプリと同様の代替割り当てで問題ありません。その場合は、TIMER2の出力極性を反転する必要があります。

赤外線リモコン信号を送信する手順は、おおまかに以下のようになります。
  1. vAHI_TimerDisable(E_AHI_TIMER_2) でTIMER2を止めておく。
  2. vAHI_InfraredRegisterCallback(cbToCoNet_vHwEvent) で送信完了ハンドラを指定する。
  3. bAHI_InfraredEnable(0, 281, 421, 21, FALSE, TRUE) で副搬送波とエンコード単位波数を指定する。
  4. 送信したい赤外線コマンドのパターンをuint32のバッファにビッグエンディアンで設定する。
  5. bAHI_InfraredStart(pu32BufferAddress,u16TransmissionLengthInBits) で赤外線コマンドを送信する。
  6. 送信完了割り込みが発生したら、次のフレームを送信するために4.または3.の手順に戻る。
上記のbAHI_InfraredEnable()で指定しているパラメータは、NEC方式または家電協方式の場合です。SONY方式では、副搬送波が40kHzになるように指定します。

 赤外線コマンドの1ビットは、bAHI_InfraredEnable()で指定したエンコード単位幅(u16BitPeriodInCarrierPeriods)を複数使って表現します。リーダーコードやフレーム間の無信号部分も同様にしてエンコードに含めるので、1個のコマンドに必要なバッファ長は75-235ビット位になります(長さはフォーマットに依存)。

 送信部分を実装したソースコードも、githubで公開しています。

0 件のコメント:

コメントを投稿