アマチュア無線や電子工作,バイクの話などを徒然なるままに書き散らすメモ程度のblogです.


by jq1ocr

加速度センサー LIS3DH を使ってみる

I2C LCD が動くようになったところで,加速度センサーを増設してみました.
d0106518_1431544.jpg
ところがすんなりは動きませんでした.まず値が出てきません.調べてみるとデータ取得に入る前の CTRL_REG の設定ですでに引っかかっている様子.更に調べていくと….
start condition 発行
device address 送出
register address 送出
data 送出
stop condition 発行
という通信手順で,device address と register address に関しては送出後にセンサーから ack が帰ってくるのですが,その後送っている data に関しての ack が帰ってこないのです.結局まだ I2C の実装が完全ではないことになりますね.

また試行錯誤のしている間にどこかの CTRL_REG の設定をいじり壊してしまった可能性もあると思ったので, CTRL_REG1, CTRL_REG2… と順番に書いていくようにすると,最初の一つに関して ack が帰ってこないものの,二つ目からは ack が帰ってくることに気づきました.そこで,最初に書き込みを失敗した CTRL_REG を二回書き込むことで,とりあえず対策しました.根本的な解決はとりあえず保留.苦笑 時間ができたらもう一度 I2C の仕様書を片手にプログラムを見直そうと思います.

あともう一つ.データは CTRL_REG4 の HR を 1 にセット(0x23 に 0x08 を書き込む)することによって,資料にある通り 12bit で取り出せます.しかし,ここから G 値への変換方法が書かれていません.そこで2進数でデータを LCD に表示させて調べたところ,OUT_X_H には8ビット全部入っていて,OUT_X_L は下4ビットが0になっていることが分かりました.よって得られた値を float にキャスト,16 で割り,また2の補数で出てくるので,実効 11bit 分の 2048 が最大値となり,それをセンサーに設定した最大 G (デフォルトでは 2 G)とすればいいので,1024で割るようにしましたが,軸によって5-10%くらいの誤差があるようです.
【追記】最初操作を間違っていましたので直しました.
[PR]
by jq1ocr | 2013-12-30 23:50 | マイコン・電子工作 | Comments(0)