OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5791|回复: 15

关于一个IO口挂接多个DS18B20

[复制链接]

24

主题

107

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2014-3-29
在线时间
63 小时
发表于 2017-8-24 16:33:25 | 显示全部楼层 |阅读模式
1金钱
请教各位大神一个问题,我实现一个IO口接多个DS18B20,通过识别内部ID来读取各个DS18B20的温度,从而检测多个温度。有一个问题没想明白:
DS18B20外壳上也没有序列号,我怎么判断哪个温度是哪个DS18B20的?
可能这么说大家都看不明白:我举个例子
比如我要检测室外温度,客厅温度,卧室温度,厨房温度这样四个温度,我接了4个温度传感器分别在4个位置,而且现在这4个序列号和温度也都检测出来了
那么,我怎么判断哪个温度是哪个房间的???
如果要批量生产类似产品怎么办?
难道和DS18B20到单片机的接线的长短有关系,接线短的先识别,接线长的后识别???????
求各位大神指点迷津??

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

54

主题

372

帖子

0

精华

高级会员

Rank: 4

积分
977
金钱
977
注册时间
2016-6-15
在线时间
474 小时
发表于 2017-8-24 17:12:00 | 显示全部楼层
虽然我没用过但是我猜测可能需要预先对每个DS18B20进行单个ID读取,因为如果能在一条总线上单独读取到每个芯片的ID那前提就是必须要先识别每个芯片,所以说不可能。
回复

使用道具 举报

头像被屏蔽

12

主题

167

帖子

0

精华

禁止访问

积分
517
金钱
517
注册时间
2017-5-30
在线时间
110 小时
发表于 2017-8-24 17:23:31 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复

使用道具 举报

25

主题

683

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1351
金钱
1351
注册时间
2012-4-25
在线时间
195 小时
发表于 2017-8-24 17:27:24 | 显示全部楼层
ID 绑定  地址(窗外1,室内2,房间3),
1-1
回复

使用道具 举报

54

主题

372

帖子

0

精华

高级会员

Rank: 4

积分
977
金钱
977
注册时间
2016-6-15
在线时间
474 小时
发表于 2017-8-24 18:12:09 | 显示全部楼层
NULLFF 发表于 2017-8-24 17:23
可以的,1-wire总线协议支持单线多器件,而且支持对多个器件的ID进行查询,然后此后的所有命令都可以特异 ...

IIC跟它的最大区别就是IIC的器件地址范围窄,编写程序时完全可以地址循环查询一下就可以了,而DS18B20虽然有唯一ID但地址范围太广,如果循环查询恐怕几天几夜也查不完,除了循环查询和预先记录ID,其他我真不知道DS18B20还能有什么好方法,望指教?
回复

使用道具 举报

24

主题

107

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2014-3-29
在线时间
63 小时
 楼主| 发表于 2017-8-24 18:15:09 | 显示全部楼层
可能大家没看懂我的意思,我的意思是我已经实现了单总线读取各个DS18B20,但是我不知道我识别出来的是哪个DS18B20
回复

使用道具 举报

54

主题

372

帖子

0

精华

高级会员

Rank: 4

积分
977
金钱
977
注册时间
2016-6-15
在线时间
474 小时
发表于 2017-8-24 18:25:11 | 显示全部楼层
EVERGREEN 发表于 2017-8-24 18:15
可能大家没看懂我的意思,我的意思是我已经实现了单总线读取各个DS18B20,但是我不知道我识别出来的是哪个D ...

除了预先记录ID估计没有其他好办法。
回复

使用道具 举报

54

主题

372

帖子

0

精华

高级会员

Rank: 4

积分
977
金钱
977
注册时间
2016-6-15
在线时间
474 小时
发表于 2017-8-24 18:28:16 | 显示全部楼层
EVERGREEN 发表于 2017-8-24 18:15
可能大家没看懂我的意思,我的意思是我已经实现了单总线读取各个DS18B20,但是我不知道我识别出来的是哪个D ...

有两种方法,1是预先记录好每个DS18B20的ID   2是每个DS18B20用一个IO驱动。两种方法各有利弊。
回复

使用道具 举报

头像被屏蔽

12

主题

167

帖子

0

精华

禁止访问

积分
517
金钱
517
注册时间
2017-5-30
在线时间
110 小时
发表于 2017-8-25 09:47:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复

使用道具 举报

13

主题

76

帖子

0

精华

高级会员

Rank: 4

积分
539
金钱
539
注册时间
2016-4-19
在线时间
139 小时
发表于 2017-8-25 11:05:04 | 显示全部楼层
当主机需要对众多在线DS18B20中的某一个进行操作时,首先应将主机逐个与DS18B20挂接,读出其序列号;然后再将所有的传感器挂接到总线上,单片机发出匹配ROM命令(55H),紧接着主机提供的64位序号之后的操作就是针对该传感器的。
回复

使用道具 举报

15

主题

866

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7523
金钱
7523
注册时间
2016-11-30
在线时间
641 小时
发表于 2017-8-25 11:40:40 | 显示全部楼层
shuaigew88 发表于 2017-8-24 18:28
有两种方法,1是预先记录好每个DS18B20的ID   2是每个DS18B20用一个IO驱动。两种方法各有利弊。

估计只有这么解决了!
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11537
金钱
11537
注册时间
2014-4-1
在线时间
1314 小时
发表于 2017-8-25 11:51:43 | 显示全部楼层

厂家早就考虑过这个问题,
芯片有内置的查询命令,会有序地响应主机查询,
多轮查询,就可以得到每个器件的ID。
网上有程序库。

至于每个ID的位置,要靠用户自己解决了。
比如:
手工接线,然后按钮或者上位机命令通知CPU。




回复

使用道具 举报

17

主题

354

帖子

0

精华

高级会员

Rank: 4

积分
797
金钱
797
注册时间
2017-5-21
在线时间
340 小时
发表于 2017-8-25 11:57:45 来自手机 | 显示全部楼层
拿冰块改变温度,读取温度就知道了
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2017-8-25 12:40:12 | 显示全部楼层
18b20太贵了.NTC电阻就可以满足一般用户对温度的要求.除了高精度的..如孵化之类的要求.都可以搞定.
回复

使用道具 举报

21

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
150
金钱
150
注册时间
2018-5-17
在线时间
45 小时
发表于 2019-5-1 10:19:13 | 显示全部楼层
请问楼主有写好的程序可以借鉴一下吗?在写4路的DS18B20,但是定义不会,不知道使用1个I/O还是4个I/O
回复

使用道具 举报

0

主题

70

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
206
金钱
206
注册时间
2019-12-3
在线时间
27 小时
发表于 2019-12-5 11:15:27 | 显示全部楼层
本帖最后由 M8Sh0tn0 于 2019-12-5 15:08 编辑

这个简单,用手捂住一个18B20,看对应的是哪个地址上的18B20温度在变化四个逐个过一遍并记录下对应关系,然后再用地址去绑定你想要的映射.批量生产的话似乎没有更好的办法.
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-23 21:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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