■ 1-Wireバス、デジタル温度計・DS18B20を制御する ■


 1本のライン(バスとGNDで計2本)で、複数のデバイスを制御できる1-Wireバスの研究と、BASCOM-AVRの1-Wire関連命令をマニュアル化するために、デジタル温度計DS18B20を制御します。
 
DS18B20は、以下のような特徴があります。
 ・-55℃〜+125℃までの温度を測定できる。 (デジタル値で取得可能)
 ・-10℃〜+85℃ までは、±0.5℃の精度。
 ・電源動作範囲は3.0V〜5.5Vで、データ線から電力を供給することもできる。
 ・デジタル伝送により、センサーの距離を格段に伸ばすことができる。
  (条件により数百m)
 ・個々のデバイスにシリアル番号を持っているので、同一バス上に複数
  (事実上無限)のセンサーを設置できる。
 ・アラーム設定機能を持ち、上限下限の設定が可能。

 DS18B20の日本語マニュアルが見つからないので、私的に翻訳してあります。
DS18B20 日本語マニュアル
 個人で使用するために翻訳した物を掲載しておりますので、翻訳間違いや誤字による、いかなる損害にも
 責任を負いません。



DS18B20の使い方
 
 マニュアルを読むと、信号のタイミングや規定が多く、制御が難しい様に思いますが、実際の回路はいたって簡単です。
 また、BASCOM-AVRでは、信号のタイミングをすべてBASCOMが作成してくれるので、ユーザーは「コマンド」を送ったり、「データ」を読み込むだけで制御ができてしまいます。


 BASCOM-AVR リファレンス・マニュアル」の、1-Wireデバイスの制御命令 を参照。


 ・以下では、当ページに掲載のAVR & BASCOM-AVR トレーニング・ボードを使用して、
  DS18B20を制御します。
 ・もちろん、各種のAVRやポートを選択することもできます。
 
回 路 図  GIF版 DS18B20Cir.gif (74KB)  PDF版 DS18B20Cir.pdf (94KB)
 
   注意! この図面を使用した、いかなる損害にも責任を負いません。


● デバイスのシリアル番号を調べる
 
 ・DS18B20は、個々のデバイス内部に、別々なシリアル番号が記録されています。
 ・このシリアル番号により、同一データ線上に複数のDS18B20を接続しても、個々のデバイスと通信が
  できるようになっています。
 ・しかし、シリアル番号は、購入時やパッケージからは知ることができません。
 ・そこで、プログラムによりシリアル番号を読み出して、DS18B20に色や数字のマークを付け、部品と
  シリアル番号の対称を管理します。
 (DS18B20を1つだけ接続する場合は、シリアル番号を調べる必要はありません)
 
・電源の接続は、「標準」の他、「パラサイト・パワー」も使用
 できます。 (データとGNDの2線式)
・LCDに16進(HEX)表記で、8個の数値が表示されますので、
 メモをして下さい。
・デバイスが見つからない場合は、「ID: not found.」と表示
 されます。
・通信に異常があった場合や、デバイスを複数接続した
 場合は、「ID: CRC Error.」と表示されます。
 
プログラム  テキスト形式 ソースファイル  DS18B20_IDread.TXT (7KB)
 BASCOM-AVR用 ソースファイル  DS18B20_IDread.bas (7KB)
 
 注意! 著作権は放棄しておりませんので、販売や配布目的での使用は絶対にしないで下さい。
       (記事の無断転載を除き、個人での使用は可能です。 改変、自作品の掲載、リンクもご自由に。)


● DS18B20を1個接続して、温度を表示する
 
 ・DS18B20を、「パラサイト・パワー」(データとGNDの2線式)で接続します。
 ・このプログラムは、温度変換時にポートを[H]にすることによって、DS18B20に電力を供給します。
  (温度変換時は、1.5mAの電流が必要で、「パラサイト・パワー」だけでは動作ができないため)
 ・+100℃を超える温度では、「パラサイト・パワー」が使用できませんので(マニュアル参照)、
  電源ラインを確保して下さい。
 
 ・1-WireバスにDS18B20を1個だけ接続する場合は、シリアル番号の確認を省くことができるので、
  プログラムは簡単になります。
・デバイスが見つからない場合は、「Device not found」と表示
 されます。
・通信に異常があった場合や、デバイスを複数接続した場合は、
 「- CRC Error. -」と表示されます。
 
