Propeller始めました(15) 温度センサーSTTS751を試してみる
主な仕様
・型番 STTS751-0WB3F
・パッケージ SOT-23-6 (6ピン)
・インタフェース I2C (4種類のアドレス設定可能)
・電源電圧 2.25 ~ 3.6V
・測定温度範囲 -40 ~ 125℃
・分解能 9 ~ 12ビット(設定可能)
実際の製品画像

変換基板にて6ピンDIPに変換します。

取りあえず、使い方としては次のような感じで接続します。
Addr/Thermピン、EVENTピンにてI2C経由とは別の通知機能(出力)がありますが、
今回は使わないのでGNDに接続しています。

Addr/Thermピンはプルアップ抵抗にてアドレスの設定を行うことが出来ます。

7.5K~33KΩのプルアップ抵抗にて 4つの異なるアドレスを指定することが出来ます。
GNDに接続した場合の仕様についても記載があり、Note:の箇所にアドレスが
device STTS671-0 の場合は 72h となります。
なので、抵抗なしで I2Cスレーブアドレスは 72h となります。
自作プロペラボードにて動作確認してみます。

プログラムソース(Spinコード)下記のような感じとなります。
{{
I2C接続温度センサ STTS751を使う
}}
CON
{システムクロック設定 6Hhz×16=96Mhz}
_clkmode = xtal1 + pll16x
_xinfreq = 6_000_000
I2CADR = $72 'I2Cスレーブアドレス
SCL_PIN = 28 'I2C SCLピン番号
OBJ
i2c : "Basic_I2C_Driver_1"
cn : "Parallax Serial Terminal"
{メイン処理}
PUB main | v,tH,tL,s,t1,t2, dt
cn.Start (115200)
i2c.Initialize(SCL_PIN)
'設定
stts751_writeByte(3,%1000_11_00) 'Configurationレジスタの設定 :EVENT無効、解像度12ビット
stts751_writeByte(4,5) 'Conversion rateレジスタの設定 :1秒間に2回サンプリング
'製品情報取得
v := stts751_readByte($fd)
cn.Str (string("Product ID register: "))
cn.Hex (v,2)
cn.str (string("h",13))
v := stts751_readByte($fe)
cn.Str (string("Manufacturer ID: "))
cn.Hex (v,2)
cn.str (string("h",13))
v := stts751_readByte($ff)
cn.Str (string("Revision number: "))
cn.Hex (v,2)
cn.str (string("h",13))
'温度データ取得
repeat
tH:= stts751_readByte(0) '上位
tL:= stts751_readByte(2) '下位(小数点以下)
s := tH & $80 '符号取得
t1:= th & $7f
t2:= 0
if tL & %1000_0000 <> 0
t2+= 5000
if tL & %0100_0000 <> 0
t2+= 2500
if tL & %0010_0000 <> 0
t2+= 1250
if tL & %0001_0000 <> 0
t2+= 625
cn.Str (string("temperture: "))
if s <> 0
cn.str (string("-")) '0度以下の場合、符号表示
cn.dec(t1)
cn.str(string("."))
cn.dec(t2)
cn.Char (13)
waitcnt(cnt+80_000_000)
{
STTS751のレジスタ値参照
adr : レジスタアドレス
戻り値: レジスタ値
}
PUB stts751_readByte(adr)
'参照レジスタの設定
i2c.Start(SCL_PIN)
i2c.Write(SCL_PIN, I2CADR)
i2c.Write(SCL_PIN, adr)
'1バイトデータ取得
i2c.Start(SCL_PIN)
i2c.Write(SCL_PIN, I2CADR|1)
result := i2c.Read(SCL_PIN,1)
i2c.Stop(SCL_PIN)
{
STTS751のレジスタ値設定
adr : レジスタアドレス
d : 設定値
戻り値: なし
}
PUB stts751_writeByte(adr,d)
'参照レジスタの設定
i2c.Start(SCL_PIN)
i2c.Write(SCL_PIN, I2CADR)
i2c.Write(SCL_PIN, adr)
i2c.Write(SCL_PIN, d)
実行結果はこんな感じです。

プログラム的にはデバイスの初期設定として、EVENTを使わない設定と解像度を12ビット
とする指定とサンプリング周期を1秒に2回としています。
初期化後は、製品情報を表示後、1秒間隔で温度データを取得して表示しています。
プロトコル的には非常にシンプルなので3.3V系のARMベースのラズパイ、Icihgojamでも
簡単に使えると思います。
« 2016年がスタートしました | トップページ | Raspberry Pi 2(Raspbian Jessie) のGPIOのシリアルポートを使う »
「Propeller」カテゴリの記事
- プロペラ2の評価ボード(2019.03.12)
- プロペラでVT100端末の実装(2018.07.25)
- Propeller始めました(22) ポータブルゲーム機の実装 7(2016.02.19)
- Propeller始めました(21) ポータブルゲーム機の実装 6(2016.02.17)
- SPI接続のカラー液晶モジュールの動作確認(2016.02.14)
« 2016年がスタートしました | トップページ | Raspberry Pi 2(Raspbian Jessie) のGPIOのシリアルポートを使う »

コメント