【发布时间】:2016-07-12 04:02:18
【问题描述】:
我正在尝试将 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芯片的“组合数据传输”读取?
请指教,谢谢。
【问题讨论】:
-
数据表屏幕截图中指定的协议似乎比您在 python 脚本中所做的要复杂得多
-
我不确定我是否完全理解它,但这就是我阅读它的方式... MASTER:发送起始位+从地址+写入位(零)+源寄存器地址的序列。 MASTER:发送另一个序列,但这次是起始位 + 从地址 + 读取位 (1)。 SLAVE:发送数据字节 1。 MASTER:将 SDA 拉低。 SLAVE:发送数据字节 2。 MASTER:将 SDA 拉低。 SLAVE:发送数据字节 3。 MASTER:发送停止位。这是来自 MASTER/python 的 5 个单独传输和来自 SLAVE/霍尔传感器的 3 个响应。很多来回(命令、数据和 ACK)。我敢肯定,使用库会容易得多