モノ創りで国造りを

ハード/ソフト問わず知見をまとめてます

I2C通信で温度を測定する

デジタル測温IC

温度を測定するICの種類は大きく2つ。
アナログ出力とデジタル出力。

アナログ出力タイプの測温IC

アナログ出力タイプのICは、温度に応じた電圧の信号を出力する。
例えばアナログデバイセズのTMP3xシリーズだと
f:id:yuji2yuji:20190807150541p:plain
ICに電源供給するだけで信号が出力されるので、ICの使い方自体は極めて簡単。
しかし、アナログ信号なので、システムに用いる場合はADCで受けてデジタル変換する必要がある。

デジタル出力タイプの測温IC

デジタル出力タイプのICは温度に応じたデジタル信号を出力する。
IFとしてI2C、SPIが一般的。
今回はI2CのMCP9808を使用。
MCP9808のデジタル信号出力は以下。
f:id:yuji2yuji:20190807150800p:plain
データとして2バイト出力される。
デジタル出力タイプのICは、電源供給するだけでデジタル信号は出力されない。
デジタル出力タイプのICを使用するには、
IFのプロトコル(今回はI2C)とICそのものについて
多少の理解が必要。

MCP9808の使い方

I2Cはマスターとスレーブがある。
スレーブは複数ある。
スレーブはそれぞれが異なるアドレスを有する。
マスターが全スレーブに対してアドレス付きのデータ送信し、
指定されたアドレスのスレーブがデータを返送することで
データの送受信が行われる。

MCP9808は常にSlaveとして扱われる。
MCP9808は3bitのSlaveアドレス用端子がある。
Slaveアドレスを8つから選択できる。
f:id:yuji2yuji:20190807151424p:plain

マスターがMCP9808へアドレスを書き込む場合は、末尾を0としたデータを送信する。
例えば、アドレスを指定する場合は、以下のデータを送信する。

A6 A5 A4 A3 A2 A1 A0 R/W
0 0 1 1 x x x 0

MCP9808は温度データを出力するだけでなく
アラート信号を出力する温度の閾値や、
出力する温度の分解能なども読み書きできる。
f:id:yuji2yuji:20190807152441p:plain

MCP9808との通信

MCP9808から温度データを取得する場合の通信について述べる。 MCP9808のアドレスは0x18とする(A2:0、A1:0、A0:0)
全体の流れは

  1. マスターがスレーブにアドレスを送信する
  2. マスターがスレーブに読み出したいデータを指定する
  3. スレーブがマスターにデータを返送する
手順

1.マスターからスレーブに0x18の末尾に0を付加したデータを送信する。

A6 A5 A4 A3 A2 A1 A0 R/W
0 0 1 1 0 0 0 0

2.温度情報を読み出すため、マスターからスレーブへ0x05を送信する。
末尾に0を付加する必要はない。

3.スレーブからデータが2バイト返送される。