IrDAインターフェースの汎用I/Oユニット

 パソコンやPDAとIrDAで接続し、ディジタルIOや
 モータの可変速制御ができる汎用のユニットです。
 新製品であるIrDA専用ICの試作で作ってみました。


【概要】

PIC16F628にIrDAコントローラであるマイクロチップ社の「MCP2150」を接続し、
9600bpsのスピードでのIrComm通信で、汎用の入出力を行います。
このユニットのIrComm通信で可能なことは下記となっています。

 (1) パソコンまたはPDAから PICのポートへの入出力

 (2) パソコンまたはPDAからCCPの制御
   モータの可変速制御などに使えます。

【ユニットの構成】

本ユニットの全体構成は下図のようになっています。今回はIrDAのテスト用ですので
極単純な回路としています。
 IrDAの送受信用の素子としてはヒューレットパッカード社(現アジレント社)の素子で
HSDL1000を使いました。ちょっと古い素子なので9600bpsまでしか追従しませんでした
が、改良版のHSDL1001を使えば115kbpsまで追従できるはずです。
   (手に入ったら試してみようと思っています。)
 本試作の目玉はMCP2150というマイクロチップ社の新製品で、IrDA通信のIrCommと
いうプロトコルのファームウェアを内蔵した素子です。このICは、ピン配置から推測すると、
どうもPIC16シリーズのコアを使っているようです。
 この送受信のPIC側はPIC16F628は小型ですがUSARTを内蔵していますので、これを
使います。これでプログラミングはぐっと楽になります。
 出力にはPWMでパルス幅変調の出力が出せるようにして、モータなどの速度制御が
試せるようにしてみました。あとは単純なディジタル入出力だけです。








【回路構成】

本試作ユニットの回路は下図のようになっていて、赤外線送受信素子にはHSDL1001を
使う予定でしたが入手できないので、HSDL1000となっています。
これにMCP2150を接続し、さらにPIC16F628のUSARTと接続しています。
PIC側はいろいろな入出力が試せるようにしておきました。











【PIC側プログラム】

 このユニットのPICのプログラムは全てCCS社のC言語で作成しています。
このプログラムの機能は下記となっています。
初期スタート後CD信号がレディになったら”Start!!"というメッセージをホストに
送信し、あとはホストからのコマンド待ちとなります。
ホストから下表のコマンドを受信すると"Ok"を返信し、それぞれのコマンドの
処理を実行します。実行完了後はまたコマンド待ちとなります。

コマンド コマンドとパラメータ 機能内容
LED制御 LnCR
nは0-9の文字、CRは改行
nの値により下記制御を実行する。
0:全LEDをOn
1-4:nビット目のLEDをOff
5-9:全LEDをOff
受信文字を折り返し返送する。
 LED = n
モータ制御 MnCR
nは0-9の文字、CRは改行
nの値によりPWMのデューティを可変する。
Duty = n ×112
(0:Duty=0 9:Duty=03F0)
折り返しこのDuty値を16進数4桁で返送する。
 PWM = XXXX


このメイン関数の部分は下記リストとなります。#FUSES関数はコンフィギュレーション
の設定です。これを記述しておけばPICStart-Plusなどのライタを使う時は自動的に
コンフィギュレーションしてくれるので便利です。
#use RS232C関数でUSARTを設定しています。使うピンはUSARTなので限定され
ます。
 MCP2150との通信は通常のRS232C通信の手順と全く変わりません。従って
通常どおり#use rs232c で初期設定しています。
 通常の送受信と異なるところは、唯一IrCommで接続が完了するのを待つのに
CD信号をチェックしているのと、やはりIrCommで周期的に送信可能状態になるのを
確認するのにCTS信号をチェックしているところだけです。
 あとはgetc関数で通常の通信と同じように1文字受信しコマンドを区別して
それぞれの処理関数を呼んでいます。該当しないコマンドの時は無視して
何もしません。









次に、受信したコマンドの処理関数は下記リストのようになります。
ここは単純にLコマンドであれば2文字目の数値によって処理を分岐して
います。
Mコマンドであればやはり2文字目の数値を10ビットのデューティ値に換算
してset_pwm1_duty関数でデューティを設定しています。
10ビットなのでspeed変数はlong型としています。そしてこのspeed変数の値
をprintf文により16進数4桁で送信しています。この送信の時にはCTSがLow
になるのを待ってから送信します。さらにこのCTSはIrCommで周期的に制御
されているので、多くのデータを送信する時には、CTSがLowの期間だけの
間送信するように、CTSがHighになったら一旦送信を中止し、再度CTSがLow
になったら残りの送信を継続させるようにする必要があります。
下記では送信データは少ないので一度のCTSのLow期間で全データが送信
出来てしまいますので省略しています。
 








本プログラムソースは下記でダウンロードできます。

 ★IrDA接続汎用I/Oプログラムソース


【ホスト側プログラム】

 ホストとしてはノートパソコンやPDAが使えます。しかしノートパソコンの場合には
Windows2000では、IrCommが隠蔽されてしまったので、そのままではCOMポート
としてIrDAを使うことは出来ません。従ってVisual Basic等でプログラム制御しよう
としても出来ないことになってしまいます。

 これを解決するためのフリーソフトがあります。下記サイトからIrCOMM2kという
ドライバを入手しインストールするだけで、IrDAをCOM4として使うことができるように
なります。ドイツのJan Kiszkaという方が開発し提供して下さっています。

  ★ Virtual Infrared COM Port for Windows 2000

 このドライバのインストールは簡単で、ダウンロードしたZIPファイルを解凍したら
setup.exeを実行するだけです。
これでシステムのデバイスマネージャで新たなCOMポートとして下記が追加されて
いるのが分かると思います。
   「Virtual IR COM Port(COM4)

これで常にCOM4を指定すれば通常のCOMポートと全く同じ扱いでIrDAを使って
IrCommプロトコルによる赤外線通信で送受信を行うことが出来ます。

これで例えばハイパーターミナルで通信をすることも出来ますので、デバッグには
役に立ちます。




【PDAとの通信】

赤外線通信をよく使うのはPDAの方です。私が使っているのは、「WorkPad c3」です。
このPalm系のPDAでIrComm通信を使ったプログラムを開発するのはちょっとやっかい
です。
Code Warriorなどのコンパイラを使ってPalm OSのAPIを使う必要があります。
ここでは試作なので、簡単に確認してみました。Microchip社のApplication Noteで紹介
している「Embedded Companion Suite」を使ってみました。
これを使えばハイパーターミナルと同じようなテキストベースでの送受信がIrDAを使って
IrCommプロトコルで可能となります。



【外観】

本試作ユニットは基板のままとなっています。赤外線送受信モジュールが
表面実装タイプなので、基板の裏側に直接はんだ付けになっています。
このため基板4隅にカラーをつけたねじで浮かし安定に置けるようにしました。


簡単の構成なのでわずかな部品で構成
されています。
左下に赤いLEDが4個あります。



右側のICがMCP2150で左側がPIC16F628です。
それぞれに駆動用のクリスタル振動子が
配置されています



赤外線通信モジュールは表面実装なので
基板のはんだ面に直付けです。




モジュールは送信素子と受信素子が一体化
され、レンズ効果をもつモールド成型され
ています。






目次に戻る