2646|5

255

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

问题解决,特此分享 [复制链接]

前几天在论坛里发了篇求助帖,是关于DS18b20无法完成初始化协议栈无法运行的问题,原文链接如下:

DS18b20问题 https://bbs.eeworld.com.cn/thread-307169-1-2.html

这两个问题前两天已经解决了,但因为忙于准备项目中期答辩的事,没来得及和大家分享解决过程。现在补上来:

 ①DS18b20无法完成初始化:这个问题出自驱动程序中初始化函数

void init_1820(void)

 {

SET_OUT; SET_DQ;//输出1

CL_DQ;

Delay_nus(700);//拉低一段时间

SET_DQ;//释放

SET_IN;//输入

Delay_nus(40); //释放总线后等待15-60us

while(IN_DQ);//等待回复

Delay_nus(240);//回复的低电平在60到240us

SET_OUT;

SET_DQ;//回到初始DQ=1;

} 中的while(IN_DQ);,经检测,IN_DQ的输出总是1,即程序无法得到完成初始化所需的IN_DQ低电平信号,故而卡在这个无限满足的死循环里。

原先我以为是时序问题,但试了很多不同的延时时间都无效。又以为是DS18b20坏了,但换了几个都是这样,于是也排除这种可能。

最后,我用IAR的断点设置功能,在while(IN_DQ);这句上设置断点,当程序运行这一句之前,我把DS18b20的DQ引脚从连接的P0.0口上拔下来,插到GND引脚上,也就是人为的制造一个低电平,嘻嘻。效果还不错,程序终于越过这一句,成功运行下去了!而且后面循环执行初始化函数时也没有再卡在这一句上。虽然不能解释为什么,但我灵机一动,把while(IN_DQ);这句之前的读写操作改成循环语句,即将原函数修改如下:

void init_1820(void)

 {

do

 { SET_OUT;

SET_DQ;//输出1

CL_DQ;

Delay_nus(700);//拉低一段时间 S

ET_DQ;//释放

SET_IN;//输入

Delay_nus(40); //释放总线后等待15-60us }

 while(IN_DQ);//等待回复

Delay_nus(240);//回复的低电平在60到240us

SET_OUT;

SET_DQ;//回到初始DQ=1; }

此后,程序就再也没有卡过了。但是,到现在我也不知道自己为什么要这样改···

不过,后来在运行时,又遇到一个问题,读出的第一个数据总是85℃,也就是DS18b20以12位精度初始化时输出的数据。经过仔细排查,发现是读数据函数中:

unsigned int read_data_value(void)

{ unsigned int j;

unsigned char temh,teml;

init_1820(); //复位

18b20 write_1820(0xcc); // 发出转换命令 搜索器件

write_1820(0x44); //启动

for(j=20;j>1;j--) Delay_nus(500);

init_1820();

write_1820(0xcc);

//match_rom(serial); //匹配

write_1820(0xbe);

teml=read_1820(); //读数据

temh=read_1820();

if(temh&0x80) //为负 { flag=1; } else { flag=0; //为正 }

 sensor_data_value[0]=teml;

sensor_data_value[1]=temh;

data_value = temh;

data_value = ( data_value << 8 )| teml;

return data_value; } 的for(j=20;j>1;j--) Delay_nus(500);一句被注释掉了,导致该错误。去掉注释后就一切正常了。

 

②协议栈无法运行

呵呵,其实第一个问题解决了,这个问题也就迎刃而解了,因为测温节点成功读取数据后就可以发送无线数据给显示节点,显示节点就获得了进入任务处理的激发信号,因此程序也就顺利运行,成功地在液晶屏上显示出温度数值了。

 

 以上就是本人针对这两个问题的一点经验,拿来与大家分享,献丑了,呵呵

[ 本帖最后由 wwh19910609 于 2011-10-21 22:44 编辑 ]
此帖出自无线连接论坛

最新回复

谢谢分享!大家都这么分享自己经验的话,我想每个人做起来不但快些,而且会比单兵作战舒服很多吧。再次感谢LZ无私分享!  详情 回复 发表于 2011-11-11 19:02

赞赏

1

查看全部赞赏

点赞 关注
 

回复
举报

547

帖子

0

TA的资源

纯净的硅(初级)

沙发
 
正巧。遇上了。。。。
此帖出自无线连接论坛
个人签名嵌入式培训www.51great.org
 
 

回复

1万

帖子

16

TA的资源

版主

板凳
 

谢谢分享,实战的记录,真是不错

那叫一个顶
此帖出自无线连接论坛
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(初级)

4
 
谢谢分享
此帖出自无线连接论坛
 
 
 

回复

255

帖子

0

TA的资源

纯净的硅(中级)

5
 
呵呵,多谢各位捧场!
今后在实验过程中肯定还会遇到更多更棘手的问题,到时候还望各位坛友不吝赐教啊!
此帖出自无线连接论坛
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

6
 

谢谢分享!

谢谢分享!大家都这么分享自己经验的话,我想每个人做起来不但快些,而且会比单兵作战舒服很多吧。再次感谢LZ无私分享!
此帖出自无线连接论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
快速回复 返回顶部 返回列表