2013年4月14日日曜日

RP-1/RIR,HA-2/FCモジュールの赤外線リモコン出力制御プログラム

RaspberryPi+RP-1/IR基板でirremoteコマンドで学習させた赤外線リモコンコードファイルをXBee経由でRP-1/RIRモジュールやHA-2/FCモジュールに転送してIRリモコンを出力させるコマンドのソースコードです。

avrxbee.tgz

コマンドの使い方は

 usage : avrxbee <dev> <addrL> [h1on|h1off|h2on|h2off|hstat|<ir-file>]
<dev>はXBeeの接続されているuartのデバイスファイル。
RaspberryPi+RP-1/IRの場合は
  /dev/ttyAMA0
です。
<addrL>はリモート側のXBeeの64bitアドレスのうちの下位32bit
赤外線リモコン出力の場合はその次に記録した赤外線リモコンファイルを指定してください。

#define DEBUG
が定義されていると
[7e][00].....
と[]で囲まれているものが送信側のUARTのデータ
<7e><00>...
と<>で囲まれているものが受信側のUARTのデータを表示します。

2013年4月10日水曜日

iPhoneのWebアプリ


iPhoneのWebアプリ用にアイコンを色々と描いてみました。
適当に並べ替えをしやすいように単機能のiPhoneWebアプリをそれぞれ登録して、iPhoneのアプリフォルダの機能を使って整理できるような仕組みにしてみました。

暫くの間これで運用してみます。



2013年4月6日土曜日

HA-2モジュールのAVRマイコンのソースコード

HA-2モジュールのデバッグと動作検証がだいたい完了したのでソースコードを公開しておきます。
開発環境はMacのOS X 10.8.3 MountainLion 上で CrossPack-AVR-20121207とXCode上で開発しています。言語はC++です。Windowsの環境でも多分buildできるかと思います。

AVR_ha2.tgz   (<- gitに移行しました。HA2module)


main.ccはリセット直後に飛んでくるmain()関数からMainScheduler.Loop()を呼び出すだけのコードです。Scheduler classのloop()の中のwhile(1){}がメインループになります。
基本的には10ms周期のTickのタイミングか、何らかの割り込みが発生するまではsleepしています。
起きるとWatchDogをリセットし、PORTD6のHertBeatを1秒毎に点滅させる処理をしてXB.Wakeup()を呼びます。戻ってくるとまたsleepします。

XBee classはXBeeのコマンドの処理をするclassです。
コマンドを受け取るとそれを処理して結果をサーバーに返す処理をしています。
実際の通信処理はUsart classで行ない、取得したデータをQueue classで管理されるバッファに積んでいきます。
Usart classでは通信処理自体は割り込みで処理しSend/ReceiveFIFOでデータを管理します。

XBee classのコマンドで処理されるHA端子の制御はHAControl class, 赤外線リモコンの送信処理はIrOutput classで行います。
HAControl classの方は100ms程度の処理が最小なのでScheduler classでカウントしているTickCountを用いてタイミング管理をしています。
IrOutput classの方は38kHzの搬送波はTIMER0の8bit timerでPWMをfree runさせて作りoutputのみをコントロールします。TIMER1の16bit timerの方で次のon/off処理までの時間を設定し割り込みを発生させます。割り込み処理の中でSequenceNumberを進めながらAEHA, NEC, SONY, Otherの各赤外線リモコンシーケンスを発生させています。

コントロールサーバー側のRaspberryPiの赤外線リモコン記録時のOtherフォーマット用のコマンドバッファの最大値を1KBで作ったため、最大1KBのコマンドがやってくる想定でQueue用バッファを1KBに設定しています。このためstack,bss等も合わせてSRAMが1.5KB程度必要になりATmega328以上でないと動きません。
実際は256byteもいかないと思うのでもっと小さなものでも動くとは思いますが、値段差も数十円なので328を使用しています。