« 2009年9月13日 - 2009年9月19日 | トップページ | 2009年10月4日 - 2009年10月10日 »

2009年9月27日 - 2009年10月3日の1件の記事

2009年9月29日 (火)

無線モジュールXbeeで(に)遊んでいる(遊ばれている)

 前の記事をアップした直後に、Olimexから例の一語メール「shipped」(発送したよ)を貰った。あれから10日以上経ったが、まだ基板は届いていない。ワイヤレス電力ロガーの通信手段となるXbeeシステムの本格的な開発は、基板が届いてからと思っていたのだが、待ちきれずバラックながら色々試している。Xbeeは思ったより手強い相手だ。

Xbeeのファームウエアを飛ばし肝を冷やす(9/21/09)
 どうもおかしい。ウェブでみんなが実験しているXbeeの機能と、マニュアルの記述やX-CTU(Xbeeの設定ユーティリティ)の設定内容とが一致しない。Xbeeのファームウエアのバージョンの差で機能に大きな差があるようだ。マニュアルの記述の何を信じて進めていけば良いのかわからなくなった。

 今度のワイヤレス電力ロガーでは、センサー側(子機)の構成は必要最小限に抑えるため、ADコンバーターはXbee内蔵のものを使うことにしている。ところがウェブサイトには、このADコンバーターを使っている例が少ない。殆どが、Xbeeを単なるUARTインタフェースの代わりに使っており、たまに見つかってもArduinoというAVRを使った今流行の開発モジュールのシールド(付加基板)の内部コマンドや、企業の開発キットの中で使われていて、具体的な設定方法が公開されていない。

 こうなるとマニュアルに頼るしかないのだが、肝心のADCやI/Oピンの設定コマンドは、マニュアル(v1.xCx版  2008/9/4)によれば、コマンド一覧表の中のXbeeProのみでしか出来ないところにある。無印のXbeeはどうするのだろう。実際にもX-CTUで該当するATコマンドを入れると、そんなコマンドは知らないとERRORが返ってくる。ええーそんな。無印のXbeeでは、このへんのピンは使えないの?まさか。ウェブサイトには無印Xbeeで、このADCピンを使った温度センサーの実験報告がある。どうやって設定したのだろう。

 バージョンの記述がまた混乱させる。マニュアルにはv1.x80とか、v1.xC1とあるが、手持ちのXbeeのX-CTUで出てくるファームウエアバージョン番号は、1084である。どう換算するんだろう。先の記事のリモートATコマンドもX-CTUでテストできると良いのだけれど、このプログラムのリモートコンフィギュレーション画面の中にはそれらしいものはない。X-CTUは最新のバージョンなのだが。

 先人のブログをさらに読み込む。うーむ、リモートATコマンド機能は、ずいぶん最近になって可能になった機能らしい。ファームウエアのアップグレードで出来るようになるらしいが、手持ちの無印Xbeeがその対象であるかどうかはわからない。

 やっぱり、Xbeeは販売元の開発キット(数万円する)を買って全体のバージョンを揃えてから動かすのが本筋のようだ。ばら売りされたXbeeチップだけを買って動かすことを想定していない。しかし、こちらはアマチュアである。とてもそんな余裕はない。

 これはどうも、設計に取り掛かる前に最新のファームウエアにしてみるのがまず先決のようだ。それから何が出来るか考えよう。hamayanさんのページを参考に、ファームウエアのアップデートを試みる。販売元のサイトから、最新ファームをダウンロードする。無印Xbeeの最新バージョンは10C8だった。そうか、わかったぞ。マニュアルのv1.xABというのは、10ABなのだ。Xbee

 指示通り、ファームウエアを更新した。基板が来ないのでジャンパーの空中配線でリセットしたりするのは結構神経を遣う。2つあるXbeeモジュールを切り替えてそれぞれのファームウエアを更新する。順調にアップグレードされた。調子に乗って、一方をAPIモードにし、ループバックさせて、親機のADCデータを子機のループバックで見ようと設定を色々いじる。

 そのうちに、親機のレスポンスが返らなくなった。どうもパラメーターを書き込むときに、マウスのホイールを動かしたため、入力窓のパラメーターが動き、違ったバージョンのファームウエアを書き込んでしまったようだ。入力窓に証拠が残っている。まずい。

 単独でもうんともすんとも言わなくなった。UARTが反応しないのでAPIモードのリセットもできない。買って最初のATコマンド投入のとき一度動かなくなったときがあったが、そのうち自然回復した。今度も、小一時間放置して電源入れ直すも状況は変わらず。

 ううう、ファームウエアの書き損じをやってしまったか。しかし、幸いなことにhamayanさんのページには、ファームウエアを書き損なったときの回復手順が出ている。手順を読む。何だと、電源を入れずにシリアルをつなぐだと?それにUSBではできないとある。

 状況は暗い。こちらは秋月のUSBモジュール経由のTTL UARTだ。それに電源を入れないでUARTが動くのか。半信半疑で、USB-UARTからの電源リード(+3.3V)を抜いて、言われるままX-CTUの手順を実行する。ややや、何か反応しているぞ。Xbeeの電源を入れる。おおお、プログラミングしはじめた。素晴らしい。

 やれやれ肝を冷やした。hamayanさんのお陰で、ファームを書き損なったXbeeは、前の状態に完全に復帰した。しかし電源を切ってもファームが書き込めるというのはどういうことなのだろう。理解を超えている。世の中まだまだわからないことだらけだ。

