SpresenseでLチカから始める (16) Wireライブラリ 温度TMP116

 テレビの天気予報を見ていると、かならず温度は小数点第一位までを表示しています。多くの温度センサの確度はよくても±0.5℃ですから、校正なしでは0.1℃の表示はできません。校正機関は気象庁が紹介してくれます。

 テキサス・インスツルメンツの温度センサTMP116は±0.1℃(typical)です。校正なしでこの確度が保証されます。2mm角ととても小さいので、温度変化にも素早く反応しそうです。評価用ボードはこちらで紹介しました。

 TMP116の部分だけを切り離して、Wireライブラリで通信します。

TMP116のおもな特徴

  • 電源電圧 1.9~5.5V
  • 消費電流 3.5µA。シャットダウン時250nA
  • 測定温度範囲 -40~125℃。0.0078℃ の分解能(16 ビット)で±0.1℃ (–10~+85℃、V+=3.3V)の確度
  • インターフェース I2C(1~400kHz)
  • データ長 2の補数形式の16ビット

主なレジスタ

ポインタ・
レジスタ
機能 初期値
0x00 温度データ 0x8000
0x01 コンフィギュレーション 0x0220
0x02 リミット上限 0x6000
0x03 リミット下限 0x8000

 (※)コンフィギュレーションの初期値0x0220では、連続変換、変換時間250ms、平均化は8回などが設定されている。

接続

 Alertは使っていません。基板上でADD0端子はGNDに接続されているのでスレーブ・アドレスは0x48です。3.3Vで動作させました。5V時より消費電力が下がります。

スケッチ

#include <Wire.h>
#define TMP116address 0x48
#define TemperatureR 0x00

void setup() {
Wire.begin();
Serial.begin(9600);
}

int read_tempdata() {
Wire.beginTransmission(TMP116address);
Wire.write((byte)TemperatureR);
Wire.endTransmission();
Wire.requestFrom(TMP116address, 2);
//wait for response
while(Wire.available() == 0);
int T = Wire.read();
T = T << 8 | Wire.read() ;
return ( -(T & 0b1000000000000000) | (T & 0b0111111111111111) );
}

void loop() {
float Temp = read_tempdata() * 7.8125 /1000.0;
// Serial.print(String(read_tempdata(),BIN) +" ");
Serial.println(Temp,2);
delay(1000);
}

 実行結果です。

前へ

SpresenseでLチカから始める (15) Wireライブラリ 温度EMC1412

次へ

SpresenseでLチカから始める (17) Wireライブラリ 温度STTS751-0