DS18B20 温度乱跳

Volftooth 2011-07-21 03:16:35
用DS18B20做温度传感、结果发现温度不断在上下波动、
室温28.0℃、传回来的值从25.0-29.0℃都有、
这是个什么原因?、
...全文
499 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Simality 2011-07-26
  • 打赏
  • 举报
回复
这样居然也能读出来。我还真没试过不延时就读转换结果。我一般都是独立供电模式,通过反复查询来判断是否转换完毕。窃电就只能延迟了,反正解决了就好。
Volftooth 2011-07-26
  • 打赏
  • 举报
回复
原因查明、、忘了再转换温度后延时了、、
Simality 2011-07-26
  • 打赏
  • 举报
回复
试试反复读写scratch pad。如果时序没有问题,写进去是什么读出来还应该是什么,而且应该重复多次无差错。
Volftooth 2011-07-26
  • 打赏
  • 举报
回复
delay(70) 就是差不多 600us、
上面的是对应 24MHz 的 600us、
huanglijin123456 2011-07-26
  • 打赏
  • 举报
回复
// delaynus(133); ////last 480 us for reset, here is 600us for safe
delaynus(70);
这里要求延时至少要480us以上,试下看看
Volftooth 2011-07-26
  • 打赏
  • 举报
回复
下面是代码、、


bit vds_reset()
{
int i = 0;
bit dq = 1;

DQ = 1;
delaymin();
DQ = 0;
// delaynus(133); ////last 480 us for reset, here is 600us for safe
delaynus(70);
DQ = 1;

// delaynus(22); ////here is above 100us
delaynus(10);
if(DQ == 0)
{
dq = 1;
//delaynus(133);
delaynus(70);
}
else
dq = 0;

DQ = 1;

return dq;
}

void vds_write_byte(unsigned char byte)
{
unsigned char count = 0;

while(count ++ < 8)
{
DQ = 0;
DQ = byte & 0x01;

byte >>= 1;
//delaynus(14);
delaynus(6); ////71us
DQ = 1;
}
}

unsigned char vds_read_byte()
{
unsigned char count;
unsigned char tmp;

for(count = 0; count < 8; count ++)
{
DQ = 1;
DQ = 0;
delaymin();
DQ = 1;
//delaynus(3);
//delaynus(1);
tmp >>= 1;

if(DQ == 1)
tmp |= 0x80;
//delaynus(14);
delaynus(6);
}

return tmp;
}
Volftooth 2011-07-26
  • 打赏
  • 举报
回复
我是完全按照时序来的啊、、
有没有可能是传感器坏了?、
yyyfstc 2011-07-25
  • 打赏
  • 举报
回复
时序问题吧...严格按照数据手册上写写吧~
ww2000e 2011-07-21
  • 打赏
  • 举报
回复
时序发的还不好?
Volftooth 2011-07-21
  • 打赏
  • 举报
回复
自己顶、、
真没人知道么、、

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