2015/10/18

PIC32MXでIrDA送受信の実験

Bluetoothが流行る前といえば、機器間通信は赤外線だった。 そろそろ赤外線でアドレス交換したことの無い世代が増えつつあるのかな・・・

さて、16/32bitなPICのUARTには、IrDA SIR規格のエンコード/デコード機能がある。

IrDA規格のトランシーバーをつなぐだけで、最高115.2kbpsの赤外線通信ができる。

以下は、プロトコルスタックに触れる前に嵌った点についての記録。 なおIrCommについては、Microchip社からアプリケーションノートとプロトコルスタックのサンプルプロジェクトが入手できる。


機能自体は、UARTのポート初期化時に、UART Modeレジスタのbit12を設定するだけで有効化できて簡単。

 今回は、PIC32MXのArduinoAPI互換環境であるMPIDEのコアライブラリを少し改造し、ハードウェアUARTの初期化ルーチンでIrDAのbitを有効化してみた。 

PIC32MX250F128BのUART/IrDA 115200bps

画像は、UARTの時とIrDAのTX波形を観測してみたところ。(解析されたIrDAのbitオーダーがバグってる気が…)

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製で、こちらは素直にパルス幅をそのまま出力してくれる。  

GP2W0116YPS(Sharp)とRPM851A(ROHM) 対応する規格は順に1.2 、 1.0

Kindle PaperWhite(2015)


Kindle Paperwhite(2015) Wifiモデルが届いた。 グローバルモデルのKindle Touchを3年使い続けてきたが、日本語ストアにアクセスできないのがネックだった。

 解像度が300ppiになった利点については、洋書での比較は解像度ごとにフォントが最適化されていることもあって、読み進む上ではあまり意識することはない。
 日本語や漫画、PDFの細かい表示では、レスポンスの向上も相まって、かなり効果がある。
それよりも、バックライトによって、表示の読み取りやすさが環境にあまり左右されないのは嬉しい。

利用可能な内蔵辞書の数も増えていて、語学的な観点でもだいぶ充実した端末になっている。