ds18b20使用缺陷
蓝桥杯单片机
直接一次不能读取到温度
如果直接是单独读取一个ds18b20的温度数值,那么这个温度读出来显示的就只是85这个
奇怪的数字
这很有可能是一个默认的温度数值
在没有执行温度转换命令之前的温度寄存器之中的数值
原因可能是进行温度转换之后没有足够的延时时间来进行完全的执行完温度转换的命令
因此可以考虑进行多个延时来观察到底需要多少的延时(在执行温度转换的命令之后)
由此也可以预见的就是每次读取温度得到的数值其实是上一次温度转换的温度数值
那么每次读取温度命令如何才能让他是真正的读取到自己的数值
我觉得可行的就是能够明确的有指示这次温度已经转换完毕
然后进行温度读取这样的话温度读取才是当时的数值
接下来的问题就是那一点能够观察到温度转换是否已经完成
经过一段时间的测试发现在执行温度转换命令后延时600毫秒可以正常显示温度
即使这是第一此读取温度
但是在550ms的时候就不行了
继续测试下去已经没有意义了
这个问题是在温度记录器这个题目之中发现的
如果真的每次都执行温度转换命令之后延时600毫秒的话
显示界面就会中断停止而不执行其他命令
但是不使用延时函数就会导致每次测量得到的温度都是
上一次温度转换的温度
我想到了两种方法可以使他正常显示
1.就是在函数初始化的时候就直接写一个温度转换的命令
这样每次读取到的温度就算是第一次也是会直接读取到正常的
温度数值,而不是显示一个85
2.就是在主循环之中不断的执行温度转换命令
但是不进行读取操作
这样可以保证在温度数值寄存器之中的温度数值总是
保存着在当前时间段的600ms附近的温度数值
这种方法比较合适
第一种方法终究是治标不治本
同样的这个温度读取函数放在定时器之中也是可以的
个人觉得放在定时器之中50ms读取这个函数的值比较合适
|