我正在嘗試將ACS764霍爾效應電流傳感器與Raspberry Pi配合使用。該傳感器將通過芯片內置I2C接口檢測電流並返回其值。我根據規格連接了電路。在我的Raspberry Pi Python代碼中,我可以向傳感器寫入數據或從傳感器讀取數據,但是我讀取的數據總是具有相同的值。Raspberry Pi SMBus支持組合數據傳輸?
下面是我簡單的代碼來讀取傳感器:
import datetime
import smbus
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(37, GPIO.OUT) #Connected to the ACS764 Freeze pin
bus=smbus.SMBus(1)
#Freeze the data
GPIO.output(37, True)
#Read the values
bus.write_byte(0x60, 0x00) #Simulate the combined data transmission format
data=bus.read_i2c_block_data(0x60, 0x00)
print data
#Unfreeze the data
GPIO.output(37, False)
GPIO.cleanup()
然而,當我運行該腳本值送花兒給人表現出同樣甚至我已經改變了被檢測值的電流。
[email protected]:~ $ python i2cAcs764.py
[0, 0, 3, 0, 0, 3, 0, 0, 3, 0, 0, 3, 0, 0, 3, 0, 0, 3, 0, 0, 3, 0, 0, 3, 0, 0, 3, 0, 0, 3, 0, 0]
根據ACS764規範,要讀取傳感器值,我需要使用「組合數據傳輸」格式。然而,我在Python SMBus庫中找不到任何允許使用組合數據傳輸的功能,因此此時我使用「bus.write_byte」函數來模擬「組合數據傳輸」。以下是規格的屏幕截圖。
我現在的問題是我如何使用Python的SMBus I2C庫進行ACS764芯片的「組合式數據傳送」閱讀?
請指教,謝謝。
你的數據表截圖中指定的協議似乎比你在python腳本中做的要複雜得多 – jDo
我不確定我完全理解它,但是這是我如何讀它的...... MASTER:發送一個序列起始位+從地址+寫位(零)+源寄存器地址。 MASTER:發送另一個序列,但是這次啓動位+從屬地址+讀取位(1)。 SLAVE:發送數據字節1. MASTER:將SDA拉低。 SLAVE:發送數據字節2. MASTER:將SDA拉低。 SLAVE:發送數據字節3. MASTER:發送停止位。這是來自MASTER/python的5次獨立傳輸,以及來自SLAVE /霍爾傳感器的3次傳輸。很多來回(命令,數據和確認)。我敢肯定,使用庫會容易得多 – jDo