
1 DS18B20概要
DS18B20デジタル温度計は9ビット〜12 ビットの摂氏温度測定に対応し、不揮発性のユーザー プログラム可能な上限および下限トリガーポイントを備えたアラーム機能を備えている。
なお同じ様な型番でDS18S20があるが、これは 9ビッt固定の温度測定のディバイスです。
なお同じ様な型番でDS18S20があるが、これは 9ビッt固定の温度測定のディバイスです。
1.1 動作電圧
電源範囲は 3.0V 〜 5.5V
1.2 Pin
| NAME | Pin | 説明 | ||
|---|---|---|---|---|
| SO | uSOP | TO-92 | ||
| VDD | 3 | 8 | 3 | オプションのVDD。 寄生電力モードで動作させるには、 VDD を接地する。 |
| DQ | 4 | 1 | 2 | データ入出力。 オープンドレインの1ーWireインターフェースピン。 パラサイトパワーモード(配線2本)で使用する場合、デバイスに電源を供給する |
| GND | 5 | 4 | 1 | GND 接地 |
| N.C. | 他pin | 他Pin | -- | 接続しない |
1.3 64bit ROM Code
ROM Code を1-Wireで読み出したときの順番で記載する。
| 順位 | 項目 | bit数 | 内容 | 信号順番 |
|---|---|---|---|---|
| 1 | FAMILY CODE | 8 | 0x28 | LSB→MSB |
| 2 | SERIAL NUMBER | 48 | 0xXX,0xXX,0xXX,0xXX,0xXX,0xXX | LSB→MSB |
| 3 | CRC | 8 | 0xXX | LSB→MSB |
1.4 SCRATCHPAD
DS18B20 には SCRATCHPAD と言うデータ及び設定値を記録する場所がある。
12bit = 1/4096 0.0625*4096=256 符号付きで -128〜128℃の範囲が可能 DS18B20は‐55℃~+125℃なので表現OK。
1.4.1 レジスター内容
最初に電源を入れたときの SCRATCHPAD を読み出したときの値は下表のとおり。
EEPROM Record とは 電源が入った最初は EEPROM からこの SCRATCHPAD に書き込まれます。
この SCRATCHPAD の TH,Lレジスター や CONFIGURATION REGISTER の値がコントロール対象の数値です。
このため、TH,Lレジスター や CONFIGURATION REGISTER の値を変更し、電源を切り入りした時もその値にしたい場合は、EEPROMにレジスターの値をコピーする必要が有ります。
※DS18S20にはByte 4 の CONFIGURATION REGISTER は有りません。
| Byte | 内容 | EEPROM Record | 値 | 信号順番 | 備 考 |
|---|---|---|---|---|---|
| 0 | 温度LSB | -- | 0x50 | LSB→MSB | 0x550 = 1360 / 16 = 85 ℃ 1.4.4 データ値と温度表現 参照 |
| 1 | 温度MSB | -- | 0x05 | LSB→MSB | |
| 2 | THレジスタ | ○ | 0x4B | LSB→MSB | |
| 3 | TLレジスタ | ○ | 0x46 | LSB→MSB | |
| 4 | CONFIGURATION REGISTER | ○ | 0x7F | LSB→MSB | 12bit 変換時間750ms 1.4.3 CONFIGURATION REGISTER 参照 |
| 5 | 予約済 | -- | 0xFF | LSB→MSB | |
| 6 | 予約済 | -- | 0x7F | LSB→MSB | |
| 7 | 予約済 | -- | 0x10 | LSB→MSB | |
| 8 | CRC※ | -- | 0xFF | LSB→MSB |
この SCRATCHPAD の TH,Lレジスター や CONFIGURATION REGISTER の値がコントロール対象の数値です。
このため、TH,Lレジスター や CONFIGURATION REGISTER の値を変更し、電源を切り入りした時もその値にしたい場合は、EEPROMにレジスターの値をコピーする必要が有ります。
※DS18S20にはByte 4 の CONFIGURATION REGISTER は有りません。
1.4.2 設定レジスター CONFIGURATION REGISTER
設定レジスターは以下構成になっている。
このR0,R1を変更することにより、温度分解能と変換時間が変更できる。
| bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
|---|---|---|---|---|---|---|---|
| 0 | R1 | R0 | 1 | 1 | 1 | 1 | 1 |
1.4.3 温度分化能と変換時間
| 分解能 | 最大変換時間 | CONFIGURATION REGISTER | CONFIG REGISTER | |||
|---|---|---|---|---|---|---|
| bit | ℃ | ms | (tCONV) | R1 | R0 | |
| 9 | 0.5000 | 93.75 | 1 / 8 | 0 | 0 | 0x1F |
| 10 | 0.2500 | 187.50 | 1 / 4 | 0 | 1 | 0x3F |
| 11 | 0.1250 | 375.00 | 1 / 2 | 1 | 0 | 0x5F |
| 12 | 0.0625 | 750.00 | 1 | 1 | 1 | 0x7F |
1.4.4 データ値と温度表現
右表の温度値(hex)は 下図の通り。
温度測定範囲は‐55℃〜+125℃
測定誤差は ‐10℃〜+85℃の温度範囲で±0.5℃の精度
| 温度値 (hex) | 温度値 (Dec) | 温度 (℃) | 備考 |
|---|---|---|---|
| 0x07D0 | 2000 | 125 | |
| 0x008 | 8 | 0.5000 | 9bit最小 |
| 0x004 | 4 | 0.2500 | 10bit最小 |
| 0x002 | 2 | 0.1250 | 11bit最小 |
| 0x001 | 1 | 0.0625 | 12bit最小 |
| 0x000 | 0 | 0 | |
| 0xfff8 | ー8 | ー0.5 | |
| 0xff60 | ー160 | ー10 | |
| 0xfc90 | ー880 | ー55 |
測定誤差は ‐10℃〜+85℃の温度範囲で±0.5℃の精度
1.5 DS18B20制御
制御するため、2種類のコマンドがある。
1.5.1 ROMコマンド
5つのコマンドがある。
| 名前 | 内 容 |
|---|---|
| READ ROM [0x33] |
このコマンドは、バス上にスレーブが1つしかない場合にのみ使用できます。 これにより、バスマスターはSearch ROM手順を使用せずにスレーブの64ビットROMコードを読み取ることができます。 バス上に複数のスレーブが存在する場合にこのコマンドを使用すると、すべてのスレーブが同時に応答しようとする際にデータ衝突が発生します。 |
| SKIP ROM [0xCC] |
マスターはこのコマンドを使用することで、ROMコード情報を送信することなく、バス上のすべてのデバイスを同時にアドレス指定できます。 例えば、マスターはSkip ROMコマンドに続いてConvert T [44h]コマンドを発行することで、バス上のすべてのDS18B20に同時に温度変換を実行させることができます。 なお、Read Scratchpad [BEh]コマンドは、バス上にスレーブデバイスが1つしかない場合にのみ、Skip ROMコマンドの後に発行できます。 この場合、マスターはデバイスの64ビットROMコードを送信することなくスレーブから読み取ることができるため、時間が節約されます。 Skip ROMコマンドに続いてRead Scratchpadコマンドを発行すると、複数のスレーブが存在する場合、複数のデバイスが同時にデータを送信しようとするため、バス上でデータ衝突が発生します。 |
| MATCH ROM [0x55] |
マッチROMコマンドに続く64ビットROMコードシーケンスにより、バスマスターはマルチドロップバスまたはシングルドロップバス上の特定のスレーブデバイスをアドレス指定できます。 64ビットROMコードシーケンスに完全に一致するスレーブのみが、マスターが発行したファンクションコマンドに応答します。 バス上の他のすべてのスレーブは、リセットパルスを待機します。 |
| ALARM SEARCH [0xEC] |
このコマンドの動作はSearch ROMコマンドの動作と同じですが、アラームフラグが設定されているスレーブのみが応答します。 このコマンドにより、マスターデバイスは、最新の温度変換中にDS18B20がアラーム状態になったかどうかを判断できます。 各アラーム検索サイクル(つまり、アラーム検索コマンドの後にデータ交換が続く)の後、バスマスターはトランザクションシーケンスのステップ1(初期化)に戻る必要があります。 アラームフラグの動作については、「動作 - アラーム信号」セクションを参照してください。 |
| SEARCH ROM [0xF0] |
システムの初回電源投入時、マスターはバス上のすべてのスレーブデバイスのROMコードを識別する必要があります。 これにより、マスターはスレーブの数とデバイスタイプを判断できます。 マスターは消去法によってROMコードを学習しますが、このプロセスでは、マスターはすべてのスレーブデバイスを識別するために必要な回数だけSearch ROMサイクル (つまり、Search ROMコマンドに続いてデータ交換)を実行する必要があります。 バス上にスレーブが1台しかない場合は、Search ROMプロセスの代わりに、より単純なRead ROMコマンド(下記参照)を使用できます。 Search ROM手順の詳細については、www.maxim-ic.com/ibuttonbookにあるiButton® Book of Standardsを参照してください。 Search ROMサイクルごとに、バスマスターはトランザクションシーケンスのステップ1(初期化)に戻る必要があります。 |
1.5.2 設定コマンド
6つのコマンドがある。
| 名前 | 内 容 |
|---|---|
| READ SCRATCHPAD [0xBE] |
このコマンドにより、マスターはスクラッチパッドの内容を読み取ることができます。 データ転送はバイト0の最下位ビットから始まり、スクラッチパッドの9番目のバイト(バイト8 - CRC)が読み取られるまで続きます。 スクラッチパッドのデータの一部だけが必要な場合は、マスターはいつでもリセットを発行して読み取りを終了できます。 |
| WRITE SCRATCHPAD [0x4E] |
このコマンドにより、マスターはDS18B20のスクラッチパッドに3バイトのデータを書き込むことができます。 最初のデータバイトはTHレジスタ(スクラッチパッドのバイト2)に書き込まれ、2番目のバイトはTLレジスタ(バイト3)に書き込まれ、3番目のバイトはコンフィギュレーションレジスタ(バイト4)に書き込まれます。 データは最下位ビットから送信する必要があります。 マスターがリセットを発行する前に、3バイトすべてを書き込む必要があります。 そうしないと、データが破損する可能性があります。 |
| CONVERT T [0x44] |
このコマンドは、1回の温度変換を開始します。 変換後、得られた熱データはスクラッチパッドメモリ内の2バイト温度レジスタに保存され、DS18B20は低電力アイドル状態に戻ります。 デバイスがパラサイトパワーモードで使用されている場合、このコマンド発行後10μs(最大)以内に、 マスターは「DS18B20の電源投入」セクションで説明されているように、変換中(tCONV)に1-Wireバスの強力プルアップをイネーブルする必要があります。 DS18B20が外部電源で駆動されている場合、マスターはConvert Tコマンドの後に読み取りタイムスロットを発行することができ、DS18B20は温度変換中は0を、変換完了時に1を送信して応答します。 パラサイトパワーモードでは、変換中に強力プルアップによってバスがハイにプルアップされるため、この通知手法は使用できません。 |
| COPY SCRATCHPAD [0x48] |
このコマンドは、スクラッチパッドのTH、TL、およびコンフィギュレーションレジスタ(バイト2、3、4)の内容をEEPROMにコピーします。 デバイスがパラサイトパワーモードで使用されている場合、このコマンド発行後10μs(最大)以内に、マスターは1-Wireバスの強力なプルアップを少なくとも10ms有効にする必要があります(DS18B20の電源供給セクションを参照)。 |
| RECALL E2 [0xB8] |
このコマンドは、アラームトリガ値(THとTL)と設定データをEEPROMから呼び出し、データをそれぞれスクラッチパッドメモリのバイト2、3、4に格納します。 マスターデバイスは、Recall E2コマンドに続いて読み取りタイムスロットを発行することができ、DS18B20は、呼び出し中は0を、呼び出しが完了すると1を送信することで、呼び出しのステータスを示します。 呼び出し操作は電源投入時に自動的に行われるため、デバイスに電源が投入されるとすぐに、スクラッチパッドに有効なデータが格納されます。 |
| READ POWER SUPPLY [0xB4] |
マスターデバイスは、このコマンドに続いて読み取りタイムスロットを発行し、バス上のDS18B20が寄生電源を使用しているかどうかを判断します。 読み取りタイムスロット中、寄生電源で駆動されているDS18B20はバスをLowにプルダウンし、外部電源で駆動されているDS18B20はバスをHighに維持します。 このコマンドの使用方法については、「DS18B20への電源供給」セクションを参照してください。 |
1.5.3 組み合わせ制御データ
DS18B20を制御するには、ROMコマンド、ROM CODE、設定コマンドなどを Write Time Slot で書き込み、Read Time Slotでデータを読み込むような手順となる。
下記一覧表はそれをまとめた表だが、私がまとめたので、大分見にくいと思うがご了承ください。
一覧表
データの並びは①➡②➡③➡④の順です。
④は受信データ(Read Time Slot)が必要な場合は 受信 と Byte 数
送信データ(Write Time Slot)が必要な場合は 送信 と Byte数を記載する。
表中の ?は未確認により不明 × は使用不可能を示す。
※1:1-Wireが複数接続されている場合は使用不可。
※2:1-Wireが複数接続されている場合は全部に対し指令がでる
※3:SEARCHのプログラム作成方法は左メニューの『1-Wire関係』『プロトコル』『1-Wireについて』『6.その他通信手順』 『6.1ROM確認』を参照下さい。
※B1:寄生電源を使用しているDS18B20はバスをLowにプルダウンし、外部電源を使用しているDS18B20はバスをHighに維持する。
下記一覧表はそれをまとめた表だが、私がまとめたので、大分見にくいと思うがご了承ください。
一覧表
| データ順番 | ② | ③ | ④ | ||||||
|---|---|---|---|---|---|---|---|---|---|
| コマンド | ROM CODE 要否 | READ SCRATCHPAD | WRITE SCRATCHPAD |
CONVERT T | COPY SCRATCHPAD | RECALL E2 | READ POWER SUPPLY | なし | |
| ① 名 | コード | ---- | [0xBE] | [0x4E] | [0x44] | [0x48] | [0xB8] | [0xB4] | |
| READ ROM ※1 | [0x33] | 不要 | -- | -- | -- | -- | -- | -- | 受信(8) |
| SKIP ROM | [0xCC] | 不要 | ○※1 | ○※2 | ○※2 | ○※2 | ○※2 | ○※2 | -- |
| MATCH ROM | [0x55] | 必要 | ○ | ○ | ○ | ○ | ○ | × | -- |
| ALARM SEARCH | [0xEC] | 不要 | ーー | ーー | ーー | ーー | ーー | -- | ※3 |
| SEARCH ROM | [0xF0] | 不要 | ーー | ーー | ーー | ーー | ーー | -- | ※3 |
| ④ | ---- | 受信(9) | 送信(3) | -- | -- | -- | -- | -- | |
| 備考 | ---- | ※B1 | |||||||
④は受信データ(Read Time Slot)が必要な場合は 受信 と Byte 数
送信データ(Write Time Slot)が必要な場合は 送信 と Byte数を記載する。
表中の ?は未確認により不明 × は使用不可能を示す。
※1:1-Wireが複数接続されている場合は使用不可。
※2:1-Wireが複数接続されている場合は全部に対し指令がでる
※3:SEARCHのプログラム作成方法は左メニューの『1-Wire関係』『プロトコル』『1-Wireについて』『6.その他通信手順』 『6.1ROM確認』を参照下さい。
※B1:寄生電源を使用しているDS18B20はバスをLowにプルダウンし、外部電源を使用しているDS18B20はバスをHighに維持する。
2 DS18B20のプログラム手順
プログラムの制御手順は 1.5.3 組み合わせ制御データ の表を見て具体的には下記の手順とする
ただし、今回は
・アラームコマンドについて:コマンド実行後温度を読み込む必要が有る。
データ読み込み頻度(1分程度)も多く設計するためマスター側で温度を読み込んだ時に判断する。
以上からここではアラームコマンドを使用しないので説明を省く。
・READ POWER SUPPLY[0xB4]について:DS18B20の接続は3線式とするため説明を省く。
ただし、今回は
・アラームコマンドについて:コマンド実行後温度を読み込む必要が有る。
データ読み込み頻度(1分程度)も多く設計するためマスター側で温度を読み込んだ時に判断する。
以上からここではアラームコマンドを使用しないので説明を省く。
・READ POWER SUPPLY[0xB4]について:DS18B20の接続は3線式とするため説明を省く。
2.1 スレーブが1個の場合
ROM Code以外は主なコマンド前にSKIP ROM[0xCC] コードが必要。
| No | 実施内容 | 先頭 コマンド | 付データ | 主な コマンド | 付データ 送受信(byte) | 備考 |
|---|---|---|---|---|---|---|
| ① | ROM Code を取得する | -- | -- | 0x33 | 受信(8) | 受信データはFanily,NUMBER,CRC |
| ② | SCRATCHPAD を取得する | 0xCC | -- | 0xBE | 受信(9) | 受信データは温度、設定他,CRCデータ |
| ③ | 温度変換を設定する | 0xCC | -- | 0x4E | 送信(3) | 送信データはTH(1)+TL(1)+設定(1) |
| ④ | 温度変換指示と取得 | 0xCC | -- | 0x44 | -- | 変換時間後に取得は②を実行 |
| ⑤ | EEPROMに設定値を記録 | 0xCC | -- | 0x48 | -- | |
| ⑥ | 設定値をEEPROMから取得 | 0xCC | -- | 0xB8 | -- |
| コマンドコード | コマンド名 |
|---|---|
| 0x33 | READ ROM |
| 0x55 | MATCH ROM |
| 0xCC | SKIP ROM |
| 0xBE | READ SCRATCHPAD |
| 0x4E | WRITE SCRATCHPAD |
| 0x44 | CONVERT T |
| 0x48 | COPY SCRATCHPAD |
| 0xB8 | RECALL E2 |
2.1.1 64Bit Lasered ROM Codeを取得
(1)リセット信号
(2)ロムコードの読み取りコード[0x33]送信
(3)ロムコード[8Byte]の読み取り
(2)ロムコードの読み取りコード[0x33]送信
(3)ロムコード[8Byte]の読み取り
2.1.2 スクラッチパッドを取得
(1)リセット信号
(2)ロスクラッチパッドの読み取りコード[0xCC,0xBE]送信
(3)スクラッチパッド[9Byte]の読み取り
DS18B20の電源投入状態のコード: 1.4.1 レジスター内容参照
(2)ロスクラッチパッドの読み取りコード[0xCC,0xBE]送信
(3)スクラッチパッド[9Byte]の読み取り
DS18B20の電源投入状態のコード: 1.4.1 レジスター内容参照
2.1.3 温度変換設定(スクラッチパッドに書き込む)
(1)リセット信号
(2)ロムコードの読み取りコード[0xCC,0x4E,①,②,③]送信
①スクラッチパッドのTHレジスターの 8bit 値
②スクラッチパッドのTLレジスターの 8bit 値
③設定レジスターの 8bit 値
(2)ロムコードの読み取りコード[0xCC,0x4E,①,②,③]送信
①スクラッチパッドのTHレジスターの 8bit 値
②スクラッチパッドのTLレジスターの 8bit 値
③設定レジスターの 8bit 値
2.1.4 温度変換指示と温度表示
(1)リセット信号
(2)ロムコードの読み取りコード[0xCC,0x44]送信
(3)変換時間をおいて
(4)リセット信号
(5)ロスクラッチパッドの読み取りコード[0xCC,0xBE]送信
(6)スクラッチパッド[9Byte]の読み取り
読み込み時間とリセット時間
DS18B20では必要の無いデータはマスターからリセット信号を出して終わらせる事が出来ると記載されている。
しかし(6)で不要なデータは 7 Byteありその時間は 7 ×約 70(us) = 490(us)だが、リセットの時間は約 800(us) なのでそのまま読み取った方が良いように思う。
(2)ロムコードの読み取りコード[0xCC,0x44]送信
(3)変換時間をおいて
(4)リセット信号
(5)ロスクラッチパッドの読み取りコード[0xCC,0xBE]送信
(6)スクラッチパッド[9Byte]の読み取り
読み込み時間とリセット時間
DS18B20では必要の無いデータはマスターからリセット信号を出して終わらせる事が出来ると記載されている。
しかし(6)で不要なデータは 7 Byteありその時間は 7 ×約 70(us) = 490(us)だが、リセットの時間は約 800(us) なのでそのまま読み取った方が良いように思う。
2.2 スレーブが複数の場合
| No | 実施内容 | 先頭 コマンド | 付データ | 主な コマンド | 付データ 送受信(byte) | 備考 |
|---|---|---|---|---|---|---|
| ① | ROM Code を取得する | サーチコマンド参照 | ||||
| ② | SCRATCHPAD を取得する | 0x55 | ROM Code(8) | 0xBE | 受信(9) | 受信データh温度、設定他,CRC |
| ③ | 温度変換を設定する | 0x55 | ROM Code(8) | 0x4E | 送信(3) | 送信データはTH(1)+TL(1)+設定(1) |
| ④ | 温度変換指示と取得 | 0x55 | ROM Code(8) | 0x44 | -- | 変換時間後に取得は②を実行 |
| ⑤ | EEPROMに設定値を記録 | 0x55 | ROM Code(8) | 0x48 | -- | |
| ⑥ | 設定値をEEPROMから取得 | 0x55 | ROM Code(8) | 0xB8 | -- | |
| ⑦ | 全温度変換を設定する | 0xCC | -- | 0x4E | 送信(3) | 送信データはTH(1)+TL(1)+設定(1) |
| ⑧ | 全温度変換指示と取得 | 0xCC | -- | 0x44 | -- | 変換時間後に取得は②を実行 |
| ⑨ | 全EEPROMに設定値を記録 | 0xCC | -- | 0x48 | -- | |
| ⑩ | 全設定値をEEPROMから取得 | 0xCC | -- | 0xB8 | -- |
| コマンドコード | コマンド名 |
|---|---|
| 0x55 | MATCH ROM |
| 0xCC | SKIP ROM |
| 0xBE | READ SCRATCHPAD |
| 0x4E | WRITE SCRATCHPAD |
| 0x44 | CONVERT T |
| 0x48 | COPY SCRATCHPAD |
| 0xB8 | RECALL E2 |
