Microchip IrDA スタックを動作させて見る

〔IrDA基礎概要〕   〔マイコンのトップに戻る〕


前のページで、”IrDA通信の基礎概要”の話は行った、このページ以降では「Microchip 社製16/32 ビットMCU 向け IrDA 標準スタック」 を実際に動作させて見ます。

《Microchip 社製16/32 ビットMCU 向け IrDA 標準スタック》

ここではPIC24Fを使うので”IrDA 標準スタック”は、Microchipの[AN1071]ページの
"IrDA Standard Stack for Microchip 16-bit Microcontrollers"をクリックしてダウンロードします

尚、[Microchip IrDA v1.02 Patch 2013-10-29.zip]が有るので解凍して、"IrDA_PIC24F.C"の
ファイルを入れ替えます。

このスタックの説明書はこちらに日本語版が有るのでここでは説明を省きます。

このスタックは、Explorer 16 開発ボードとIrDA PICtail Plus カードにPIC24FJ128GA010を載せた物で
設計されていて、コンパイラーは"C30"が使われています。
今回の実験では、プライマリ(クライアント)側をPIC24FJ64GA002として、
セカンダリ(サーバー)側をPIC24FJ64GB002で行っています、
それに、XC16コンパイラー(v1.30)を使ったので其々デモソースプログラムを変更しました。
又、システムクロックも8MHzから32MHzに変更しています。
この変更デモスタックは↓からダウンロードできます。
      [Microchip Solutions.zip] 

ダウンロードし解凍後、ディレクトリを移動する場合は、[Microchip Solutions]丸ごと移動させます。

追加ディレクトリ図 左図の様に[Microchip Solutions]の下に
[IrCOMM3Client]・・・・・[IrCOMM3Client.X]
[IrCOMM3Server]・・・・[IrCOMM3Server.X]
[IrCOMM9Client]・・・・・[IrCOMM9Client.X]
[IrCOMM9Server]・・・・[IrCOMM9Server.X]
[OBEXClient]・・・・・・・・[OBEXClient.X]
[OBEXServer]・・・・・・・[OBEXServer.X]
と、MPLAB X IDE(v5.15) で動作する様にプロジェクトを追加して置きました。

各機能(IrCOMM/OBEX/MCU等)に応じたスタックが用意されています、
例えば"IrCOMMの3-wire Raw"のクライアント側プロトコルで有れば
"libIrDA_PIC24F_CC-elf.a"のスタックライブラリが使用されますが、
これはソースプログラムではなくコンパイルされたオブジェアクトを
アーカイブされた物です。


《回路について》

実態配線図
この回路はプライマリ(クライアント)側、セカンダリ(サーバー)側共通です。
又、PIC24FJ64GA002/24FJ64GB002共に共通です。
(PICがGA/GBと別れた訳は、それしか持っていないからで〜すぅ)
回路電源は3.3Vです。
IrDA通信トランシーバ側がUART1を使い、USBシリアル変換モジュール側がUART2を使っています。
部品の調達は秋月通商で、IrDA赤外線通信トランシーバ・モジュールRPM851Aを使いました。
それに、FT234X 超小型USBシリアル変換モジュールでPCの端末エミュレーターに表示させています。

実験回路写真
実験回路写真です。
右側が、プライマリ(クライアント)でPIC24FJ64GA002を使い、PCには未接続です。
左が、セカンダリ(サーバー)でPIC24FJ64GB002を使い、PCには接続し受信文字列を表示させています。


《IrCOMM》

IrCOMMの機能で"IrCOMMの3-wire Raw"は[UART]通信の模倣を行い、"IrCOMMの9-wire cooked"は
[RS232C]通信(フロー制御)の模倣を行います。このページではこの2つの機能を動作させます。

《IrCOMMの9-wire cookedスタック》

スタックの関数等の説明は、AN1701とデモソースプログラムを見ましょう。

使うスタックは、クライアントが[IrCOMM9Client.X]で、サーバーが[IrCOMM9Server.X]です。
使われるスタックのライブラリは、
クライアントが"libIrDA_PIC24F_CXC-elf.a"で、サーバーが"libIrDA_PIC24F_CXS-elf.a"です。

@ [IrCOMM9Server.X]をコンパイルしPIC24FJ64GB002にプログラムし、IrCOMMサーバーとします。
  PCとUSBで接続し、端末エミュレーションツール(TeraTerm等)を使って出力を監視します。
  端末エミュレーションツールを57600-8-N-1に設定します。

