打印
[综合信息]

DS18B20时序解析,以及读出85原因诠释

[复制链接]
763|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jerow|  楼主 | 2020-4-27 11:54 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
如何根据时序编写呢(以下时序的延时条件很重要,下面讲解不再强调)

使用特权

评论回复
沙发
jerow|  楼主 | 2020-4-27 12:20 | 只看该作者
第一点:写时序
写0,写1可以分开操作,但是也是可以统一编程的,如何统一;
我们先看写时序,
1.主设备先拉低数据线,左(写0)右(写1)是一致的;
2.15us内出现分歧,分歧出现在写1,波形出现了变化,此时要看写1;
3.写1在15us内被电阻上拉导致波形变化了,说明了什么呢,数据的变化导致了数据线上的波形未能维持原状,数据这时候可以传输了(可能数据线此时被释放,这里可以大家自行测试,本人测试是此时释放的数据线,注意延时不能过长,本人加延时出错,不加延时现象正确)
所以这部分应该这样编程:
定义数据线是DQ;
DQ = 0;
delayus(2);//看写1时序,主设备拉低要有1us,这段时间写0和写1一致
DQ = (bit)data;
取发送数据低1位发送到数据线(DQ)
写0和写1都要至少60us延时,
此时主设备释放数据线
DQ = 1;//看写0时序
在来3us才进行下一位数据传输
重复8次一循环发送一字节数据

使用特权

评论回复
板凳
jerow|  楼主 | 2020-4-27 12:21 | 只看该作者
本帖最后由 jerow 于 2020-4-27 12:22 编辑

第二点:读时序
首先主设备拉低数据线大于1us
DQ = 0;
delayus(2);
15us内紧接着数据线被释放(后面波形会变化的原因),读0(左)会拉低数据线,读1(右)会拉高数据线,并且主设备会完成读取操作。
DQ = 1;
数据线上的数据存储到tempdata ;//8次一循环按位组合成字节
等待60us再加3us进入循环
最后返回出去就行了。

很多人读取到的数据可能是“85”,这种现象说明时序操作正确。(+85摄氏度是DS18B20在上电复位后在温度寄存器内的对应数字量),多读几次即可。

使用特权

评论回复
地板
杨寅辉| | 2020-4-29 17:38 | 只看该作者
85这个问题,确实经常碰到过,上拉电阻的阻值不够也会导致的。

使用特权

评论回复
5
詹求实| | 2020-4-29 19:00 | 只看该作者
DS18B20对时序要求是很严格的。必须严格按照时序走。

使用特权

评论回复
6
antusheng| | 2020-4-29 21:25 | 只看该作者
之前遇到过85,吓死了

使用特权

评论回复
7
gwsan| | 2020-5-5 15:36 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
8
kxsi| | 2020-5-5 15:36 | 只看该作者
这个分析的很好

使用特权

评论回复
9
nawu| | 2020-5-5 15:37 | 只看该作者
接地良好也很重要

使用特权

评论回复
10
qcliu| | 2020-5-5 15:37 | 只看该作者
应该就是时序的问题

使用特权

评论回复
11
tfqi| | 2020-5-5 15:38 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
12
ningling_21| | 2020-5-8 13:55 | 只看该作者
感谢楼主分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

72

主题

520

帖子

3

粉丝