ジャンルを特定せず興味のある分野について、思ったことを書いています。半年ぐらい前、秋月で買ってきたまま部品箱の肥やしになっていたLIS3DHという三軸加速度センサーモジュールを週末にArduinoにつないでみることにした。ネットを検索すればコードのサンプルでも出てくるかと思ったんだけど、適当なサンプルが見つからなかったので、データシートを読むことになっちゃった。接続はSPIで、普通にArduino側の11,12,13をMOSI,MISO,SCKに使い、10ピンをセレクトに使う。2Arduino側のピンと、秋月のモジュール側のピン(LIS3HDのピンではないので注意)は表の通り。MOSIとSDI、MISOとSDO、SCKとSPC、そしてSSとして使うArduinoの10ピンをcsにつなぐ。電源はArduinoの3.3Vピンをモジュール側の1、グランドは2につなぐ。次はコードを書くだけ、SPIライブラリがあるから楽勝だろうと思ったのだけど、まあ、レジスタの設定だの読み出しの方法だの、試行錯誤をすることになった。初期設定は、デフォルトの設定に従い、ビットオーダーをMSBFIRST、データモードはSPI_MODE3、クロック分割はSPI_CLOCK_DIV2をセット。コントロールレジスタ1には0x47をセットする。コントロールレジスタ1の内容は、上位4ビットがサンプリングの周期で0100で50Hz。4ビット目がパワーモードでここは0にしてノーマル。下3ビットはXYZの有効/無効で、0111。2進で01000111、16進で0x47、10進で71をセットする。コントロールレジスタ1から6までの内容を設定することで、各種のモードや動作の設定ができる。下のようなコードを書いてみたところ、3軸とも加速度のデータは取れる。データの表現は2の補数。気になるのはなぜか下位6ビットがゼロになっている。コントロールレジスタ4で感度の設定ができるので高感度モードにしたり、いろいろやってみたけど、やっぱり下位6ビットはゼロ。SPIの読み出しで何か間抜けなことをしてるのかもしれないけれど、とにかく加速度センサーが使える、ということで満足することにして、もう夜も更けたので今日はこのへんでおしまい。この続きはやるかもしれないし、やらないかもしれない。どなたか下位6ビットの秘密をご存じの方は教えてください。コントロールレジスタ4での感度設定が間違っていたことに気がついた。4ビット目のフラグのHRを1にすると分解能12ビット、0にすると分解能10ビットになる。0x08);を指定すれば12ビットの分解能で加速度を読み込める。「おかしーなー」と悩んでいた時は、3ビット目を立てたり降ろしたりしてたのでした。間抜けなポカミスでした。*自己紹介yu韓国関連のニュースをフォローしています。