2013-03-14 58 views
2

我刚刚完成了使用i2c从PIC单片机(dsPIC33)实现ADXL345加速度计的成功读取。我到目前为止所取得的所有成果都是正确读取设备ID,这是一个字节。多个寄存器/设备的i2c

任何之前使用过ADXL345的人都会知道,从任何一个轴,X,Y或Z读取数据,都被分成两个字节,例如'DATAX0'和'DATAX1'。该数据表还特别声明'为确保数据一致性,建议使用多字节读取从ADXL345中检索数据',因此每个轴的两个字节需要一起收集。

我的问题是,在i2c中,当每个轴的两个字节由两个不同的寄存器表示时,我该怎么做?

i2c process

上面的图片显示所需要的I2C传输的过程。为了读取加速度计,我们正在查看底部的两个图表,上面粘贴的数据表引用表明我使用了底部图形(多字节),但正如我所说的,两个字节有两个不同的寄存器值(分别为DATAX0和DATAX1的0x32和0x33)。

如何在一次抓取中从一个轴上获取数据?我看到这样做的唯一方法是使用一个寄存器地址进行单字节读取,然后再次使用第二个寄存器地址进行读取,然后将两者一起拼接以获取一个轴数据。

这个问题也适用于从同一个i2c总线上的各种不同设备收集数据,这些设备也会有不同的寄存器。

干杯!

回答

4

您只需在0x32处执行2个字节的读取操作,设备会将0x32和0x33的值放入其响应中。

+0

感谢您的回复。所以你说如果我在寄存器地址中放入0x32(DATA0X)的值,然后重新启动i2c,然后从机读取并获取6个字节,它将从0x32,33,34,35,36 ,和37(即所有三个轴的所有字节?)。我假设通过使用0x32寄存器进行多字节读取,它将只抓取DATA0X字节两次。 – ritchie888 2013-03-14 19:15:37

+0

正确,它将按顺序读取。您可以轻松编写一个测试驱动程序,它可以进行单字节读取和多字节读取以说服自己是一样的。 – TJD 2013-03-15 15:44:23

+0

太好了。非常感谢,我现在正在测试过程中。 – ritchie888 2013-03-15 16:56:05