SpresenseでLチカから始める (18) Wireライブラリ 温度S-5851A

 温度センサS-5851Aはエイブリック(2018年の1月にセイコーインスツルの半導体事業部門が独立した)の製品です。同社の温度センサ一覧です。S-5851Aは秋月電子通商から入手しました。

S-5851Aのおもな特徴

 入手したのはSOT-23パッケージで、SNT-6Aのパッケージとは端子の並びが異なります。

  • 電源電圧 2.7~5.5V
  • 消費電流 45uA。スタンバイ時1uA
  • 測定温度範囲 -40~125℃。0.0625℃ の分解能(12ビット)で±0.5℃ (-25~+85℃)の確度
  • インターフェース I2C(最大400kHz)
  • データ長 2の補数形式の12ビット
  • スレーブ・アドレス AD0とAD1端子で設定

おもなレジスタ

ポインタ・
レジスタ
機能 初期値
0x00 温度データの上位1バイト、下位1バイト 0x00
0x01 コンフィギュレーション 0x00

 (※)温度データは12ビット2の補数形式。上位バイトに上位8ビットが、下位バイトにはMSBから4ビット分が入る。コンフィギュレーションの初期値0x00では、連続更新モード。

接続

 SOT23のパッケージは、変換基板を使ってDIP化しました。AD0とAD1の接続(0はVss、1はVdd)で、次のスレーブ・アドレスを設定できます。

AD0 AD1 アドレス
0 0 0x48
オープン 0 0x49
1 0 0x4a
0 1 0x4b
オープン 1 0x4c
1 1 0x4d
0 オープン 0x4e
1 オープン 0x4f

 

 5番ピンAD0と3番ピンAD1をVss(GND)につないで、0x48に設定しました。

 Spresenseは3.3Vで動作させました。

スケッチ

 最初に、左詰めで記録されている16ビット分を読み出し、右に4ビット・シフトすれば12ビットの温度データが用意でき、LSBが0.0625℃なので乗ずれば摂氏の温度になります。

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

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

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

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

 実行結果です。

前へ

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

次へ

SpresenseでLチカから始める (19) Wireライブラリ 距離VL53L0X