Hobby Lab 趣味のモノ作り実験のサイトです。
部品 プロセッサー他 CH32V 203_test_1-Wire
1 概要
 ー1 プログラム概要
 -2 MPUと接続Pin
2 プログラム
 -1 プログラム内容
 -2 補足説明
  -1 作成関係リスト
  -2 メイン補足
 -3 動作確認
  -1 準備
  -2 確認データ

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

今回は1-Wireと言うことで CH32V203系では I2C の様なインターフェースが無いので、GPIOの内1個を1-Wireのマスター端子として使用します。
なお 1-Wire に接続するスレーブは DS18B20 と言う温度素子です。
プログラムで制御するものはGPIOとTIMEを使用しますので、先にそのテスト記事を確認ください。
プログラムの作り方はについては 1-Wire プロトコル、やDS18B20を確認すればわかります。
ページ右側に 1-Wire 関係以下にリンク先が有るので確認ください。

1.1 プログラム概要

作成したプログラム  1-Wireプロトコルで言う、
 (1)初期化 RESET AND PRESENCE PULSES部
 (2)コマンド送信 Write Time Slot
 (3)データ受信 Read Time Slot
の部分を作成する。
ボタンを押すことにより 1-Wire の動作確認プログラムが動作するようにする。
データを受信したものをUSARTで送信する。

1.2 MPUと接続Pin

端子接続相手備考
PB1DQ1-WireのBus
PB3PBSWスイッチはGNDに接続
PA9 (TX)RXPC側のシリアル RXに接続




2 プログラム

2.1 プログラム内容


2.2 補足説明

2.2.1 作成関数リスト

No名前備  考
(1)void GPIO_INIT (void)GPIOの初期化
(2)void Timer_Init(void) TIMEの初期化
(3)void Wire_out(void)GPIOの1-Wire端子を出力に切り替え
(4)void Wire_in(void)GPIOの1-Wire端子を入力に切り替え
(5)uint8_t Reset_Presence(void)1-Wire の初期化
(6)uint8_t Reset_WriteTimeSlot(uint8_t txdarr[], uint8_t size) (3)(4)(5)を含めたデータ書き込み
(7)uint8_t crc8_byte (uint8_t crc, uint8_t data) 1Byte分のCRC
(8)uint8_t crc8_calculate (uint8_t *data, int len) (7)を含めた複数ByteのCRC
(9)uint8_t *ReadTimeSlot(int RxDArrSize)(3)(4)(8)を含んだデータ受信

2.2.2 メイン補足

プログラムはそのまま実行すると、1個のDS18B20を接続した場合の温度を取得します。

①の部分は書き込みだけのプログラム
使用しないのであれば、①の部分のコメントアウトを外しプログラムをコメントアウトする
使用するとすれば、下記の内容で、結果も確認するため、⑪部も使用して必要な設定をする。
  //WRITE SCRATCHPAD {0xcc,0x4e,0x4B,0x46,0x7F}または{0xcc,0x4e,0x4B,0x46,0x5F}
  //CONVERT T {0xcc,0x44}
  //COPY SCRATCHPAD {0xcc,0x48}
  //RECALL E2 {0xcc,0xB8}
  で実験する{ }部分を②にコピーする
 ②の変数にコマンドや64bitROMコードなどを入れる
 ③タイマー値については必要な時間に変更すること

⑪の部分は書き込みおよび読み込みのプログラム
使用しないのであれば、⑪の部分のコメントアウトを外してプログラムをコメントアウトする
使用するとすれば、下記の内容で、結果も確認するため、①部も使用して必要な設定をする。
  //READ ROM {0x33} RxDArrSize = 8;
  //READ SCRATCHPAD {0xcc,0xbe} RxDArrSize = 9;
  で実験する{ }部分を⑫、サイズ部分の値を⑬にコピーする
 ⑫の変数にコマンドや64bitROMコードなどを入れる
 ⑬の変数には読み込みバイト数を入れる。


2.3 動作確認


実験状況

2.3.1 準備

温度の測定を実施する。 なお温度分解能は11bitで先に設定している。
①は使用
②はCONVERT T なので {0xcc,0x44} を代入する。
③は分解能が11bitなので 380(ms)を代入する。
⑪は使用
⑫READ SCRATCHPAD なので {0xcc,0xbe} を代入する。
⑬は READ SCRATCHPAD なので 9 を代入する。

2.3.2 確認データ

UART通信データ GTKTermにより受信

温度は0x13E なので 19.875℃

printfをコメントアウトした
温度測定受信

温度は0x168 なので 22.5℃
温度測定指示〜400(ms)〜温度測定結果受信
温度測定指示部の拡大(信号部 約4ms)
温度測定結果受信部の拡大(信号部 約9ms)
printfをコメントアウトした
温度測定結果受信部の拡大(信号部 約7ms)





































更新日 2025/12/05 16:18  管理者 平林 剛Hirabayashi Takeshi