第49回 温度センサーADT7410(温度計算)

温度センサーから取得したデータから、温度を求める方法を説明します。

目次

温度センサ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 ) {
    // 符号がマイナスの/第15ビットが1の場合
    temp_value = (temp_high & 0x7f) << 8 + temp_low - 32768;
} else {
    // 符号がプラス/第15ビットが0の場合
    temp_value = (temp_high & 0x7f) << 8 + temp_low;
}

actual_temp = (float)temp_value / 128.0;

次回の記事で、動作設定データを書き込み、温度データを読み取るプログラムを作成して、プログラム全体を完成させます。

更新履歴

日付内容
2018.8.12新規投稿
2025.8.18プログラムコメント追加
通知の設定
通知タイミング
guest
0 コメント
新しい準
古い順 一番投票が多い
本文中にフィードバック
全てのコメントを見る
目次