使用i2c、python和raspberry pi读取14位数据

使用i2c、python和raspberry pi读取14位数据,python,raspberry-pi,i2c,Python,Raspberry Pi,I2c,我正在尝试使用python&i2c/smbus从raspberry pi上读取数据 传感器的数据表(第10页)显示,它将输出0-16383(2**14)范围内的数字值。到目前为止,我似乎必须读取整个字节,所以我不确定如何获得14位的值。(我有一个到数据表的链接,但这么说我需要更多的声誉才能添加更多的帖子链接。) 此示例使用,它基本上是SMBus的包装器 import Adafruit_I2C import time # sensor returns a 14-bit reading max_

我正在尝试使用python&i2c/smbus从raspberry pi上读取数据

传感器的数据表(第10页)显示,它将输出0-16383(2**14)范围内的数字值。到目前为止,我似乎必须读取整个字节,所以我不确定如何获得14位的值。(我有一个到数据表的链接,但这么说我需要更多的声誉才能添加更多的帖子链接。)

此示例使用,它基本上是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毫巴)以获得一些读数。我怀疑这是因为我是如何阅读数据的,但没有真正的证据支持这一点

在这一点上,我不确定下一步要尝试什么

有些事情我已经猜到了,但如果能提供更多的信息帮助,我将不胜感激:

  • 如何读取传感器输出的14位数据
  • 返回的值是什么?假设big-endian产生的值看起来更理智,但我可能在这里混淆了多个问题
  • 我如何知道从哪个寄存器读取?数据表中没有提到这一点。我猜寄存器0可能是唯一的一个

您应该屏蔽传感器的输出,而不是移动它。e、 g.
reading=reading&(max\u output-1)
可能应该这样做


前两位是状态位,因此,如果设置它们,有时可能意味着:正常模式或陈旧数据指示器。

顺便说一句,我不知道这是否是您的根本问题,但希望它的方向是正确的。这是我正在看的数据表:我试试看。特定传感器的数据表位于。我没有想到要寻找更多关于霍尼韦尔传感器使用i2c的通用信息。看起来很有用。