jiangkeqin_sy 发表于 2018-10-31 09:07 我读取到的这个参数是01111100,不是01111111,手册上说是01111111 |
ssman 发表于 2020-11-9 16:43 这样也可以。我是开机初始化的时候就写。 |
设置成9位精度的,把0x1f写人暂存器,再发个copy0x48命令,1820把3字节放到非易失存储器。9位精度是*0.5+0.5的。把它们放到main()中while循环之前初始化。9位精度也是3字节,数据类型是一样的。这样即可显示正常。 |
我是这样的。把精度配置9位的,即0x1f写入暂存器,再发考命令0x48,1820就把那3字节保存到非易失存储器上。9位精度的是*0.5+0.5 即可显示正常。把它们放到main中while循环之前初始化 |
24#说的很清楚了。你可以先试试。 |
楼主能否把9位分辨率的程序分享一下啊~谢谢 |
我的就是设置 9bit分辨率设置不成功,现在读温度就是太慢了,750ms 才能转化一次,想改成95ms 转化一次 但按上面的设置了 也是不 成功?? 不知道什么原因???求大神指导 |
我的就是设置 9bit分辨率设置不成功,现在读温度就是太慢了,750ms 才能转化一次,想改成95ms 转化一次 但按上面的设置了 也是不 成功?? 不知道什么原因???求大神指导 |
univers 发表于 2019-4-6 16:34 配置精度不成功,我把暂存寄存器的值读出来,高温限和低温限和我配置的一样,就分辨率那里写不进去,一直是0x7f,只是哪里出问题了 |
univers 发表于 2018-10-31 10:49 你应该还是乘以 0.0625 因为即使你设置的精度是0.5,你读出来的值 二进制 仍然有4位 表示的是小数,乘以0.0625 是因为数据整体往左移了4位 |
如果碰到DS18B20问题的兄弟,都可以发表出来啊,大家一起学习。![]() |
changyuan1724 发表于 2018-12-29 01:12 是这样嘛,今天才看到,非常感谢兄弟,我有时间试试!可能是我理解错误吧! |
我还特意注册了论坛账号![]() |
非常感谢楼主,用了楼主的方法解决了精度的问题,感谢感谢!!![]() ![]() |
谢谢。我解决了。 |
看到了普中的板子 我是用pwm控制背光的,定时器会打断温度传感器,论坛上也有这个问题 关闭中断的话,读温度传感器时间过长,造成屏幕闪烁 其实你读取温度传感器要那么快么?2秒读一次就ok了,还有就是你可以判断温度改变了,在更新 |
解决了吗?我解决了 |
兄dei,你这个问题解决了没有?我也遇到了 ,但是我解决了,你的问题出在转换系数上。无论你使用哪个位数的精度,你需要乘的系数永远都是0.0625。9位的分度是0.5摄氏度,不是说转换系数就是0.5摄氏度。 |
初始化经过测试,这样才行的,DS18B20有严格的时序时间。 下面的延时是精确的才行。 /******************************************************************************* * 函 数 名 : ds18b20Init * 函数功能 : 初始化 * 输 入 : 无 * 输 出 : 初始化成功返回1,失败返回0 *******************************************************************************/ uchar ds18b20Init() { uchar i=0; DSPORT = 0; //将总线拉低480us~960us delay520us(); DSPORT = 1; //然后拉高总线,如果DS18B20做出反应会将在15us~60us后总线拉低 delay22us(); //这里非常重要,测试只有10-35us才有效,超过就返回不了啦,(现在取中间值22us)while延时的话要i最低=4开始才有效while(i--) while(DSPORT) //等待DS18B20拉低总线 也就是检测DQ引脚状态 { delayms(1); i++; if(i>5)//等待>5MS { return 0;//初始化失败 } } delay520us(); //等待520us让ds18b20释放总线 return 1; //初始化成功 } |
昨天测试了一下,初始化时序有点问题,返回不了1.之后我单单测试了初始时序,按时序图的时间,修改了时序。可以返回1了。也就是认到了DS18B20 之后把初始化放上去,还是200多度,看来还有别的地方也要改才行,应该是在写bate指令那里。 |
原程序。 |
1003.83 KB, 下载次数: 83
小猫猫爱吃鱼 发表于 2018-10-31 18:26 有时间再研究研究,那不是要重头写过才行。非常感谢谢你!明天把原程上传大家看看。 |
univers 发表于 2018-10-29 16:57 小白,是你多多指教 |
发送了一个字节0001 1111,ds18b20就算接收了一个字,它也只对R1 R0进行操作 |
配置4寄存器只有R1R0可供用户写,但我们发送了一个字节0001 1111,有没有什么不妥?是不是ds18b20就算接收了一个字,它也只对R1 R0进行操作 |
真是蛋痛,没有一个人理我。![]() |