ディジタル温度センサー DS18B20+ を一つだけ接続して温度変換をさせ、値を読み出す際に使ったポート制御の定数は下図の通りです。 図をクリックして別ウィンドウで見れば数値も読み取れると思います。

DS18B20実績

太い実線はポートを出力に設定してPICから出力しているタイミングです。 細い実線はプルアップ抵抗( 4.7k )によるもので、2点鎖線はオープン・ドレインの DS18B20 の出力( Low = 0 )タイミングです。 DS18B20 の 1-Wire バス・プロトコルの詳細は多くのWebページで紹介されていますから、ここでは実績値だけを紹介します。

DS18B20 を一つだけ接続し、パラサイト・パワーと言う方式で給電しています。

DS18B20 に温度変換を行わせる為に以下の手順が必要です。

1. 初期化 → SKIP ROM → CONVERT T → 1-Wireバス給電

上図のリセットパルスに始まる初期化に続いて、SKIP ROM ( CCh ) 8bit に続いて CONVERT T ( 44h ) 8bit を書き込み(送信)します。 8bit のデーターは最下位 bit を先頭に8個の書き込みスロットを続けて送信します。 合計16個の書き込みスロットの直後から800msecの間ポート出力を High に保ち、DS18B20 に給電し続けます。
ディジタル温度センサーに紹介した最初のオシロ波形を参照して下さい。


1-Wire バス給電期間の終了を待って、温度変換結果を読み出します。

2. 初期化 → SKIP ROM → READ SCRATCHPAD → 12bitだけ読み込み

上図リセットパルスに始まる初期化に続き、先ほどと同様に SKIP ROM ( CCh ) 8bit , READ SCRATCHPAD ( BEh ) 8bit を書き込み(送信)し、続いて上図の読み込みスロットを12回繰り返します。 読み込みスロットの所定のタイミングでサンプリングした値は読み出し順に以下の通りです。 温度データの単位は℃です。
(0) 温度データの 2^-4 bit
(1) 温度データの 2^-3 bit
(2) 温度データの 2^-2 bit
(3) 温度データの 2^-1 bit
(4) 温度データの 2^ 0 bit
(5) 温度データの 2^ 1 bit
(6) 温度データの 2^ 2 bit
(7) 温度データの 2^ 3 bit
(8) 温度データの 2^ 4 bit
(9) 温度データの 2^ 5 bit
(10) 温度データの 2^ 6 bit
(11) 温度データの+/- 値1の時氷点下

今回は(0)~(2)を読み飛ばし、(3)~(10)を使って小数点以下の値を四捨五入、氷点下の場合は全て0℃、99℃より高温は全て99℃にクリップして使います。 また、CRC による誤り検出を行いません。


関連記事のインデックスは右記事の末尾にあります。 → ディジタル温度センサー 


楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。