【发布时间】:2016-07-02 22:56:24
【问题描述】:
我正在使用带有 ATMEL ATmega128 的 Synapse 无线模块。我已将 ADXL345 3 轴加速度计连接到它,并通过 I2C 与它通信。 Synapse 模块使用 python 的一个子集作为脚本语言。
当我读取 XYZ 数据时,我得到一个 6 字节的数组。 EC FF EF FF 14 01
输出数据是二进制补码,DATAx0 作为最低有效字节,DATAx1 作为最高有效字节。所以在上面的例子中,EC FF 是 x 轴的输出。
我正在为如何将其转换为 G 力而苦苦挣扎。数据表说在全分辨率模式下(我在)输出分辨率随着 g 范围的增加而增加 由范围位设置以保持 4 mg/LSB 比例因子。
我尝试了以下方法:
x0 = ord(data[0])
x1 = ord(data[1])
raw = x0+(256*x1)
但是 raw 的值没有任何意义。如何将这两个字节转换为有符号整数?
其他信息 当我打电话阅读 adxl345 时:
data = readAdxls(6)
它返回从外部 I2C 设备读回的字节串。
Xlsb = data[0] # EC - 236
Xmsb = data[1] # FF - 255
Ylsb = data[2] # EF - 239
Ymsb = data[3] # FF - 255
Zlsb = data[4] # 14 - 20
Zmsb = data[5] # 01 - 1
所以 Xlsb 是最不重要的 byte,而 Xmsb 是最重要的 byte。这些是整数
我想我只是不明白二进制补码以及如何将这 2 个整数/字节组合成有符号整数。
【问题讨论】:
-
这个子集有多完整?可以使用
struct模块吗? -
不,结构模块不是语言的一部分。 FWIW,也不支持浮点数。它的设计重量极轻。
-
对不起,如果两个字节是 EC 和 FF,第二个最重要的,正确的顺序是 FF EC。因此,要进行转换,您只需要:(大多数
标签: python accelerometer