フォト
2025年3月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          
無料ブログはココログ

« 2016年がスタートしました | トップページ | Raspberry Pi 2(Raspbian Jessie) のGPIOのシリアルポートを使う »

2016年1月 3日 (日)

Propeller始めました(15) 温度センサーSTTS751を試してみる

ADコンバーター機能を持たないプロペラで温度を測定したいと思い、
「高精度12ビットI2C接続デジタル温度センサ STTS751」を試してみました。
秋月電子で1個100円で販売されているものです。

主な仕様
・型番       STTS751-0WB3F
・パッケージ      SOT-23-6 (6ピン)
・インタフェース  I2C (4種類のアドレス設定可能)
・電源電圧        2.25 ~ 3.6V
・測定温度範囲  -40 ~ 125℃
・分解能               9 ~ 12ビット(設定可能)

実際の製品画像

02

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

Dscn4662

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

03_2

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



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

なので、抵抗なしで I2Cスレーブアドレスは 72h となります。

自作プロペラボードにて動作確認してみます。

Dscn4661

プログラムソース(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)

実行結果はこんな感じです。

01

プログラム的にはデバイスの初期設定として、EVENTを使わない設定と解像度を12ビット
とする指定とサンプリング周期を1秒に2回としています。
初期化後は、製品情報を表示後、1秒間隔で温度データを取得して表示しています。

プロトコル的には非常にシンプルなので3.3V系のARMベースのラズパイ、Icihgojamでも
簡単に使えると思います。

« 2016年がスタートしました | トップページ | Raspberry Pi 2(Raspbian Jessie) のGPIOのシリアルポートを使う »

Propeller」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: Propeller始めました(15) 温度センサーSTTS751を試してみる:

« 2016年がスタートしました | トップページ | Raspberry Pi 2(Raspbian Jessie) のGPIOのシリアルポートを使う »