DS18B20读数错误排除

描述:

同时测试了好几个板子,都接了DS18B20传感器。但,有的板子读取的DS18B20温度值正确,有的读取错误。

原因查找:

以为是有的传感器坏了,但测试后发现并不是。

又以为是DS18B20需要的启动时间长,因此在给DS18B20芯片供电好长一段时间后,才启动采集程序,但结果还是错误。

但在找问题的过程中,发现调试时的暂停会导致读出正确的DS18B20结果。

因此,怀疑是延时的问题。

解决:

所以在程序中连续读取10次DS18B20数据,并把数据打印出来查看,结果发现:前几次读取的结果是错误的,之后读取的结果就都是对的。

虽然解决了,但并没有找到根源,不求甚解吧。

 

在此,也记录下之前的一个针对错误的处理语句(已经看不明白当时为何要这么处理了,但感觉该处理目前似乎用不上了,因此删除掉了)

if ((fabs(g_fSoilTemp - 85) > 1) && (fabs(g_fSoilTemp - 127.9) > 1))
{
break;
}

转载于:https://www.cnblogs.com/gaotaozhaolei/p/7873432.html

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这个问题的解决方法比较简单。我们可以先使用dS18B20传感器读取当前的温度值,然后再将其显示在数码管上。具体的步骤如下: 1. 首先,需要连接dS18B20传感器和数码管到单片机上。连接方法可以参考相关的硬件资料和引脚图。 2. 然后需要使用相应的dS18B20库函数读取当前的温度值。例如,如果使用基于STM32的开发板,可以使用HAL库提供的相关函数来读取。读取温度值的代码可能类似于以下代码: ```c float temperature = 0; uint8_t buffer[2]; HAL_Delay(1000); // 延时等待dS18B20转换完成 DS18B20_ReadData(buffer); // 读取dS18B20的温度值 temperature = buffer[0] + (float)buffer[1]/100; // 将温度值转换为浮点数 ``` 上面的代码中,我们首先使用HAL_Delay函数等待dS18B20传感器的转换完成。然后调用DS18B20_ReadData函数读取温度值,这个函数可能需要根据具体的硬件平台进行修改。最后,我们将读取到的温度值转换为浮点数,并存储在temperature变量中。 3. 最后,将读取到的温度值显示在数码管上。这个步骤可以使用数码管驱动库函数来实现。例如,如果使用基于STM32的开发板,可以使用HAL库提供的GPIO和TIM相关函数来控制数码管的显示。将温度值显示在数码管上的代码可能类似于以下代码: ```c int integer_part = temperature; // 取出整数部分 int decimal_part = (temperature - integer_part)*100; // 取出小数部分 int decimal_first = decimal_part / 10; // 取出小数点后第一位数字 int decimal_second = decimal_part % 10; // 取出小数点后第二位数字 // 数码管显示整数部分 display_integer(integer_part); // 数码管显示小数部分 display_decimal(decimal_first, decimal_second); ``` 上面的代码中,我们首先将temperature变量的整数部分和小数部分分别取出。然后再将小数部分拆分为小数点后第一位数字和第二位数字。最后,将整数部分和小数部分分别显示在数码管上。这里的display_integer和display_decimal函数可能需要根据具体的硬件平台进行修改。 综上所述,以上是将dS18B20读取的温度值显示在数码管上的一个简单实现过程。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值