I2C通信で温度を測定する
デジタル測温IC
温度を測定するICの種類は大きく2つ。
アナログ出力とデジタル出力。
アナログ出力タイプの測温IC
アナログ出力タイプのICは、温度に応じた電圧の信号を出力する。
例えばアナログデバイセズのTMP3xシリーズだと
ICに電源供給するだけで信号が出力されるので、ICの使い方自体は極めて簡単。
しかし、アナログ信号なので、システムに用いる場合はADCで受けてデジタル変換する必要がある。
デジタル出力タイプの測温IC
デジタル出力タイプのICは温度に応じたデジタル信号を出力する。
IFとしてI2C、SPIが一般的。
今回はI2CのMCP9808を使用。
MCP9808のデジタル信号出力は以下。
データとして2バイト出力される。
デジタル出力タイプのICは、電源供給するだけでデジタル信号は出力されない。
デジタル出力タイプのICを使用するには、
IFのプロトコル(今回はI2C)とICそのものについて
多少の理解が必要。
MCP9808の使い方
I2Cはマスターとスレーブがある。
スレーブは複数ある。
スレーブはそれぞれが異なるアドレスを有する。
マスターが全スレーブに対してアドレス付きのデータ送信し、
指定されたアドレスのスレーブがデータを返送することで
データの送受信が行われる。
MCP9808は常にSlaveとして扱われる。
MCP9808は3bitのSlaveアドレス用端子がある。
Slaveアドレスを8つから選択できる。
マスターがMCP9808へアドレスを書き込む場合は、末尾を0としたデータを送信する。
例えば、アドレスを指定する場合は、以下のデータを送信する。
A6 | A5 | A4 | A3 | A2 | A1 | A0 | R/W |
---|---|---|---|---|---|---|---|
0 | 0 | 1 | 1 | x | x | x | 0 |
MCP9808は温度データを出力するだけでなく
アラート信号を出力する温度の閾値や、
出力する温度の分解能なども読み書きできる。
MCP9808との通信
MCP9808から温度データを取得する場合の通信について述べる。
MCP9808のアドレスは0x18とする(A2:0、A1:0、A0:0)
全体の流れは
- マスターがスレーブにアドレスを送信する
- マスターがスレーブに読み出したいデータを指定する
- スレーブがマスターにデータを返送する
手順
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バイト返送される。