A [IrCOMM9Client.X]をコンパイルしPIC24FJ64GA002にプログラムし、IrCOMMクライアント
  します。ここではPCに繋いでいないですが、繋げられれば文字を出力します。

B IrCOMMサーバー側の実行を許可(電源をON)します。
  3秒後にサーバのPC端末エミュレーションツールにデモタイトル文字が表示されます。
  この後、サーバーはクライアントの接続待ちを行います。

C IrCOMMクライアント側の実行を許可(電源をON)します。
  5秒後にサーバーに文字が送信されます。
  (3/5秒後はサーバーを早めに起動する為です)

D データ送信が成功すると、テスト文字列がサーバー側の端末エミュレーションツールに表示されます。
  エラーが発生した場合は、端末エミュレーションツールに表示されます。

E 送信が終わると、クライアント側はサーバーとの接続を切りますのでサーバーも終了します。

TeraTermへの出力例1
サーバからPC端末エミュレーションツールに
出力された文字です。
クライアントは文字列を5回送信していますね。

《IrCOMMの3-wire Rawスタック》

使うスタックは、クライアントが[IrCOMM3Client.X]で、サーバーが[IrCOMM3Server.X]です。
使われるスタックのライブラリは、
クライアントが"libIrDA_PIC24F_CC-elf.a"で、サーバーが"libIrDA_PIC24F_CS-elf.a"です。

動作に操作等は"IrCOMMの9-wire cookedスタック"と同じです。


《OBEX》

OBEX機能はファイルデータの交換に使われます、先ずはクライアントとサーバーで通信して見ましょう。

使うスタックは、クライアントが[OBEXClient.X]で、サーバーが[OBEXServer.X]です。
使われるスタックのライブラリは、
クライアントが"libIrDA_PIC24F_OC-elf.a"で、サーバーが"libIrDA_PIC24F_OS-elf.a"です。

@ [OBEXServer.X]をコンパイルしPIC24FJ64GB002にプログラムし、OBEXサーバーとします。
  PCとUSBで接続し、端末エミュレーションツール(TeraTerm等)を使って出力を監視します。
  端末エミュレーションツールを57600-8-N-1に設定します。

A [OBEXClient.X]をコンパイルしPIC24FJ64GA002にプログラムし、OBEXクライアントとします。
  ここではPCに繋いでいないですが、繋げられれば文字を出力します。

B OBEXサーバー側の実行を許可(電源をON)します。
  3秒後にサーバのPC端末エミュレーションツールにデモタイトル文字が表示されます。
  この後、クライアントがサーバーとの接続を確立してvCardを送信するのを繰り返し待機します。

C OBEXクライアント側の実行を許可(電源をON)します。
  5秒後にOBEXサーバーに接続してvCardを送信します。
  (3/5秒後はサーバーを早めに起動する為です)

D データ送信が成功すると、vCard内容がサーバー側の端末エミュレーションツールに表示されます。
  エラーが発生した場合は、端末エミュレーションツールに表示されます。

E 送信が終わると、クライアント側は終了しますが、サーバー側はvCardが送信されるのを繰り返し待機
  します。

TeraTermへの出力例2
サーバから
PC端末エミュレーションツールに
出力された文字です。
待機中は"-"の文字が表示されます。


携帯電話と通信してみる

次は、携帯電話と通信してみます、使うのはサーバー側のみで上記プログラムそのままです。
OBEXサーバー側の実行を行い、携帯電話(au)から「自分の電話番号」を送ってみました。

TeraTermへの出力例3
文字化けしているのは、
SHIFT_JIS文字でPICが表示不可な為
でしょう。?


その他に[IrDA OBEX Peer]と言うスタックが在るが、これはクライアントにもサーバーにも成れる
様ですが、ここではこの動作実験は省きます。

《その他》

PIC24FにはIrDA機能が有り、スタックも在るので比較的簡単にIrDA実験が出来た。
IrDA機能が無いマイコン等は、MCP2150等を使う様であるが
MCP2150は"IrCOMMの9-wire cooked"のみでセカンダリ動作の機能のみ実装である様です、注意。
(最低でもOBEXくらいは実装していてほしいぞぉ)
それにぃ、MCP2150のクロック周波数は11.0592 MHzです、My秋月電子にもない。
さらにぃ、値段が高い。
又、なかなか手に入りにくいでしょう。




【きむ茶工房ガレージハウス】
Copyright (C) 2006-2019 Shigehiro Kimura All Rights Reserved.