[英]reading 14-bit data using i2c, python, and raspberry pi
我正在尝试使用python&i2c / smbus从树莓派上的此气压传感器读取数据。
传感器的数据表(第10页)说它将输出0-16383(2 ** 14)范围内的数字值。 到目前为止,似乎我必须读取整个字节,因此我不确定如何获取14位值。 (我有一个到数据表的链接,但是SO表示我需要更多的声誉,然后才能为帖子添加更多的链接。)
此示例使用Adafruit的I2C python库 ,该库基本上是SMBus的包装。
import Adafruit_I2C
import time
# sensor returns a 14-bit reading
max_output = 2**14
# per data sheet, max_output == 1.6 bar
max_bar = 1.6
# i2c address specified in data sheet
sensor = Adafruit_I2C.Adafruit_I2C(0x78)
while True:
reading = sensor.readU16(0, little_endian=False)
# reading is sometimes, but not always, greater than 2**14
# this adjustment feels pretty hacky/wrong
while reading > max_output:
reading = reading >> 1
bar = reading / float(max_output) * max_bar
print bar
time.sleep(1)
我将这些读数与包括气压计的手持式GPS的输出进行比较。 有时我得到的读数有些接近(GPS读数为1001毫巴时为1030毫巴),但是传感器随后急剧下降(下降至930毫巴)以获得一些读数。 我怀疑这是由于我正在读取数据而导致的,但是没有真正的证据来支持这一点。
在这一点上,我不确定下一步该怎么做。
我已经猜到了一些东西,但是希望得到一些更明智的帮助:
您应该屏蔽传感器的输出,而不要移动它。 例如, reading = reading & (max_output-1)
可能应该这样做。
前两位是状态位,因此,如果有时将它们置位,则可能表示:正常模式或过时的数据指示器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.