Hobby Lab 趣味のモノ作り実験のサイトです。
部品 プロセッサー他 CH32V 003_test_DS18B20
1 DS18B20テスターの概要
1.1 動作確認できるコマンド
1.2 動作確認項目
1.3 通信ソフトの設定
1.4 不明な点
1.5 注意点
2 動作メッセージの概要
3 プログラム

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

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エミュレーター
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: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:Old Processor他

1 DS18B20テスターの概要

今回はDS18B20に偽物?の様な動作不良と思われるものが発見されたので、DS18B20の全コマンドが使用できるか確認するDS18B20テスターを製作することにした。
当方の手持ちDS18B20は中国直輸入品2種類と秋月電子で購入したものを本プログラムで確認しました。

使用するMCUは最安のCH32V003を使用してできるだけ安価に最低限の回路としました。
ハード的にはMCUの他にはプログラムを書き込むWCH-LinkEと抵抗2個です。

HC32V003F4P6を使用した回路を下記に示します。

HC32V003J4M6を使用した回路を下記に示します。

動作確認の指示やメッセージはパソコンの通信ソフトを使用してキー入力により動作確認の項目を選択し、その動作状況のメッセージを表示します。

このプログラムは○×等の動作判定表示はしていません。
これは当方の手持ちDS18B20(以下スレーブと呼ぶ)全てが『4.不明な点』で説明していますが取説と動作が違っているためです。

例えば温度変換指令[0x44]により12bitの温度分解能の場合750(ms)程度で変換が完了するので、通常は温度変換指令[0x44]を出した後、タイマー等により750(ms)待って、スレーブの温度値を読み出します。

取説にはもう一つの方法として温度変換指令を出してから、スレーブから変換完了の合図を出す方法があり、それを確認して温度値を読み出すと書かれています。
しかし当方の手持ちスレーブ全てについて変換完了合図が≒30(us)と非常に早く、この信号でスレーブに読みに行っても変換した温度ではありませんでした。
ただし、最初の方法のとおり、750(ms)程度待ってスレーブへ読み出すと温度を取得出来るので、使い方によっては異常とも言えない。
その他としてEEPROM関係の命令で同じ様な症状が見られた。

加えて、秋月電子で購入したDS18B20もこの症状があるため、当方のプログラムが間違った方法で作成している可能性も大きい。 (私自身はオシロスコープにより、動作波形も確認しているので、プログラム上の問題は現時点では無いと思いこんでいます。)
このため使い方によって良否判定ができないので○×表記をやめ、できるだけ動作確認の状態を細かく表示することにしました。

今回作成したDS18B20テスターのプログラムを3項で記載します。
当方プログラム初心者のため、プログラムの作成方法等改良点が多いと思います。
お手数をおかけしますが、お教えいただければ幸いです。
なおこのプログラムは無料でご利用いただけますが、作成者は、このプログラムの使用によって生じるいかなる損害や損失についても、一切の責任を負いませんので予めご了承下さい。

1.1 動作確認できるコマンド

 プログラムで対応する、コマンドとプログラム内で使用しているマクロ定義を下表に示す。
CommandCode項 目#define
0x33ROM読み取りdfReadRom
0xF0ROMを検索dfSearchROM
0xCCスキップROMdfSkipRom
0x55マッチROMdfMatchRom
0xBEスクラッチパッドを読むdfReadScratchpad
0x4Eスクラッチパッドに書き込むdfWriteScratchpad
0xECアラームサーチdfAlarmSeaech
0x44温度を変換dfConvertT
0x48スクラッチパッドをコピーdfCopyScratchpad
0xB8リコールE2dfReCall
0xB4電源供給の読み取りdfReadParasitePower

1.2 動作確認項目

プログラムで使用するキー番号と動作確認項目
キー動作確認概容
1外部電源を使用した1個接続と複数接続を想定した動作確認、温度測定
2外部電源を使用した温度精度設定の変更
3外部電源を使用した温度設定の変更、警報検索
4外部電源を使用した温度警報 精度設定のEEPROM記録、読み出し
5寄生電源応答確認
6寄生電源を使用した1個だけの最低限の動作確認、温度測定
7寄生電源を使用した温度精度設定の変更
8寄生電源を使用した温度設定の変更、警報検索
9寄生電源を使用した温度警報 精度設定のEEPROM記録、読み出し

1.3 通信ソフトの設定

(1)port: LinuxMint例(/dev/ttySO)
(2)Baud Rate: 115200
(3)Parity: none
(4)Bits: 8
(5)StopBits: 1
(6)Flow control: none

1.4 不明な点

