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);
}
実行結果です。