我正在尝试将ACS764霍尔效应电流传感器与Raspberry Pi配合使用。该传感器将通过芯片内置I2C接口检测电流并返回其值。我按照规范连接了电路。在我的Raspberry Pi Python代码中,我可以向传感器写入数据或从传感器读取数据,但是我读取的数据总是相同的值。
下面是我阅读传感器的简单代码:
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()
然而,当我运行脚本时,总是显示相同的值,即使我已将当前值更改为感测值。
pi@Raspberry:~ $ 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芯片的“组合数据传输”读取?
请告知,谢谢。
答案 0 :(得分:0)
google几天后,我终于找到了上述问题的解决方案。答案是Raspberry I2C接口支持"组合数据传输" (又名重复启动)但默认情况下不启用。您需要通过以下命令启用该设置。
sudo su -
echo -n 1 > /sys/module/i2c_bcm2708/parameters/combined
exit
有关详细信息,请参阅i2c repeated start transactions 。
基于smbus规范,支持重复启动的函数是i2c_smbus_read_i2c_block_data(),在Python库中调用read_i2c_block_data()。
有关详细信息,请参阅SMBus Protocol Summary。
以下是我从ACS764霍尔效应传感器芯片读取数据的示例代码,需要重复启动。
import datetime
import smbus
import time
bus=smbus.SMBus(1)
# Write setting parameter to the chip
data = [0x02, 0x02, 0x02]
bus.write_i2c_block_data(0x60, 0x04, data)
# Read the data out of the chip that require Repeated Start
data=bus.read_i2c_block_data(0x60, 0x00)
print data
我很高兴找到解决方案,并希望那些面临同样问题的人可以从这篇文章中获得帮助。谢谢大家!