(1)温度変換(0x44)・EEPROMコピー(0x48)状態の確認
12bitでMAX CONVERSION TIMEは750(ms)になっています。
規定の MAX CONVERSION TIME (12bitで750(ms))程度の時間を待ってからSCRATCHPADの値を確認した場合は温度変換されています。
不明な点は取説中の CONVERT T [44h]で変換状況を確認する方法として
「If the DS18B20 is powered by an external supply, the master can issue read time slots after the Convert T command and the DS18B20 will respond by transmitting a 0 while the temperature conversion is in progress and a 1 when the conversion is done.」
と記載があり、外部電源を使用している時に上記 0 の時間を測定したところ2x(us)程度でした。
この動作は中国から購入した2種類と秋月電子で購入した物で同じ様な時間でした。
この短い時間(100us程度)でSCRATCHPADの値を確認しても温度変換はされていません。
またEEPROMへのコピーも同様でした。
本プログラムでは 0 の時間は表示しますが、規定時間(0x44ならMAX CONVERSION TIME+α、0x48は20(ms)程度)を待って処理しています。
※0x48,0xB8について
Write to EEPROM Copy Scrathpad Copy(0x48)については取説に『リードタイムスロットを入れてコピー完了』が判るとは記載ないが、 リードタイムをいれて計測すると時間が大変短いがれてコピー完了は書いて無いが、27(us)程度の0時間が計測できた。
しかしRecallE2(0xB8)には取説にリードタイムスロットを入れてコピー完了が判ると記載されているが計測すると 0(us)になるがこれは異常なのか?

(2)サーチロム(0xF0)およびアラームサーチ(0XEC)について
取説には『Search ROM手順の詳細については、 www.maxim‐ic.com/ibuttonbook にあるiButton® Book of Standardsを参照してください。』 と記載があり内容を確認したのですが、当方の能力不足で全てを理解できませんでした。
ただし一部動作が理解できる部分があり、それに基づき自分なりにコードを記載しました。
詳細はROM検索を確認下さい。

1.5 注意点

(1)0確認[1]のbReadRom[0x33] Testの動作時間について
Read Rom(0x33)時の ReadTimeSlotのRead Data Valid 時間は記号で tRDVだが取説には AC ELECTRICAL CHARACTERISTICSとして下表の様に記載されている
PARAMETERSYMBOLMINTYPMAXUNITS
Read Data ValidtRDV 15μs
MAX欄に記載されているので、この値より小さいのが良いように思えるが、実際は最大値が15(us)なので、これ以上遅い時間が良いらしいので注意が必要。

(2)0x4B 寄生電源(パラサイトパワー)使用読み取りについて
このコマンドは通常の使い方は
①[Reset_Presence] -> ②[0xCC] -> ③[0x4B] -> ④[ReadTimeSlot]
以上の手順により寄生電源を使用したスレーブがあれば、ReadTimeSlotで Loの信号をスレーブが出力する。
注意することは、
・②の代わりに [0x55+RomCode] を入れても寄生電源を使用しているスレーブがLo信号を出力しているが、これはRomCodeが違ったスレーブも反応してる。
・[0x55+RomCode]を使用するため事前にRomCodeを知るため、①と②の間に[0x33]や[0xF0※]を入れると反応しなくなる。
ただし、①の前に[Reset_Presence] ->[0x33]や[0xF0]を入れてRomCodeを取得した場合は反応する。
※取説には[0xF0]について『検索 ROM サイクルの後に、バス マスターはトランザクションシーケンスのステップ 1 (初期化) に戻る必要があります。』と記載がありました。
・②自体を無くして① -> ③ ー> ④ とした場合は反応しない。
・寄生電源から外部電源に切替えて動作確認をする場合は、全ての電源(信号線含む)を切ってから※20(ms)以上してから外部電源に切替えて動作確認を行っうこと。
 全ての電源を切って8(ms)以下では外部電源になっていても、寄生電源に接続している様にスレーブが応答する。




2 動作メッセージの概要

事前準備
・事前準備として DS18B20の近くに温度計で気温が判るようにしておくと動作確認に良い。

プログラムについて
・動作確認時の電源については外部電源と寄生電源ともに確認を実施しています。
・ScratchPad の表示は9Byteの情報ですが、メッセージは必要な5Byteだけを表示しています。
  Code= 0x2F 0x01 0x2D 0xFB 0x7F CRC OK!

メッセージの概略メッセージ
キー番号1〜9の確認表示内容
  (通信ソフトGTKTermで受信した内容)
一部動作不良のメッセージ
  (分解能12bit以外変換不可など)




3 プログラム

プログラムは『MounRiver Studio Ⅱ』を使用して作成した。
ファイルのSystem_ch32v00x.cのClock は内部の48Mhzを選択している。
(クロックの選択は『#define SYSCLK_FREQ_48MHZ_HSI 48000000』のコメントアウトを外している。)
ブログラムを下記に記載する。




































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