Hobby Lab 趣味のモノ作り実験のサイトです。
部品 センサー他 DS18B20 ハードウェア
1 DS18B20概要
1ー1 動作電圧
1-2 Pin
1-3 64bit ROM Code
1-4 SCRATCHPAD
1-4-1 レジスター内容
1-4-2 設定 レジスター
1-4-3 温度分化能と変換時間
1-4-4 温度の表現
1-5 DS18B20制御
1-5-1 ROMコマンド
1-5-2 設定コマンド
1-5-3 組み合わせ制御データ
2 DS18B20のプログラム手順
2-1 スレーブが1個の場合
2-1-1 64Bit ROM Codeを取得
2-1-2 スクラッチパッドを取得
2-1-3 温度変換設定
2-1-4 温度変換指示と温度表示
2-2 スレーブが複数の場合

1-Wire関係
プロトコル
 1-Wireについて
スレーブ関係資料
 DS18B20 温度測定
 DS18B20 テスター
マスター関係プログラム
 DS18B20_Arduino
 DS18B20_RaspberryPi
 DS18B20_CH32V

Pr:Sensor_AD_時計等
PrS:電圧、電流
ADS1115 16bit4CH I2C A/D
 Hardware
 RaspberryPi_コマンド接続
 RaspberryPi_Python
 Arduino
 CH23V203 MounRiverStudioⅡ
INA226 I2C 直流電圧電流
 Hardware
 Arduino
 RaspberryPi_Python
WCS 電流ホール素子
 Hardware
PrS:温度、気圧、湿度、照度
BNE280 I2C 気圧,湿度,気温
 Hardware
 Arduino
 RaspberryPi_Python
BH1750 I2C 照度
 Hardware
 Arduino
 RaspberryPi_Python
DS18B20 1-Wire 温度計
 Hardware
 Arduino
 RaspberryPi_Python
PrS:時間、日時
DS3231 I2C 時計
 Hardware
 Arduino
 RaspberryPi_Python
PrS:表示器
MAR3953 320X480 3.95"
 概要と線や点を描く
 フォントを描く
SSD1306 I2C 0.96"OLED
 Hardware
 Arduino
 RaspberryPi_Python
Pr:Wire 電線関係
Pr:Resistance 抵抗
Pr:Capacitor コンデンサ
Pr:Coil コイル
Pr:PassiveElmt 受動素子
Pr:Diode ダイオード関係
Pr:OPAMP オペアンプ関係
PrO:送受信機  Si4735
PrO:オペアンプ  LM324
 LM358
Pr:Tr トランジスタ関係
2SC1815
 リレードライバー設計
 アンプ設計
 発振器
TLP152
 TLP152テスト
TLP2361
 TLP2361テスト
TLP5754
 TLP5754テスト
Pr:Source 電源関係  ツェナーダイオード
 TL431
 LM317
PrS:Downモジュール
 EGS002_IR2110S
 SKU011012
 ACDC02
 XH_M299
 LM2596
 Mini360_MP23070N
 DROK
 WH140
PrS:UPモジュール
 MT3608
PrS:充電モジュール
 TP4056
Pr:Old Processor他
Pr:Prプロセッサ関係
PrP:プロセッサ
動作比較
 STM32F動作比較
 CH32V203&STM32F 動作比較
 arduino動作比較
raspberrypi関係
 RaspberryPiハード
CH32V関係
 -CH32V開始
 -203K8T6(32Pin)開始
 -203C8T6(48P)開始
 -003J4M6(8Pin)開始
 -003F4P6(20Pin)開始
 -Moun River StudioⅡ
 プログラミング!
  203_GPIO関係
  203_TIME関係
  203_TIME Encoder
  203_I2C関係
  203_1-Wire関係
  003_DS18B20テスター
  USART(UART)関係
  DS18B20をModBus制御
 -マニュアル
 203データシート
 203取説
  MBA メモリとバス方式
  PWR 電力制御
  RCC リセット・拡張・クロック
  BKP バックアップレジスタ
  CRC 巡回冗長検査
  RTC リアルタイムクロック
  GPIO GPIOと代替機能
  DMA ダイレクトメモリアクセス制御
  ADTM 高度な制御タイマー
  GPTM 汎用タイマー
  BCTM 基本タイマー
  USART 同期非同期通信
arduino関係
 ESP12関係
 (a)ESP-8266D1mini注意
PrP:その他  RS485ドライバー
 CP2102 BRIDGE
 WCH-LinkEエミュレーター

1 DS18B20概要

DS18B20デジタル温度計は9ビット〜12 ビットの摂氏温度測定に対応し、不揮発性のユーザー プログラム可能な上限および下限トリガーポイントを備えたアラーム機能を備えている。

なお同じ様な型番でDS18S20があるが、これは 9ビッt固定の温度測定のディバイスです。

1.1 動作電圧


電源範囲は 3.0V 〜 5.5V


1.2 Pin

NAMEPin説明
SOuSOPTO-92
VDD383オプションのVDD。
寄生電力モードで動作させるには、 VDD を接地する。
DQ412データ入出力。
オープンドレインの1ーWireインターフェースピン。
パラサイトパワーモード(配線2本)で使用する場合、デバイスに電源を供給する
GND541GND 接地
N.C.他pin他Pin--接続しない

1.3 64bit ROM Code

