我正在研究DS18B20温度传感器实现。 代码运行良好。但是有一个与“转换时间”相关的问题。
芯片数据表说明在发出“start_conversion”命令之后我应该等待给定的时间(几百ms),之后我才能继续读取数据寄存器(以获得温度)。
我看到的是,这是我的问题,我不必等待。我的代码使用750毫秒或0毫秒作为等待时间运行。数据寄存器有一些值,我可以毫无问题地得到它们。
那它是如何运作的?我有没有等待。如果等待时间比所需要的短,那么数据寄存器中的数据是什么?
我个人的意思是我不必等待,我只能等待这次转换。但我可以随时读取寄存器,但只能获得最新的存储温度。可能不是我要求在几个时钟周期之前开始转换的那个......
答案 0 :(得分:0)
您必须等待转换完成。但这样做的标准方法是读取最后的结果,然后开始新的转换以便稍后阅读。
loop
start conversion
yield for at least 750 ms
read result
loop
请注意,代码会读取结果,然后立即跳转到循环的顶部以开始下一次转换。
这是你的代码在做什么?
编辑回应评论:
挂起CPU是一种糟糕的方法。这就是我建议不这样做的原因。
对于在转换过程中读取温度值,我没有看到TH和TL以外的内部寄存器。对我说的是随着转换的进行,这些寄存器的位将从高位变为低位。如果在转换期间读取,则将获得高位的当前值,但是低位的过期值。这意味着您将获得较差的精度,并可能导致非常错误的结果。
例如,旧结果可能以0111111结束。如果新结果稍高,则可能以1000000结尾。在转换期间,结果将保持1111111,这远远高于旧的和新结果。
当转换正在进行时,该单元似乎以0响应。您可以检查是否可以安全地读取该值。