找回密码
 立即注册
查看: 1210|回复: 20

降龙棍外接ds18b20 记录

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:243
  • 最近打卡:2025-05-11 07:59:01

61

主题

820

回帖

1544

积分

金牌会员

积分
1544
发表于 2024-5-18 09:34:20 | 显示全部楼层 |阅读模式
本帖最后由 zhange 于 2024-11-21 09:10 编辑

1.待编辑,成功了来写经验(已经实现了2个ds18b20轮流读取,这俩温度相差0.3 在正常的0.5范围内)


截图202405190733416759.jpg


2.注意时钟的选择是22.1184mhz

3.必须先单独获取ds18b20的标识码  下边楼层有代码

4.可以研究下中文手册看一下命令

5.没研究寄生电容模式,以后再说吧。。。。。。


6.切记执行序列
通过单线总线端口访问 DS18B20 的协议如下:
步骤1. 初始化
步骤2. ROM 操作指令
步骤3. DS18B20 功能指令

7.名词解释(个人理解)

释放总线:总线进入高电平状态




回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:243
  • 最近打卡:2025-05-11 07:59:01

61

主题

820

回帖

1544

积分

金牌会员

积分
1544
发表于 2024-5-18 09:37:39 | 显示全部楼层
本帖最后由 zhange 于 2024-5-18 09:49 编辑

第一步:接上dbs18b20

买了2个一次,给客服要说明书,没上班那。看着是3个外接引脚,和冲哥讲的应该一样。电源线2根,一根数据线。


直接接单片机外接出来的电源    冲哥说的外接电源稳定??dq接p33

截图202405180936566066.jpg

接上灯就亮了


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:243
  • 最近打卡:2025-05-11 07:59:01

61

主题

820

回帖

1544

积分

金牌会员

积分
1544
发表于 2024-5-18 09:50:38 | 显示全部楼层
第二步:下个程序测试下

就用冲哥的这个吧

截图202405180950287277.jpg

一下成功
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:243
  • 最近打卡:2025-05-11 07:59:01

61

主题

820

回帖

1544

积分

金牌会员

积分
1544
发表于 2024-5-18 09:51:17 | 显示全部楼层
第三步:结束??不  复制别人的程序不行  我要自己写   

开写。。。。。。。。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:425
  • 最近打卡:2025-05-11 01:00:20
已绑定手机

35

主题

2117

回帖

2283

积分

荣誉版主

积分
2283
发表于 2024-5-18 11:08:55 | 显示全部楼层
别弄DS18B20了,来试试国产的单线温度传感器NST1001吧,精度更高,编程更简单。
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=7496

点评

我买了几颗,还在路上.如果这个有塑封的就好了,我的项目就可以直接替换了,18b20国产的不够好,进口的价格太高.  详情 回复 发表于 2024-5-19 01:51
睁开眼睛做场梦~~~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:243
  • 最近打卡:2025-05-11 07:59:01

61

主题

820

回帖

1544

积分

金牌会员

积分
1544
发表于 2024-5-18 14:51:09 | 显示全部楼层
晓*** 发表于 2024-5-18 11:08
别弄DS18B20了,来试试国产的单线温度传感器NST1001吧,精度更高,编程更简单。
https://www.stcaimcu.com/ ...

这个得研究  支持国产    我去买个玩玩   
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:243
  • 最近打卡:2025-05-11 07:59:01

61

主题

820

回帖

1544

积分

金牌会员

积分
1544
发表于 2024-5-18 15:31:07 | 显示全部楼层
先上一下ds18b20的基础知识:



DS18B20的核心功能是它的直接读数字的温度传感器。温度传感器的精度为用户可编程的9,10,11或12位,分别以0.5℃,0.25℃,0.125℃和0.0625℃增量递增。在上电状态下默认的精度为12位。


温度高于100℃时,不推荐使用寄生电源,因为DS18B20在这种温度下表现出的漏电流比较大,通讯可能无法进行。在类似这种温度的情况下,强烈推荐使用DS18B20的VDD引脚。


如果总线停留在低电平超过480us,总线上的所有器件都将被复位。



执行序列
通过单线总线端口访问 DS18B20 的协议如下:
步骤1. 初始化
步骤2. ROM 操作指令
步骤3. DS18B20 功能指令










回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:243
  • 最近打卡:2025-05-11 07:59:01

61

主题

820

回帖

1544

积分

金牌会员

积分
1544
发表于 2024-5-18 15:34:33 | 显示全部楼层
本帖最后由 zhange 于 2024-5-19 07:41 编辑

初始化
通过单总线的所有执行操作处理都从一个初始化序列开始。初始化序列包括一个由总线控制器发出的复位脉冲和其后由从机发出的存在脉冲。存在脉冲让总线控制器知道 DS18B20 在总线上且已准备好操作,详见单总线信号节。

截图202405190740591145.jpg


  1. void DS18b20_Reset(void)                //复位
  2. {
  3.         bit flag = 1;
  4.        
  5.         while( flag )
  6.         {
  7.                 DQ = 0;                                //输出低电平
  8.                 Delay480us();
  9.                 DQ = 1;                                //输出高电平
  10.                 Delay60us();
  11.                 flag = DQ;                        //读取当前电平
  12.                 Delay480us();       
  13.         }               
  14. }
复制代码


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:243
  • 最近打卡:2025-05-11 07:59:01

61

主题

820

回帖

1544

积分

金牌会员

积分
1544
发表于 2024-5-18 15:35:54 | 显示全部楼层
ROM 指令
一旦总线控制器探测到一个存在脉冲,它就发出一条 ROM 指令。如果总线上挂有多只 DS18B20,这些指令将基于器件独有的 64 位 ROM 片序列码使得总线控制器选出特定要进行操作的器件。这些指令同样也可以使总线控制器识别有多少只,什么型号的器件挂在总线上,同样,它们也可以识别哪些器件已经符合报警条件。ROM 指令有 5 条,都是 8 位长度。总线控制器在发起一条 DS18B20 功能指令之前必须先发出一条 ROM 指令。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:243
  • 最近打卡:2025-05-11 07:59:01

61

主题

820

回帖

1544

积分

金牌会员

积分
1544
发表于 2024-5-18 15:51:03 | 显示全部楼层

复位序列:复位和存在脉冲
和 DS18B20 间的任何通讯都需要以初始化序列开始,初始化序列见图 13。一个复位脉冲跟着一个存在脉冲表明 DS18B20 已经准备好发送和接收数据。
在初始化序列期间,总线控制器拉低总线并保持 480us 以发出(TX)一个复位脉冲,然后释放总线,进入接收状态(RX)。单总线由 5K 上拉电阻拉到高电平。当DS18B20 探测到 I/O 引脚上的上升沿后,等待 15-60us,然后发出一个由 60-240us低电平信号构成的存在脉冲。


截图202405181549214734.jpg


相关函数

  1. void DS18b20_Reset(void)                //复位
  2. {
  3.         bit flag = 1;
  4.        
  5.         while( flag )
  6.         {
  7.                 DQ = 0;                                //输出低电平
  8.                 Delay480us();
  9.                 DQ = 1;                                //输出高电平
  10.                 Delay60us();
  11.                 flag = DQ;                        //读取当前电平
  12.                 Delay480us();       
  13.         }               
  14. }
复制代码



回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-11 20:03 , Processed in 0.142983 second(s), 106 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表