プログラム  テキスト形式 ソースファイル  DS18B20_1DTemp.TXT (7KB)
 BASCOM-AVR用 ソースファイル  DS18B20_1DTemp.bas (7KB)
 
 注意! 著作権は放棄しておりませんので、販売や配布目的での使用は絶対にしないで下さい。


● DS18B20を複数接続して、温度を表示する
 
 ・DS18B20を、「パラサイト・パワー」(データとGNDの2線式)で接続します。
 ・このプログラムは、温度変換時にポートを[H]にすることによって、DS18B20に電力を供給します。
  (温度変換時は、1.5mAの電流が必要で、「パラサイト・パワー」だけでは動作ができないため)
 ・+100℃を超える温度では、「パラサイト・パワー」が使用できませんので(マニュアル参照)、
  電源ラインを確保して下さい。
 
 ・DS18B20を、5〜10個程度、並列接続できます。 (想定値、2個のみ検証済み)
 ・電源を含む3線式にすれば、接続数を増やすこともできます。
 ・上記の「デバイスのシリアル番号を調べる」プログラムで、デバイスのシリアル番号を調べて、
  プログラム最後のDATA文に記述して下さい。
 ・サブルーチン「Tempdisp」内に、センサーの個数分の表示プログラムを追加して下さい。
 
・Timerの1秒割り込みで、1秒毎に表示と温度変換を
 繰り返します。
 (1秒割り込みルーチンに、時計機能を持たせることも
  できます)
・デバイスが見つからない場合は、「Not found」と表示
 されます。
・通信に異常があった場合や、デバイスが未接続または
 故障の場合は、「CRC Error」と表示されます。
 (エラーは、3回検証されます)
 
プログラム  テキスト形式 ソースファイル  DS18B20_MDTemp.TXT (12KB)
 BASCOM-AVR用 ソースファイル  DS18B20_MDTemp.bas (12KB)
 
 注意! 著作権は放棄しておりませんので、販売や配布目的での使用は絶対にしないで下さい。
       (記事の無断転載を除き、個人での使用は可能です。 改変、自作品の掲載、リンクもご自由に。)




1-Wireバスについての概略
 
・1-Wireの通信規定は、「ダラス・セミコンダクター」によって開発され、現在は「マキシム」に吸収されています。
・基本的には「電源・GND・データ」の3本の線を使い、双方向通信を行います。
・また、データ線から電力を得る「パラサイト・パワー」モードでは、「データ・GND」の2本の線だけでデバイスが制御できてしまします。
・もちろん、デバイス付近に別電源を用意することもできます。
 (この場合も、「データ・GND」の2本の線だけで通信ができます)
 
・マスター装置は、バス上に1台だけ存在できます。
・データバスには、オープンドレインまたは3-ステートで接続され、4.7KΩ(基本)の抵抗器でプルアップします。
・これにより、同じバス上に複数のデバイスがワイヤードOR形式で接続できます。
 
・プルアップ抵抗器により、データバスのアイドル状態は[Hi]レベルです。
・まず、マスターはデータバスを480μS(最低)の間[Low]レベルにして、全てのデバイスにバスのリセット信号を送ります。
・全ての通信は、このリセット動作から始められます。
・バス上のデバイスは、リセット信号を受けると、「存在パルス」を送り返します。(全てのデバイスが同時に返します)
・この時点で、バス上に何らかのデバイスがいくつか存在していることがわかります。
 
・バス上に、1つのデバイスしかないことがわかっていれば、そのままそのデバイスと通信ができます。
・複数のデバイスがある場合は、デバイスごとに内蔵されているシリアル番号を調べます。
・シリアル番号は64bit(実質56bit)もあるので、1番から順に検索するには膨大な時間がかります。
・この調べ方がユニークで、番号を1ビットずつ送信し、そのビットと自分の番号が合っているデバイスだけが反応していき、反応が無くなった時点で排他的に番号を絞り込むと言う作業を繰り返し、調査します。
・これにより、バス上のデバイス数とシリアル番号がわかるので、それ以降は番号指定することにより、特定のデバイスと通信ができるようになります。
・通信速度は遅くなりますが、用途によっては便利な通信方式です。
 
