I2C温度センサADT7410を使う(3) (9/30更新)

今回はいよいよ、CQカチャduinoにセンサを実際につないで作動させてみます。

pic130818_02

●I2Cスレーブアドレス

ADT7410のI2Cスレーブアドレスは0×48~0x4Bにアサインされています。アドレスは同ICのA1、A0端子のレベルで切り替えられます。”H” レベルを”1″としたとき、A1、A0を2ビットの数値と見なして、0×48に加えたものがアドレスになります。具体的には、両端子をオープンにした場合、秋月電子のモジュールでは両端子がプルダウンされているため、A1,A0=”00″となり、0×48となります。ジャンパの設定では次のようになります。

A1 A0 スレーブアドレス
OPEN OPEN 0×48
OPEN SHORT 0×49
SHORT OPEN 0x4A
SHORT SHORT 0x4B

●ADT7410の初期状態

ADT7410の電源投入直後は、NORMAL MODEで、分解能は13ビット、アドレスレジスタはtemperature value register(0×00)に設定されています。
従って、なにも設定しないで、いきなり温度値レジスタ(temperature value register)を読み出すだけで、13ビットの温度値が得られます。

●とりあえず読み出してシリアル送信するプログラム

ADT7410には何も設定しないで、いきなり読み出してシリアルて送信するプログラムを示します。
センサモジュール上のJP1、JP2はショートしてプルアップを有効化、JP3、JP4はオープンのままでI2Cアドレスは0×48としています。
また、I2C信号のSCLはCQカチャduino(Arduino)のA5、SDAは同A4へ接続します。あと、電源です。

次に配線図を示します。(13/09/30追加)

c7410
実行結果はArduino IDEのシリアルモニタで確認できます。

#include <Wire.h>

int I2CAdrs;

// 初期化
void setup(void) {
  I2CAdrs = 0x48;     // スレーブアドレス

  Serial.begin(19200);  // シリアル通信パラメータ設定
  Wire.begin();       // I2Cマスタ初期化
}

// メインループ
void loop(void) {
  uint16_t val;
  float tmp;
  int ival;

  Wire.requestFrom(I2CAdrs, 2);       // S.C発行,CB送信
  val = (uint16_t)Wire.read() << 8;   // データの読み出し(上位)
  val |= Wire.read();                 // データの読み出し(下位)
  val >>= 3;                          // 13bit化
  ival = (int)val;                    // 整数化

  if(val & (0x8000 >> 3)) {         // 符号判定
    ival = ival  - 8192;            // 負数のとき
  }

  tmp = (float)ival / 16.0;         // 摂氏温度換算
  Serial.println(tmp, 2);     // xx.xx 温度値をシリアル送信

  delay(500);          // 測定周期(ms)
}

符号の判定は3ビットシフトした後の値で、もともとのMSBがあった位置のビット値を調べるために0×8000を3ビットシフトしたものとANDをとって調べています。

“Serial.println(tmp, 2)”は実数を小数点以下2桁まで表示します。

ノーマルモードでは測定温度は約240msで自動的に更新されるため、それより長い、適当な周期で読み出します。

(続く)

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