micro:bit / I2C バス / オンボード加速度計 / I2C バスから x 軸の 8 ビットデータを読み取る / MicroPython

参考: Beginning BBC micro:bit: A Practical Introduction to micro:bit Development, pp.90-95
 
x 軸だけ読み取ってみる。

  • ディバイスアドレスは 0x1d である。
  • 8 ビットデータのみ使う場合は CTRL_REG1 レジスタの F_READ ビットをセットしなければならない。CTRL_REG1 レジスタのアドレスは 0x2a である。
  • x 軸の 8 ビットデータは OUT_X_MSB レジスタに保存される。
from microbit import *
i2c.write(0x1d, bytes([0x2a, 1]))

def raw2g(raw):
    #最上位ビットに 1 が立っていたら負数なので -0d1 ~ -0d128 に変換する。
    if 0b10000000 == (0b10000000 & raw):
        raw -= 2**8
    
    # 8 ビットの生データ (+0d127 ~ -0d128) を g 値 (+1.984375 g ~ -2.0 g) に変換して返す。
    return 4/(2**8) * raw
    
while True:
    raw = i2c.read(0x1d, 2)[1]
    g_x = raw2g(raw)
 
    print(bin(raw), g_x, sep=", ")
    sleep(500)

f:id:ti-nspire:20180529153220p:plain