今回は2線式通信のフォーマットやコマンドについて説明します。
ところで筆者は、実験の際にブレッド・ボードなどに実装できるアダプタ基板を製作したので、それを紹介しておきます。市販の0.5インチ・フラット・パッケージIC用のピッチ変換基板でも代用できると思います。下に写真を示しますが、SHT11をはんだ付けした後にピン・プラグをはんだ付けすれば、ブレッド・ボードに実装できます。実際に使用するのは写真下側の4ピンのみです。
アダプタ基板のブレッド・ボード実装例
(1) コマンドの通信フォーマットの概要
温度、湿度の測定コマンドの通信フォーマットを簡略化して描くと下図のようなっています(この図ではCRCは受信していない)。
測定値のA-D変換値は8~14ビットですが、転送データとしては16ビットとして扱われ、上位8ビット、下位8ビットの順にスレーブ送信されます。2バイトのデータの後にCRCバイトがスレーブ送信されます。なお、この図では"NOACK"を"NAK"と表現しています。
マスタは2バイトの測定データのマスタ受信時にはそれぞれ"ACK"(DATA="L")で応答しますが、最後のCRCバイトの受信時には"NOACK"(DATA="L")で応答します。なお、上図のように2バイト目の測定データ受信時に"NOACK"で応答すると、最後のCRCバイトのマスタ受信(スレーブ送信)を打ち切ることができあます。
温度、または湿度の測定コマンドを8ビット送信した後は、ビット数に応じた変換時間がかかることに注意してください。この時間が経過した後でないと、測定結果は読み出せません。詳細は次に述べます。
(2) 湿度測定
湿度の測定にはA-D変換などの処理時間が必要で、測定コマンドを送信してから、A-D変換のビット数に応じた変換時間を待つ必要があります。この変換時間は8ビット時には11ms、12ビット時には55ms必要です。A-Dコンバータのビット数はステータス・レジスタで設定できます。
変換中はDATA信号はアイドル("H"レベル)になっていますが、変換が終了するとSHT11はDATA信号を"L"レベルにドライブします。ホストではこのDATA信号の立ち下がりエッジを検出してから、2バイトのデータ・バイトとCRCバイトを読み出す必要があります。
測定したA-D変換値と実際の湿度は線形(直線的な比例関係)ではないため、リニアライズが必要です。次の式で実際の湿度値に変換できます(電源電圧5Vの場合)。
<12ビットの場合>
湿度値 RHlinear = -4 + 0.0405×SORH - 2.8×10-6×SORH2<8ビットの場合>
湿度値 RHlinear = -4 + 0.648×SORH - 7.2×10-6×SORH2※SORHは変換された湿度のディジタル値。この式には温度補償(温度による補正)は含まれていない。
(3) 温度測定
温度の測定にはA-D変換などの処理時間が必要で、A-D変換のビット数に応じた変換時間を待つ必要があります。この変換時間は12ビット時には55ms、14ビット時には210ms必要です。A-Dコンバータのビット数はステータス・レジスタで設定できます。
湿度の場合と同様、変換が終了すると、SHT11はDATA信号を"L"レベルにドライブします。ホストではこのDATA信号の立ち下がりエッジを検出してから、2バイトのデータ・バイトとCRCバイトを読み出す必要があります。
次の式で測定したA-D変換値を実際の温度値に変換できます(電源電圧5Vの場合)。
<14ビットの場合>
温度値 Temperature = -40 + 0.01×SOT
<12ビットの場合>
温度値 Temperature = -40 + 0.04×SOT
※SOTは変換された温度のディジタル値。
(4) ステータス・レジスタへ書き込み
ステータス・レジスタへの書き込みフォーマットは下図のようになっています。
ステータス・レジスタではヒータのON/OFFと温度、湿度のA-Dコンバータのビット数の設定が可能です。A-Dコンバータのビット数は、湿度8ビット/温度12ビットまたは湿度12ビット/温度14ビット(デフォルト状態)の2通りから選択します。
ステータス・レジスタ送信の際は、コマンドに続けてステータス・レジスタの内容を送信しますが、SHT11からは"NOACK"ではなく、"ACK"が返ってきますので注意してください。
(5) ステータス・レジスタからの読み出し
ステータス・レジスタからの読み出しのフォーマットは下図のようになっています。この図ではCRC(チェックサム)を受信しています。最終データは"NOACK"(図では"NAK"と記述)で応答しています。
SHT11 入手先: 有限会社ストロベリーリナックス
SHT11 メーカ: SENSIRION
