レジスターマッピング
LSM303DLHCのデータシートによると、レジスターのアドレスとその意味は次のようになっている。
加速度計の方はかなり沢山の設定項目(Type=rwのところ)があるが、磁力計の方は0x00, 0x01, 0x02の3つのレジスタを設定するだけのようである。
磁力計の設定
レジスタアドレス0x00 (CRA_REG_M)
最初の設定レジスタは、温度センサーによる測定の可否と磁場測定のサンプリングレートを決めるためのものである。
温度センサーを有効にして、サンプリングを15 Hzにするためには、
10010000
というビットを立てればいいので、0x90を書き込むことにする。
レジスタアドレス0x01 (CRB_REG_M)
次のアドレスは、磁場計測のレンジを決めるところで、大変重要なものである。
レンジを最も狭くして感度を上げたいので、
00100000
というビットをたてることにする。16進数では、0x20となる。
この場合、レンジは±130000 nTで、分解能は12 bit(±2048)であるが、実際にはX軸とY軸は、1100/1E5 LSB/nT, Z軸は、980/1E5 LSB/nTであるので、1 LSBあたり、大体100 nT程度になるようだ。(LSB=Least Significant Bit(?), 量子化単位)
レジスタアドレス0x02 (MR_REG_M)
最後の設定項目は、観測実施モードについて。
連続して観測したいので、
00000000
というビットを立てる。16進数では、0x00となる。
レジスタへの書き込み
じゃあ、上で決めた値をレジスタに書きもう。
% sudo i2cset -y 1 0x1e 0x00 0x90
% sudo i2cset -y 1 0x1e 0x01 0x20
% sudo i2cset -y 1 0x1e 0x02 0x00
何もメッセージは出てこないが、レジスタ値をダンプ(i2cdump)してみると、きちんとレジスタ値は書き変わっていた。
加速度計の設定
加速度計のほうはやたらと設定項目があるが、さしあたって最初の設定が必要そうなのは、0x20と0x23の2か所のようである。
レジスタアドレス0x20 (CTRL_REG1_A)
このレジスタは、加速度測定のサンプリングレートと各軸の計測可否を決めるためのものである。
全ての軸の測定を可能にして、サンプリングを10 Hzにするためには、
00100111
とすればよい。すなわち、0x27を書き込むことになる。
レジスタアドレス0x23 (CTRL_REG4_A)
このレジスタは、加速度測定のレンジを指定する。
一番レンジの狭い±2gとして、"High-resolution output mode"に切り替えたいので、
00001000
というビット、すなわち、0x08を書き込む。
センサーの感度については、この表には記載がないが、他のページにの情報によれば、順に1 mg/LSB, 2 mg/LSB, 4 mg/LSB, 12 mg/LSBとなっている。
ちなみに、"BLE"にあるBig/Littleエンディアンの設定は、0=Big Endian(LSB@lower address), 1=Little Endian(MSB@lower address)のどちらかを選ぶ。
レジスタへの書き込み
磁力計への書き込みと同様に、加速度計にも上で決めた値をレジスタに書む。
% sudo i2cset -y 1 0x19 0x20 0x27
% sudo i2cset -y 1 0x19 0x23 0x08
同じく何もメッセージは出てこないが、レジスタ値をダンプ(i2cdump)してみると、きちんとレジスタ値は書き変わっていた。
最終更新:2014年06月09日 23:34