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のシリアルポートを使う »
コメント