ROM Code を1-Wireで読み出したときの順番で記載する。
順位項目bit数内容信号順番
1FAMILY CODE8 0x28LSB→MSB
2SERIAL NUMBER48 0xXX,0xXX,0xXX,0xXX,0xXX,0xXXLSB→MSB
3CRC8 0xXXLSB→MSB

1.4 SCRATCHPAD

DS18B20 には SCRATCHPAD と言うデータ及び設定値を記録する場所がある。

1.4.1 レジスター内容

最初に電源を入れたときの SCRATCHPAD を読み出したときの値は下表のとおり。
Byte内容EEPROM
Record
信号順番備 考
0温度LSB--0x50LSB→MSB 0x550 = 1360 / 16 = 85 ℃
 1.4.4 データ値と温度表現 参照
1温度MSB--0x05LSB→MSB
2THレジスタ0x4BLSB→MSB
3TLレジスタ0x46LSB→MSB
4CONFIGURATION REGISTER0x7FLSB→MSB 12bit 変換時間750ms
 1.4.3 CONFIGURATION REGISTER 参照
5予約済--0xFFLSB→MSB
6予約済--0x7FLSB→MSB
7予約済--0x10LSB→MSB
8CRC※--0xFFLSB→MSB
EEPROM Record とは 電源が入った最初は EEPROM からこの SCRATCHPAD に書き込まれます。
この SCRATCHPAD の TH,Lレジスター や CONFIGURATION REGISTER の値がコントロール対象の数値です。
このため、TH,Lレジスター や CONFIGURATION REGISTER の値を変更し、電源を切り入りした時もその値にしたい場合は、EEPROMにレジスターの値をコピーする必要が有ります。
※DS18S20にはByte 4 の CONFIGURATION REGISTER は有りません。

1.4.2 設定レジスター CONFIGURATION REGISTER

設定レジスターは以下構成になっている。
bit7bit6bit5bit4bit3bit2bit1bit0
0R1R011111
このR0,R1を変更することにより、温度分解能と変換時間が変更できる。

1.4.3 温度分化能と変換時間

分解能最大変換時間CONFIGURATION REGISTERCONFIG
REGISTER
bitms(tCONV)R1R0
90.5000 93.751 / 8000x1F
100.2500187.501 / 4010x3F
110.1250375.001 / 2100x5F
120.0625750.001110x7F
12bit = 1/4096 0.0625*4096=256 符号付きで -128〜128℃の範囲が可能 DS18B20は‐55℃~+125℃なので表現OK。

1.4.4 データ値と温度表現

右表の温度値(hex)は 下図の通り。
温度値
(hex)
温度値
(Dec)
温度
(℃)
備考
0x07D02000125
0x00880.5000 9bit最小
0x00440.250010bit最小
0x00220.125011bit最小
0x00110.062512bit最小
0x00000
0xfff8ー8ー0.5
0xff60ー160ー10
0xfc90ー880ー55
温度測定範囲は‐55℃〜+125℃
測定誤差は  ‐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でデータを読み込むような手順となる。
下記一覧表はそれをまとめた表だが、私がまとめたので、大分見にくいと思うがご了承ください。
一覧表
データ順番
コマンド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線式とするため説明を省く。

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--

コマンドコードコマンド名
0x33READ ROM
0x55MATCH ROM
0xCCSKIP ROM
0xBEREAD SCRATCHPAD
0x4EWRITE SCRATCHPAD
0x44CONVERT T
0x48COPY SCRATCHPAD
0xB8RECALL E2

2.1.1 64Bit Lasered ROM Codeを取得

(1)リセット信号
(2)ロムコードの読み取りコード[0x33]送信
(3)ロムコード[8Byte]の読み取り

2.1.2 スクラッチパッドを取得

(1)リセット信号
(2)ロスクラッチパッドの読み取りコード[0xCC,0xBE]送信
(3)スクラッチパッド[9Byte]の読み取り
DS18B20の電源投入状態のコード: 1.4.1 レジスター内容参照

2.1.3 温度変換設定(スクラッチパッドに書き込む)

(1)リセット信号
(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.2 スレーブが複数の場合

No実施内容先頭
コマンド
付データ主な
コマンド
付データ
送受信(byte)
備考
ROM Code を取得するサーチコマンド参照
SCRATCHPAD を取得する0x55ROM Code(8)0xBE受信(9)受信データh温度、設定他,CRC
温度変換を設定する0x55ROM Code(8)0x4E送信(3)送信データはTH(1)+TL(1)+設定(1)
温度変換指示と取得0x55ROM Code(8)0x44--変換時間後に取得は②を実行
EEPROMに設定値を記録0x55ROM Code(8)0x48--
設定値をEEPROMから取得0x55ROM Code(8)0xB8--
全温度変換を設定する0xCC--0x4E送信(3)送信データはTH(1)+TL(1)+設定(1)
全温度変換指示と取得0xCC--0x44--変換時間後に取得は②を実行
全EEPROMに設定値を記録0xCC--0x48--
全設定値をEEPROMから取得0xCC--0xB8--

コマンドコードコマンド名
0x55MATCH ROM
0xCCSKIP ROM
0xBEREAD SCRATCHPAD
0x4EWRITE SCRATCHPAD
0x44CONVERT T
0x48COPY SCRATCHPAD
0xB8RECALL E2





































更新日 2026/02/09 16:40  管理者 平林 剛Hirabayashi Takeshi