・「パラサイト・パワー」モードでは、データ線から電力を供給できますが、4.7KΩ(基本)の抵抗器に依存するため、消費電力が大きいデバイスは動作できません。
・そこで、温度変換などの電力が必要になる期間だけ、MOSFETなどによりデータ線に電力を供給することができます。
・AVRマイコンは、[Hi]レベルのソース電流も多く出せるので、DS1820を5個接続できるという報告があります。
 (これは同時変換の場合なので、個々に変換動作をさせれば、より多くのセンサーが接続できます)
・また、ツイストペア線などのノイズ対策をすれば、センサーとの距離を100m以上延ばすテスト結果も出ています。
・常時多くの電力を消費するデバイスの場合は、デバイス付近に別電源を用意します。







防水型 DS18B20のテスト
 
・ステンレスのケースに入った防水型の温度センサーDS18B20を使用して、水槽などの水温を
 管理するプログラムです。  Amazonや中国通販(AliExpress)で入手可能。

テストは当ページに記載の
AVR & BASCOM-AVR トレーニング・ボード
を使用しています。

回 路 図  PDF版 DS18B20_TempAlarm_Cir.pdf
 
   注意! この図面を使用した、いかなる損害にも責任を負いません。

 
・プログラムは「AVR & BASCOM-AVR トレーニング・ボード」用に作成してありますが、
 使用するAVRチップや接続するポートは変更可能です。

・高温と低温のしきい値を設定して、設定値を超えた場合にアラーム音を鳴らしたり、外部の温度制御
 機器(ヒーターやクーリング・ファン)をON/OFFできます。
・外部の制御出力は、ONで+5Vが出力されますので、SSR(ソリッド・ステート・リレー)などを介して
 AC100Vの機器を制御できます。
・温度を検出してアラーム音や外部機器を制御するための時間の間隔を、秒単位で設定できます。

プログラム  テキスト形式 ソースファイル  DS18B20_TempAlarm.TXT
 BASCOM-AVR用 ソースファイル  DS18B20_TempAlarm.bas
  
注意! 著作権は放棄しておりませんので、販売や配布目的での使用は絶対にしないで下さい。
       (記事の無断転載を除き、個人での使用は可能です。 改変、自作品の掲載、リンクもご自由に。)


● 操作方法

・電源が入ると温度の測定が開始され、アラームや外部機器の制御が動作します。
・センサー(DS18B20)に異常があると、「Not found」や「CRC Error」のエラーが表示されます。
・測定温度が高温または低温のしきい値を超えると、LCDの設定値の右側の「℃」が反転表示します。
 
・SW1[赤]を押すと設定モードに入り、LCDのカーソルが設定する項目の先頭で点滅します。
・SW2[緑]で、設定値を下げます。 (1秒以上長押しすると、連続して減算されます)
・SW3[黄]で、設定値を上げます。 (1秒以上長押しすると、連続して加算されます)
・再度SW1[赤]を押すと設定値が記憶され、次に設定する項目へカーソルが移動します。
 (設定値はAVRのEEPROMに記憶されますので、電源を切っても設定値は残ります)
・低温の設定値を終えるとブザーが2回鳴って、設定モードが終了し通常動作に戻ります。
・SW1[赤]とSW2[緑]を同時に押すと、一時的にアラームや外部制御が中断し、再度同時に押すと
 元の状態に戻ります。

○動作モードの設定
 ・動作モードは下記の様に動作します。
  OFF : アラーム音 および 外部機器の制御はOFF。
  Alarm : アラーム音のみ動作。
  Contr : 外部機器の制御のみ動作。
  Al+Cn : アラーム音と外部機器の制御を両方動作。
 
○アラームと外部機器制御の時間間隔の設定。(秒単位)
 ・アラーム音や外部機器を制御するための、測定温度と設定値を比較する時間の間隔を設定します。
  (1秒 〜 999秒)
 ・設定した時間の間隔でアラーム音が鳴ったり、外部機器のON/OFFが動作します。

○高温のしきい値の設定
 ・測定温度が高温の設定値以上になるとアラーム音が鳴り、高温用の外部機器がONになります。
 ・設定値は、「低温の設定値+1℃ 〜 125℃」

○低温のしきい値の設定
 ・測定温度が低温の設定値以下になるとアラーム音が鳴り、低温用の外部機器がONになります。
 ・設定値は、「−55℃ 〜 高温の設定値−1℃」


動 画




   電子工作の部屋 Top へ 前のページへ戻る