SPI温度センサADT7310を使う(2)

引き続き、レジスタの説明です。アドレスは異なりますが、ビット構成はADT7410と同じです。また、摂氏温度への換算方法もADT7410と同じです。

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

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

ADT7310_2

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ビットで変換完了を知ることができます。

ADT7310_3

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

(続く)

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