台風の影響でしょうか朝から雨です。気圧も少しずつ下がってきています。
さて、悪戦苦闘のプログラミングですが、まあ、気圧表示はOKとして温度表示、これが意外とてこずってます。何とか現在の室温表示は良さそうです。
Temperature data are expressed as TEMP_OUT_H & TEMP_OUT_L as 2’s complement
numbers.
Temperature output data:
T(degC) = 42.5 + (Temp_OUTH & TEMP_OUT_L)[dec]/480
42.5度を境にTemp_OUTH & TEMP_OUT_Lがマイナスの場合とプラスの場合が出てきます。気圧は大気圧の測定ですからマイナスになることありませんのでいいのですが、温度はマイナスからプラスの変化があります。温度も実際には100度Cになることはありませんがとりあえず計算ルーティンの表示機能は正しくないと面白くありません。
2013/10/25(Fri)
温度表示は意外と大変そう、42.5度を境にどうすればいいいのか?難しい、、、、。今、気圧は988.4hPaじわじわ下がっていますね。私のテンションも下がって来ました。
2013/10/26(Sat) 11:20 AM
温度表示はさっぱり先へ進みません。
LPS331の温度計算式は T(degC) = 42.5 + (Temp_OUTH & TEMP_OUT_L)[dec]/480 となっています。
42.5度を境にマイナス、するかプラスするかで温度を求めます。
温度が42.5度以下の場合は Temp_OUTH & TEMP_OUT_L の値は as 2’s complement で出力され、42.5度以上ではそのままの値が出てきます。
「例」
20度C Temp_OUTH & TEMP_OUT_L = 0xD5D0 MSBが1でマイナス符号を表しています。ここから実際の値を求める為に2の補数をとり+1します。
0xD5D0=1101 0101 1101 0000 ---> 0010 1010 0010 1111 + 1=0x2A30
0x2A30 = 10800[dec]
T(degC) = 42.5 + (Temp_OUTH & TEMP_OUT_L)[dec]/480 = 42.5 + (-10800/480)=20 ℃ となります。
次に50℃の場合は Temp_OUTH & TEMP_OUT_L = 0x0E10 になっているはずです。MSBは0ですから変換は必要ありません。
0x0E10 = 3600[dec]
T(degC) = 42.5 + (Temp_OUTH & TEMP_OUT_L)[dec]/480 = 42.5 + 3600/480 = 50℃ となります。
えーとっ!MSBが0か1かでマイナスするかプラスするかの計算をして結果を表示すればいいはずですが、おっとどっこい、思惑通りにはプログラムが動きません。記述が適切でないのでしょう。
因みに、LPS331APの温度センサーは0℃~80℃までが正確に測れると仕様に書いてあります。でも実際は気温を測るだけですので42.5℃より上はどうでもいいのですが、、、、、
体温計は42度までしか計れません、人間の体温は42度よりは上がらないとか、それ以上あがると死んでしまいますからね。