温度センサから取得したデータから、温度を求める方法を説明します。
目次
温度センサADT7410の温度データ
ADT7410の測定した温度は、メモリマップのアドレス0x00と0x01に格納されています。0x00が上位8ビット、0x01が下位8ビットのデータで、この2バイトのデータから温度を求めます。
なお、計算方法は16ビットモードと13ビットモードでは異なります。実践編では16ビットモードで温度を計測しますで、16ビットデータの温度計算方法を説明します。
温度センサから取得した0x00と0x01のデータは以下のようなフォーマットになっています。
温度センサメモリマップのアドレス0x00のデータが温度データの上位8ビット、0x01が下位8ビットになりますので、データを上のように16ビットと見ます。この16ビットから温度データは以下のように計算します。
まず、符号を判定します。最上位ビットの第15ビットが1の場合がマイナス、0の場合がプラスとなります。
残りの15ビット、つまり第14ビットから第0ビットまでの15ビットを符号なし整数と見た場合、以下のような計算式により温度が計算できます。
- 温度がマイナスの時(第15ビットが1の時)
温度 = ( (15ビット数値) – 32768 ) / 128 - 温度がプラスの時(第15ビットが0の時)
温度 = (15ビット数値 / 128
0x00のデータが変数「temp_high」に入っていて、0x01のデータが「temp_low」に入っている場合、温度を計算するプログラムは以下のようになります。actual_tempが実際の温度になります。
float actual_temp;
uint16_t temp_value;
uint8_t temp_high, temp_low;
if( temp_high & 0x80 ) {
temp_value = ( (temp_high & 0x7f) << 8 ) + temp_low - 32768;
} else {
temp_value = ( (temp_high & 0x7f) << 8 ) + temp_low;
}
actual_temp = (float)temp_value / 128.0;
次回の記事で、動作設定データを書き込み、温度データを読み取るプログラムを作成して、プログラム全体を完成させます。
更新履歴
日付 | 内容 |
---|---|
2018.8.12 | 新規投稿 |