ADCが動かない(9/24/09)Xctu10ca
 ファームウエアは、最新の10C8に上がった。X-CTUのコンフィギュレーション画面にも、これまでの1084にはなかった沢山の新しいコマンドが並ぶ。ADC、I/Oピンの設定も出来るようになった。まるで違う機械のようだ。

 しかし、Xbeeの設定はなかなか順調には進まない。こいつUARTだけの透過モードは至極簡単に動くのだけれど、少しインテリジェントなことをやろうとすると突然難しくなる。モジュールを設定するコマンドの数はマニュアルで数えると、何と69もある。

 しかも、Xbeeそのものの種類がやたらと多い。X-CTUのユーティリティで数えてみたら、選ぶべきハードウエアは十何種類、ファームウエアの種類も5種類近くあって、紛らわしいことおびただしい。

 基板が来れば、AVRか何かでXbeeのドライバーを作りAPIモードのテストをするつもりだが、それまでのとりあえずの策として、親機側のADCを動かし、ループバックでそのデータを返して、X-CTUで読むことにする。わざわざループバックにしているのは、子機の設定をテストの度に接続しなおして設定する手間を省くためである。

 しかし、これが言うことを聞かない。Xbee双方を非APIモードのまま、

 ATD0=2   (20ピンのポートをADコンバーターにする)
 ATSM=5  (サイクリックスリープモード、ピン起床あり)
 ATSP=C8 (2秒(200×10ms)ごとに目覚めてADデータを送る)

とすれば、2秒ごとに20ピンのADCデータを親機が子機へ送出し、子機はそれをそのまま親機に返してくるはずなのだが、全く反応はない。単なるループバックテスト(Range Test)は動くので、ハードの問題でなく、コマンド設定の問題である。 If0911

 ATIR(サンプリング間隔)とか、ATAS(スキャンアクティブ)とか、それらしいコマンドを片っ端から入れていくが、何の動きもなし。頭を抱える。他に動作を確認する機能もあるのだが(Association機能、LEDの点灯などで動作表示)、空中配線のXbeeチップはICプローブで蜂の巣状態になっており、下手にいじって壊してしまうのが怖い。これ以上、手を加えたくない。皮肉なことにLPCMプレーヤー基板より、Xbeeチップ変換基板の到着が待ち遠しくなって来た。

やっとADCが動いた。基本的なミス(9/26/09)
 珍しく長期のシルバーウィークが明けて、仕事の帰りの本屋で、インターフェース誌の最新号(11月号)を見つけた。お誂え向きに無線特集の号で、Xbeeも掲載されている。早速買い求める。

 記事の内容は、だいたい既知のことが多かったが、頭の中の情報の整理には役立った。全体の見通しが良くなり、落ち込んでいた意欲が復活した。リモートATコマンドによるX-CTUでのリモートモジュールの設定(p104)の説明も収穫だった。ここはマニュアルのないところで、これは助かる(まだ先の話だが)。Xctuconfig

 しかし、目の前のXbeeを動かすヒントは見つからない。相変わらずADCが動き出さない。しようがない。ループバックテストは諦めて、子機に設定し直そうとX-CTUでパラメーターを見ていた時、ふと気になるパラメーターが目に付いた。Xbeeネットワークの役柄を決めるATCE(コーディネーターかエンドディバイスかを決めるパラメーター)である。

 現在は、1対1なので片側をコーディネーターにする必要はないが、1対Nに備えて、現在の親機のCEパラメーターは1(コーディネーター)になっている。もしかして、コーディネーターではI/O関係は動かないのかもしれない。だめもとで、これをエンドディバイス (ATCE=0)にしてみる。

 やった。こいつが原因だった。X-CTUのターミナル画面Adcoutに、親機のADCデータが送信され、子機でループバックされたデータフレームが次々に戻ってくる。いやあ、やっと動いた。マニュアルのどこかには書いてあるのだろうが、こんな基本的なところまでは目が届かない。

 サイクリックスリープモードを解除してみる。立て続けにデータが送られ、見る見るうちにターミナル画面が一杯になっていく。やれやれこれで第一関門は突破した。次の課題はリモートATコマンドによる子機のI/Oドライブだ。

 それにしても、Olimexからはまだ品物が届かない。16日に発送したというのならもう10日が経つ。日本の連休は、外国の航空貨物の取り扱いには関係ないはずで、それにしては遅い。航空便ってそんなに日数のかかるものだったっけ。

| | コメント (2) | トラックバック (0)

« 2009年9月13日 - 2009年9月19日 | トップページ | 2009年10月4日 - 2009年10月10日 »