Bluetoothが流行る前といえば、機器間通信は赤外線だった。 そろそろ赤外線でアドレス交換したことの無い世代が増えつつあるのかな・・・
さて、16/32bitなPICのUARTには、IrDA SIR規格のエンコード/デコード機能がある。
IrDA規格では、ボーレートの16倍のクロックを基準に3クロック幅のパルスが使用される。 115.2kの場合、パルス幅は1.63usとなる。
エラッタ?
実際は、一部の機種で受信ができなかったため、だいぶ嵌っていた。
PIC32MXにはリリース時期によって2種類の周辺バスがある。 初期のピン機能固定のシリーズ、後発でPPS(ペリフェラルピンセレクト)に対応したもの。 両者ではエラッタリストの内容がだいぶ違う。
初期のシリーズのエラッタシートを読むと、IrDAについて不穏な記述があった。 よく読むと規格のパルス幅の最小値では受信できないらしい。それだけならボーレートを変えれば特に問題はなさそうだが・・・。
当初、PIC32MX340Fで実験していたが、送信はできても、受信ができなかった。 2つあるUARTポートを交換しても、 MPLABXでIrCommのサンプルをいじっても、IrDAモードで沈黙する。 後発のPIC32MX250F128Bだと問題なく信号をやり取りできるのに・・・。
ところが、初期シリーズの最上位バージョンであるPIC32MX795F512Lで試してみたところ、こちらは送受信ともに正常だった。 ポート2つの石だとダメなのか、リビジョンやロットに起因するものなのか。まだ検証できていない。
IrDAトランシーバーの波形仕様
IrDAトランシーバーにも、微妙な機能差がある。
とりあえず部品箱に眠っていた秋月のIrDAモジュール(ROHM製)を使ってみたところ、このモジュールは受信波形をボーレート関係なく1.5μ秒に整形するタイプ。 どのビットレートでも同じパルス幅を検出できるようになっているようだ。
赤外線通信式のモバイルプリンタのジャンクから取り出したモジュールはSharp製で、こちらは素直にパルス幅をそのまま出力してくれる。
さて、16/32bitなPICのUARTには、IrDA SIR規格のエンコード/デコード機能がある。
IrDA規格のトランシーバーをつなぐだけで、最高115.2kbpsの赤外線通信ができる。
以下は、プロトコルスタックに触れる前に嵌った点についての記録。 なおIrCommについては、Microchip社からアプリケーションノートとプロトコルスタックのサンプルプロジェクトが入手できる。
以下は、プロトコルスタックに触れる前に嵌った点についての記録。 なおIrCommについては、Microchip社からアプリケーションノートとプロトコルスタックのサンプルプロジェクトが入手できる。
機能自体は、UARTのポート初期化時に、UART Modeレジスタのbit12を設定するだけで有効化できて簡単。
今回は、PIC32MXのArduinoAPI互換環境であるMPIDEのコアライブラリを少し改造し、ハードウェアUARTの初期化ルーチンでIrDAのbitを有効化してみた。
IrDA規格では、ボーレートの16倍のクロックを基準に3クロック幅のパルスが使用される。 115.2kの場合、パルス幅は1.63usとなる。
エラッタ?
PIC32MXにはリリース時期によって2種類の周辺バスがある。 初期のピン機能固定のシリーズ、後発でPPS(ペリフェラルピンセレクト)に対応したもの。 両者ではエラッタリストの内容がだいぶ違う。
初期のシリーズのエラッタシートを読むと、IrDAについて不穏な記述があった。 よく読むと規格のパルス幅の最小値では受信できないらしい。それだけならボーレートを変えれば特に問題はなさそうだが・・・。
ところが、初期シリーズの最上位バージョンであるPIC32MX795F512Lで試してみたところ、こちらは送受信ともに正常だった。 ポート2つの石だとダメなのか、リビジョンやロットに起因するものなのか。まだ検証できていない。
IrDAトランシーバーの波形仕様
IrDAトランシーバーにも、微妙な機能差がある。
とりあえず部品箱に眠っていた秋月のIrDAモジュール(ROHM製)を使ってみたところ、このモジュールは受信波形をボーレート関係なく1.5μ秒に整形するタイプ。 どのビットレートでも同じパルス幅を検出できるようになっているようだ。
赤外線通信式のモバイルプリンタのジャンクから取り出したモジュールはSharp製で、こちらは素直にパルス幅をそのまま出力してくれる。