找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

AVR16单片机读取DS18B20的测量温度出现的问题

查看数: 2208 | 评论数: 8 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2021-9-14 18:46

正文摘要:

附上关于DS18B20操作的部分源码读到temp是错误的!!! 然后我单独检验读到的MSB和LSB的值,结果竟然是一样的!!!! 搞了好久还没有解决,只能请教大佬们了/////////////////////////////////////// AVR16 8M ...

回复

ID:382454 发表于 2021-10-8 11:23
http://www.51hei.com/bbs/dpj-139513-1.html
这个贴子,你看看。
ID:382454 发表于 2021-10-6 22:15
其实就是瞠序和判断的问题,我发过一个类似的贴,你找找。
ID:419968 发表于 2021-9-20 18:28
主机拉低总线480-960us后释放总线,由上拉电阻拉高总线,过15-60us 18b20会拉低总行
所以延时68us后等待18b20拉低,
ID:624769 发表于 2021-9-15 23:43
wzl570 发表于 2021-9-15 08:02
我读了啊
if(PINA&0x80)//68us后还是高电平的话没有初始成功返回0
flag = 0;

不是啊,你仔细看看你的代码:

DQ_ON;//1
DQ_IN;//输入
delay_us(68);
if(PINA & 0X80) flag = 0;
else flag = 1;//初始化成功
delay_us(420);
return flag;

你是直接 68 us 后 判断,是不是高电平, 你压根没有管, 68us 之前,有没有过 低电平。换句话说,就算前面一直是高电平,你也是判断的初始化成功, 而初始化成功的关键是, 68us 之前,必须出现过低电平,这么说你能理解么?
所以,你的判断逻辑 应该是, 拉高电平后,1us 之后 等待低电平,接受到低电平后,计时60us 后再判断是否变高电平,是的话,才算初始化成功。
ID:962686 发表于 2021-9-15 22:59
好久了还是卡在读到的高位和低位数据是一样的,在25°C时MSB是144,LSB也是
ID:962686 发表于 2021-9-15 08:02
188610329 发表于 2021-9-14 20:31
你初始化的判断, 有点问题……
DQ_IN;//输入
delay_us(68);

我读了啊
if(PINA&0x80)//68us后还是高电平的话没有初始成功返回0
flag = 0;
else flag = 1;//若是低电平,成功,返回1
//如果延时没有太大误差那么第一次拉低电平>480us再次拉高电平的68us后这段时间是DS18B20返回初始信息的时间。实际我也单独测试了初始化函数,确实返回成功标志flag = 1;
//是不是我哪里了解错了
ID:624769 发表于 2021-9-14 20:31
你初始化的判断, 有点问题……
DQ_IN;//输入
delay_us(68);
if(PINA & 0X80) flag = 0;
else flag = 1;//初始化成功
delay_us(420);
return flag;
你没有去读 18B20 的低点平……,你怎么确认初始化成功了? 也许压根没有拉低过呢?要先读到低电平然后他又变高电平,才是他告诉你,初始化已经成功,你傻等60微妙直接读到高电平没用的。

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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