我正在研究DS18B20 temp传感器的实现。代码运行良好。但是有一个与“转换时间”相关的问题。
芯片数据表指出,在发出"start_conversion“命令后,我应该等待给定的时间(数百毫秒),然后才能继续读取数据寄存器(以获取温度)。
我看到的是,这是我的问题,我不需要等待。我的代码运行时使用750ms或0ms作为等待时间。数据寄存器有一些值,我可以毫不费力地获取它们。
那么它是如何工作的呢?我到底要不要等。如果等待时间比所需时间短,那么数据寄存器中的数据是什么?
我个人的想法是,我不需要等待,我可以等待这个转换。但我可以随时读取寄存器,但只能获得最新存储的温度。可能不是我在几个时钟周期前要求开始转换的那个…
发布于 2015-11-30 14:33:09
您必须等待转换完成。但执行此操作的标准方法是读取最后一个结果,然后开始一个新的转换,以便稍后读取。
loop
start conversion
yield for at least 750 ms
read result
loop注意,代码读取结果,然后立即跳到循环的顶部以开始下一次转换。
这就是你的代码要做的吗?
响应评论进行编辑:
挂起CPU是一种糟糕的方法。这就是为什么我建议不要这么做的原因。
至于在转换过程中读取温度值,除了TH和TL之外,我看不到其他内部寄存器。对我来说,这意味着随着转换的进行,这些寄存器的位将从高位变为低位。如果您在转换过程中读取,您将获得高位的当前值,但低位的过时值。这意味着你会得到很差的精度,并且可能会得到非常错误的结果。
例如,旧的结果可能以0111111结尾。如果新的结果稍微高一点,那么它可能会以1000000结束。在转换过程中,结果将保留1111111,这比新旧结果都要高得多。
在转换过程中,单元似乎响应为0。您可以检查是否可以安全地读取值。
https://stackoverflow.com/questions/33988121
复制相似问题