ds18b20使用缺陷

ds18b20使用缺陷

蓝桥杯单片机

直接一次不能读取到温度

如果直接是单独读取一个ds18b20的温度数值,那么这个温度读出来显示的就只是85这个

奇怪的数字

这很有可能是一个默认的温度数值

在没有执行温度转换命令之前的温度寄存器之中的数值

原因可能是进行温度转换之后没有足够的延时时间来进行完全的执行完温度转换的命令

因此可以考虑进行多个延时来观察到底需要多少的延时(在执行温度转换的命令之后)

由此也可以预见的就是每次读取温度得到的数值其实是上一次温度转换的温度数值

那么每次读取温度命令如何才能让他是真正的读取到自己的数值

我觉得可行的就是能够明确的有指示这次温度已经转换完毕

然后进行温度读取这样的话温度读取才是当时的数值

接下来的问题就是那一点能够观察到温度转换是否已经完成

经过一段时间的测试发现在执行温度转换命令后延时600毫秒可以正常显示温度

即使这是第一此读取温度

但是在550ms的时候就不行了

继续测试下去已经没有意义了

这个问题是在温度记录器这个题目之中发现的

如果真的每次都执行温度转换命令之后延时600毫秒的话

显示界面就会中断停止而不执行其他命令

但是不使用延时函数就会导致每次测量得到的温度都是

上一次温度转换的温度

我想到了两种方法可以使他正常显示

1.就是在函数初始化的时候就直接写一个温度转换的命令

这样每次读取到的温度就算是第一次也是会直接读取到正常的

温度数值,而不是显示一个85

2.就是在主循环之中不断的执行温度转换命令

但是不进行读取操作

这样可以保证在温度数值寄存器之中的温度数值总是

保存着在当前时间段的600ms附近的温度数值

这种方法比较合适

第一种方法终究是治标不治本

同样的这个温度读取函数放在定时器之中也是可以的

个人觉得放在定时器之中50ms读取这个函数的值比较合适

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
DS18B20是一款数字温度传感器,使用一根三线总线(VCC、GND、DATA)连接,支持多个传感器在同一条总线上通讯。以下是DS18B20的使用手册: 1. 确定电路连接:将DS18B20的VCC引脚连接到3.3V或5V电源,将GND引脚连接到地线,将DATA引脚连接到微控制器的GPIO口,并加上一个4.7kΩ的上拉电阻。 2. 初始化总线:在读写DS18B20之前,需要对总线进行初始化。初始化过程包括发送复位脉冲、检测DS18B20响应、发送读写命令等。具体实现可参考DS18B20的数据手册。 3. 发送读取温度命令:初始化完成后,可以向DS18B20发送读取温度的命令。命令格式为发送一个字节0x44到DS18B20,表示开始温度转换。 4. 等待温度转换完成:DS18B20开始温度转换后,需要一定的时间才能完成。转换时间取决于DS18B20的分辨率设置和供电电压等因素。具体时间可参考DS18B20的数据手册。 5. 读取温度值:温度转换完成后,DS18B20将温度值存储在内部寄存器中。可以通过发送读取寄存器命令和读取温度值命令来读取温度值。读取到的温度值是一个16位的有符号整数,需要进行转换和解析才能得到实际温度值。 6. 处理错误情况:在使用DS18B20的过程中,可能会出现一些错误情况,如总线通信失败、DS18B20响应异常等。需要在程序中处理这些错误并进行相应的处理。 总的来说,使用DS18B20需要了解其通信协议和数据格式,以及对总线操作和错误处理等方面有一定的掌握。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值