2017-03-25 9 views
3

センサにLSM303DLHCという2つの温度レジスタがありますが、摂氏温度に変換する方法はわかりません。 2レッグは次のとおりです。温度データをセンサから摂氏に変換する

TEMP_OUT_H_M register // high reg 

TEMP11 | TEMP10 | | TEMP9 | TEMP8 | | TEMP7 | TEMP6 | TEMP5 | TEMP4

 TEMP_OUT_L_M register //low reg 

TEMP3 | TEMP2 | TEMP1 | TEMP0 | 0 | 0 | 0 |データシートには0

言う: "TEMP [11:0]温度データ(8 LSB /度 - 12ビット分解能)" 私の現在のコードは

uint8_t hig_reg = read(TEMP_OUT_H_M) // value = 0x03 
uint8_t low_reg = read(TEMP_OUT_L_M) // value = 0x40 
int16_t temp = ((uint16_t)hig_reg << 8) | (uint16_t)low_reg; // temp = 0x0340 = 832 

float mTemp = temp/256; // = 3.25 
mTemp = mTemp +20 ;  // =23.25 (°C) i add 20 more 

ある しかし、私は理解していません20℃のオフセットはどこから来ますか?データシートには決して言及されていません。

+0

はデータシートです: http://www.st.com/content/ccc/resource/technical/document/datasheet/56/ec/ac/de/28/21/4d/48/DM00027543.pdf/ファイル/ DM00027543.pdf/jcr:content/translations/en.DM00027543.pdf – dante

+1

詳細な実装の詳細 - データシートには、値が[2の補足事項]で報告されていると記載されています(https://en.wikipedia.org/wiki/ 2の補数)、最上位ビットは、それが負(1)か正(0)かを示します。 –

+2

参照:http://electronics.stackexchange.com/questions/219032/how-to-determine-temperature-with-lsm303dlhc –

答えて

0

私の意見は、そのTEMPは、10ビットおよび記号(あなたが読むことができる値max:0x3FF)ごとに1つ上ですので、:

0x03FF - 0x0340 = 0x0BF

0x0BF/8 = 0x17の(10進数で23.875)。

あなたの計算には2の補数を忘れないでください。

+0

私はあなたの数式が正しいとは思わない。 0x0340(823)は依然として<2^11(2048)です。だから、 ' - 'を使う必要はありません。センサーに触れると、値は0x05e0に増加します。 – dante

+1

最終的には、https://github.com/embeddedadventures/BME280/blob/master/BME280_MOD-1022.cpp –

+0

をチェックしてください。このスレッド:https://forum.pololu.com/t/16-bit-values- in-lsm303/8499 –

3

ありがとうございました。その温度センサーが比較温度を決定してばらつきを計算するだけです。絶対温度には使用しません。その情報をデータシートに追加する必要があります。私はそれのために私の人生の2日を無駄にします。ここ

+0

旅行のお手伝いをして申し訳ありません:-(私は約20の記事を読んで、すべてGPSに関する話題です。 –

関連する問題