BOSCH社製6軸センサ(3軸加速度、3軸磁気)BMC150を搭載しています。
https://www.bosch-sensortec.com/bst/products/all_products/bmc150

今回は磁気センサにアクセスします。
QMSIのサンプルMagnetometerと
mbedのBMC150サンプルを参考にしました。
https://os.mbed.com/users/Dautor/code/BMC150/file/1d1123b3df76/bmc150.cpp/
ありがとうございます。
加速度計のアドレスは、0x12です。
#define BMC150_I2C_MAG_ADDR 0x12
磁気センサの初期化でレジスタ0x4Cで0x38を設定しています。出力データレートを30Hz、操作モードをノーマルにしています。
磁気データは、0x42レジスタから2バイトづつXYZ軸の順に入っています。6バイトを一度に読み込んでいます。
温度と加速度と磁気値を500ms毎に取得し、シリアル経由でパソコンに表示しました。

以下にサンプルプログラムがあります。
https://github.com/jendo1969/d2000/tree/master/Bmc150_MAG
BOSCH社製6軸センサ(3軸加速度、3軸磁気)BMC150には、加速度センサ側に温度測定を搭載しています。
https://www.bosch-sensortec.com/bst/products/all_products/bmc150

#define BMC150_I2C_ADDR 0x10
#define ACCD_TEMP_REG 0x08
I2Cアドレスが0x10 、温度値のレジスタが0x08です。
温度は、取得した数値が0の時、23℃です。数値1が0.5℃に対応しています。下が変換式はです。
temp_val = ((float)data) / 2 + 23;
1秒ごとに温度を取得し、シリアル通信USART_Aでパソコンに送りました。

数℃実際の室温より高いので校正が必要です。
BMC150 ICを触ると温度が上がるので計測はできているようです。
以下にサンプルプログラムがあります。
https://github.com/jendo1969/d2000/tree/master/Bmc150_Temp
© 2014 Spineedge Corporation.
組込み技術向上のため、エンベデッドに関する話題中心のブログです。