我刚刚使用 i2c 从 PIC 微控制器 (dsPIC33) 成功读取 ADXL345 加速度计。到目前为止,我所做的只是正确读取设备 ID,它是一个字节。
以前使用过 ADXL345 的任何人都知道,要从 X、Y 或 Z 轴中的任何一个轴读取数据,会分为两个字节,例如“DATAX0”和“DATAX1”。数据表还特别指出“为确保数据一致性,建议使用多字节读取来从 ADXL345 检索数据”,因此需要将每个轴的两个字节收集在一起。
我的问题是,对于 i2c,当每个轴的两个字节由两个不同的寄存器表示时,我该怎么做?
上图显示了 i2c 传输所需的过程。要从加速度计中读取数据,我们正在查看底部的两个图表,我上面粘贴的数据表引用表明我使用了底部图表(多字节),但正如我所说,这两个字节有两个不同的寄存器值(DATAX0 和 DATAX1 分别为 0x32 和 0x33)。
如何一次抓取一个轴的数据?我看到这样做的唯一方法是用一个寄存器地址读取单字节,然后用第二个寄存器地址再次读取,然后将两者连接在一起以获得一个轴数据。
这个问题也适用于从同一 i2c 总线上的各种不同设备收集数据,这些设备也会有不同的寄存器。
干杯!