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