I2C温度センサADT7410を使う(2)

引き続き、レジスタの説明です。

●TEMPERATURE VALUE REGISTER(温度値レジスタ)

測定、ディジタル変換された温度値はこのレジスタへ格納されます。フォーマットは次の図のようになってます。

ADT7410_03

16ビットモードと13ビットモードでは小数点以下の値の範囲が異なります。実数で計算できる場合、このフォーマットはあまり意識する必要はありませんが、16ビットモードでも13ビットモードでも最上位ビット(b15)で正負を判断するというのは覚えておいてください。このビットが”1″の場合が負数です。

ちなみにPICなどで整数演算しか使えないコンパイラを使う場合は、整数部と小数部を分けてそれぞれ整数値として計算する必要があります。

13ビットモード時の下位3ビットは温度イベント関係のフラグですが、今回は使用しないため説明は省略します。

●温度値の換算(16bit)

レジスタから読み出した値を整数化して”AD値”とすると、小数点付きの温度は次のようにして求められます。

<正数の場合>  温度=AD値 /128
<負数の場合>  温度=(AD値-65536)/128

いずれも実数として計算します。正数か負数かは読み出したAD値のMSBで判断します。Arduinoは標準で実数計算ができるので簡単ですね。精度はfloat型で足りると思います。

●温度値の換算(13bit)

13ビットモードの場合は、レジスタ値の下位3ビットが不要ですので、レジスタ値を3ビット右にシフトした値で計算します。この値を”ad値”として次のように実数計算します。

<正数の場合>  温度=ad値/16
<負数の場合>  温度=(ad値-8192)/16

●STATUS REGISTER(ステータス)

温度変換完了や温度イベントを示すレジスタです。/RDYビットは、温度測定、変換が完了した時点で”0″にセットされます(温度読み出し可)。Temperature value registerから温度値を読み出すと”1″にリセットされます。時間待ちではなく、RDYビットで変換完了を知ることができます。

ADT7410_04

One-shotモードと1 SPSモードの場合、ワンショット・ビット(ConfigurationレジスタのBit[6:5])をセットすると/RDYは”1″にリセットされます。

●レジスタのアクセスについて

設定値をレジスタへ書き込む際は、毎回レジスタアドレスを指定する必要があります(省略は不可)。
2バイト構成のレジスタは、内部で自動的にレジスタアドレスがインクリメントされるため、最初のアドレスを指定した後は、単純に上位8ビット、下位8ビットの順でデータを送信するだけで構いません。

データを読み出す際もレジスタアドレスの設定が必要ですが、このアドレスは内部で保持されているため、続けて同じアドレスから読み出す場合はアドレスの指定は省略できます。
ArduinoのWireライブラリではリピートスタートできないため、最初にレジスタアドレスを設定して一旦終了し、その後2バイト読み出すしますが、2回目以降はレジスタアドレスの設定は不要です。
電源ON時のデフォルトではレジスタアドレスが0×00に設定されるため、測定温度値だけを読み出すならレジスタアドレスの設定は不要です。
なお、書き込みの際に他のレジスタを指定しても、読み出しのレジスタアドレスには影響ありません。

(続く)

コメントは受け付けていません。