RRP1320-1-04 温度誤差」に書いたように、A/D変換の基準電圧による測定誤差が大きい為、ディジタル温度センサーを試してみました。 センサーは Maxim の1wireデジタル温度センサー DS18B20+ で、-55~+125℃まで測定可能で、-10~+85℃は±0.5℃の精度と言うことです。 電源電圧は3.0~5.5Vで、1-Wire(GNDを加えて2本)だけで電源供給と双方向ディジタル通信が可能です。 基準電圧のような厄介なものは DS18B20 内部で解決し、ディジタル信号で高精度の測定結果を得られるのが魅力です。

1-Wire バス・プロトコルは初挑戦でしたが、ただ一つの DS18B20 とPICとの間で相互通信を行い、温度測定が出来るようになりました。 PIC18F1320 のポート( RB0 )を 4.7k プルアップして DS18B20 の DQ 端子に接続し、DS18B20 の VDD , GND の両端子を GND に接続するサテライト・パワーを使っています。

1-wire回路

DS18B20 を一つだけ接続し、「燻煙器」のような用途を想定している為、以下2通りの通信だけで実現しています。
1. 初期化 → SKIP ROM → CONVERT T → 1-Wireバス給電
DSC00245

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

今後、何回かに分けて詳細を紹介したいと思います。


以下は関連記事のインデックスです。


ディジタル温度センサー2 
 DS18B20+ を一つだけ接続して温度変換をさせ、値を読み出す際に使ったポート制御の定数は下図の通りです。

ディジタル温度センサー3 
 TIMER3 割り込みの都度指定されたプログラムを実行する為に、フック( HOOK )を使っています。 データ・メモリーとプログラム・メモリーが分かれている PIC の場合はフックと呼べないかも知れませんが、TIMER3 割り込み処理の先頭で所定のデータ・メモリー( 3byte )を参照して指定(予約)されたアドレスにジャンプします。

ディジタル温度センサー4 
 割り込み処理からフックで実行されるプログラムの内、DS18B20+ にコマンドを送信(書き込み)する部分と、温度データを読み出している部分のアセンブラソースを紹介します。 クロック周波数8MHzでの実施例です。


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