1 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 |
|---|---|---|
| 0x33 | ROM読み取り | dfReadRom |
| 0xF0 | ROMを検索 | dfSearchROM |
| 0xCC | スキップROM | dfSkipRom |
| 0x55 | マッチROM | dfMatchRom |
| 0xBE | スクラッチパッドを読む | dfReadScratchpad |
| 0x4E | スクラッチパッドに書き込む | dfWriteScratchpad |
| 0xEC | アラームサーチ | dfAlarmSeaech |
| 0x44 | 温度を変換 | dfConvertT |
| 0x48 | スクラッチパッドをコピー | dfCopyScratchpad |
| 0xB8 | リコールE2 | dfReCall |
| 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
(2)Baud Rate: 115200
(3)Parity: none
(4)Bits: 8
(5)StopBits: 1
(6)Flow control: none
1.4 不明な点
(1)温度変換(0x44)・EEPROMコピー(0x48)状態の確認
(2)サーチロム(0xF0)およびアラームサーチ(0XEC)について
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)になるがこれは異常なのか?
規定の 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検索を確認下さい。
ただし一部動作が理解できる部分があり、それに基づき自分なりにコードを記載しました。
詳細はROM検索を確認下さい。
1.5 注意点
(1)0確認[1]のbReadRom[0x33] Testの動作時間について
(2)0x4B 寄生電源(パラサイトパワー)使用読み取りについて
Read Rom(0x33)時の ReadTimeSlotのRead Data Valid 時間は記号で tRDVだが取説には AC ELECTRICAL CHARACTERISTICSとして下表の様に記載されている
MAX欄に記載されているので、この値より小さいのが良いように思えるが、実際は最大値が15(us)なので、これ以上遅い時間が良いらしいので注意が必要。
| PARAMETER | SYMBOL | MIN | TYP | MAX | UNITS |
|---|---|---|---|---|---|
| Read Data Valid | tRDV | 15 | μs |
(2)0x4B 寄生電源(パラサイトパワー)使用読み取りについて
このコマンドは通常の使い方は
①[Reset_Presence] -> ②[0xCC] -> ③[0x4B] -> ④[ReadTimeSlot]
以上の手順により寄生電源を使用したスレーブがあれば、ReadTimeSlotで Loの信号をスレーブが出力する。
注意することは、
①[Reset_Presence] -> ②[0xCC] -> ③[0x4B] -> ④[ReadTimeSlot]
以上の手順により寄生電源を使用したスレーブがあれば、ReadTimeSlotで Loの信号をスレーブが出力する。
注意することは、
・②の代わりに [0x55+RomCode] を入れても寄生電源を使用しているスレーブがLo信号を出力しているが、これはRomCodeが違ったスレーブも反応してる。
・[0x55+RomCode]を使用するため事前にRomCodeを知るため、①と②の間に[0x33]や[0xF0※]を入れると反応しなくなる。
・寄生電源から外部電源に切替えて動作確認をする場合は、全ての電源(信号線含む)を切ってから※20(ms)以上してから外部電源に切替えて動作確認を行っうこと。
全ての電源を切って8(ms)以下では外部電源になっていても、寄生電源に接続している様にスレーブが応答する。
・[0x55+RomCode]を使用するため事前にRomCodeを知るため、①と②の間に[0x33]や[0xF0※]を入れると反応しなくなる。
ただし、①の前に[Reset_Presence] ->[0x33]や[0xF0]を入れてRomCodeを取得した場合は反応する。
※取説には[0xF0]について『検索 ROM サイクルの後に、バス マスターはトランザクションシーケンスのステップ 1 (初期化) に戻る必要があります。』と記載がありました。
・②自体を無くして① -> ③ ー> ④ とした場合は反応しない。※取説には[0xF0]について『検索 ROM サイクルの後に、バス マスターはトランザクションシーケンスのステップ 1 (初期化) に戻る必要があります。』と記載がありました。
・寄生電源から外部電源に切替えて動作確認をする場合は、全ての電源(信号線含む)を切ってから※20(ms)以上してから外部電源に切替えて動作確認を行っうこと。
全ての電源を切って8(ms)以下では外部電源になっていても、寄生電源に接続している様にスレーブが応答する。
2 動作メッセージの概要
事前準備
・事前準備として DS18B20の近くに温度計で気温が判るようにしておくと動作確認に良い。
プログラムについて
・動作確認時の電源については外部電源と寄生電源ともに確認を実施しています。
・ScratchPad の表示は9Byteの情報ですが、メッセージは必要な5Byteだけを表示しています。
Code= 0x2F 0x01 0x2D 0xFB 0x7F CRC OK!
・事前準備として 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』のコメントアウトを外している。)
ブログラムを下記に記載する。ファイルのSystem_ch32v00x.cのClock は内部の48Mhzを選択している。
(クロックの選択は『#define SYSCLK_FREQ_48MHZ_HSI 48000000』のコメントアウトを外している。)
