[英]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.