2014年12月2日(火) 21:54
LPS25Hには、動作確認レジスターがある。デバイス内の特定アドレスを読み出すと、一定の値が書かれている。その値が読み出せるかどうかで、通信が正常に行われているかどうか確認でいる次第。
読み出しプロトコルは、単一パケット内でWriteとReadを切り替えるという磁気センサーと同様の方式だ。つまり、磁気センサーの時に作ったルーチンをそのまま使える。サクっと試すと、無事に読み出せた。今回はトラブル無さそうだ。
実際にセンサーを使うためには、幾つか設定せねばならない。
更新頻度は最高の毎秒25回にしておきたいし、気圧値は3バイトなので読み出し中に1バイトずつ更新されないようにせねばならない。設定フラグ一発変えると、最上位バイトと最下位バイトの両方をReadするまで気圧値を更新しないようにできる。
至れり尽くせりだ。磁気センサーではデバイス内部アドレスがオートインクリメントされないという最低仕様だったが、LPS25Hではそんなこともない。デナイス内部アドレスのMSBを1にすると、オートインンクリメントとなる。
ともあれ、一番重要な設定レジスターは内部アドレス0x20となっている。書き込みも磁気センサーのルーチンそのまま使えそうなのでコピペして、デバイス内部アドレスだけ書き換える。
あれっ?どっちもアドレスが0x20ってそれ偶然の一致過ぎるぞ。
もしかして・・・と磁気センサーのデーターシートを確認すると、STマイクロ製だった。LPS25Hともども同じメーカーの製品だった。何もSTマイクロ製ばかり漁ったのではなく、純粋にベストなセンサーはどれかと先入観抜きで探したら、たまたまそうなったのだ。
そこで気付いた。磁気センサーにはオートインクリメントが無くて複数バイトの読み出しが大変だった。しかしLPS25Hの方はその機能がある。
I2Cの複雑怪奇だけは参ったが、STM32F4でプログラムを作っていて、素性の良さは買っている。STマイクロはかなりソフト開発に配慮したハードを作るメーカーだと考えるようになった。そんなメーカーが、オートインクリメント機能を付けないというのは考え難い。気圧センサーには機能があるのに。
以上の思考から、磁気センサーのデーターシートを再確認。すると、デバイス内部アドレスのMSBを立てることでオートインクリメントできるとの記述を発見!
すみません濡れ衣でした。磁気センサーにも当然のごとくオートインクリメント機能が存在していました。
後で、磁気センサーの読み出しプログラムを改変することになるだろう。既に動作しているプログラムを改変するのはリスクだが、まだ飛行前の開発段階である。改変により、読み出しが速くなるはずというメリットが無視できない。手順が減るということは、通信障害の確率も下がる。
written by higashino [マルチローター] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]
Generated by MySketch GE 1.4.1
Remodelling origin is MySketch 2.7.4