| MMA8451Q |
単に3軸の加速度を計測できるだけでよかったのですが,MMA8451Qはデジタル出力ならではの機能が多く用意されています(FIFO,ハイパスフィルタ,オーバーサンプリング,方向検出,など)。データシート・マニュアルは下記リンクで見ることができます。一部,日本語のドキュメントもありますが,肝心のデータシートは英語のみ。しかも多機能なのでページ多めです。
適当なレジスタを読めば簡単にデータが取れるだろうと思っていたのですが,なぜか値は0xFFから変化せず。頼みの綱のデータシートは
唯一分かったのは,データレジスタはブロック転送でないと読めないということでした。これで一応データは取れましたが,なぜか14 bitモードでも8 bit分のデータレジスタしか更新されません。どうやら英語データシートを頭から読まないといけない雰囲気です。
・・・
・・
・
まあ8 bitでもいいですよね!
以下のプログラムで動作確認しました。AdafruitのI2C Classを使いました。
一応データレジスタは読めますが,ブロック転送した最初のデータが必ず0xFFになり,その後にX軸,Y軸,Z軸の加速度が続きます。
MMA8451データ取得サンプル
#!/usr/bin/python
import time
from Adafruit_I2C import Adafruit_I2C
i2c = None
# Registers
STATUS = 0x00
OUT_X_MSB = 0x01
CTRL_REG1 = 0x2A
XYZ_DATA_CFG = 0x0E
i2c = Adafruit_I2C(0x1c)
# CTRL_REG Reset, StandbyMode
i2c.write8(CTRL_REG1, 0x00)
# FullScaleRange
i2c.write8(XYZ_DATA_CFG, 0x00) # 2g
#i2c.write8(XYZ_DATA_CFG, 0x01) # 4g
#i2c.write8(XYZ_DATA_CFG, 0x02) # 8g
# ODR=100Hz, FastRead(8bit), ActiveMode
i2c.write8(CTRL_REG1, 0x1B)
# Read Data
while(True) :
block = i2c.readList(OUT_X_MSB,4)
for data in block:
print "%5d" % data ,
print ""
time.sleep(0.1)
一応計測はできたので,しばらくはこのまま放置です^^;
ソースコードを探してここにたどり着きました.
返信削除ありがとうございます.
私も四苦八苦して色々と試しているところなのですが,0x1bを0x3dにすれば14bitモード読めないですかね?(私の環境では8bitですらへんてこな値になるので,あっているかどうかよくわからないので買い直そうと思っているところなのですが・・・)
初心者ですので,的外れなことを言っていたらすみません.
あ,もちろん0x1dとかでもいいと思います.(私の環境ではx方向の加速度が変な値が出るのでそれで正しいか確証を持っていないのですが)
返信削除