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

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

目次

温度センサADT7410の温度データ

ADT7410の測定した温度は、メモリマップのアドレス0x00と0x01に格納されています。0x00が上位8ビット、0x01が下位8ビットのデータで、この2バイトのデータから温度を求めます。

なお、計算方法は16ビットモードと13ビットモードでは異なります。実践編では16ビットモードで温度を計測しますで、16ビットデータの温度計算方法を説明します。

温度センサから取得した0x00と0x01のデータは以下のようなフォーマットになっています。

Pic practice 49 temrerature format

温度センサメモリマップのアドレス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 新規投稿
通知の設定
通知タイミング
guest
0 コメント
新しい準
古い順 一番投票が多い
本文中にフィードバック
全てのコメントを見る
目次