我对ADXL345数字加速度计中的寄存器感到困惑。
让我困惑的第一件事是,我必须在哪里写入数据来设置+/-2g的分辨率。我在数据表中没有发现任何关于这个寄存器的内容。
其次,有两个寄存器,其中存储X轴的测量值。如何从两个寄存器读取数据?我需要同时发送寄存器的地址吗?
首先让我感到困惑的是,我必须在哪里写入数据来设置+/-2g的分辨率。我在数据表中没有发现任何关于这个寄存器的内容。
您可以在数据表的第26页找到此信息(至少在数据表修订版E中(。范围由寄存器0x31(DATA_FORMAT
(中的位0和1控制。
寄存器0x31-DATA_FORMAT(读/写(
DATA_FORMAT寄存器控制数据的显示到寄存器0x32到寄存器0x37。所有数据,除了±16 g范围内,必须夹住以避免侧翻。
SELF_TEST位
SELF_TEST位中的设置为1会向传感器,导致输出数据的偏移。值为0将禁用自检力。
SPI位
SPI位中的值1将设备设置为3线SPI模式,并且值0将设备设置为4线SPI模式。
INT_INVERT位
INT_INVERT位中的值0将中断设置为活动并且值1将中断设置为有效低。FULL_RES位
当此位设置为值1时,设备处于全分辨率模式,其中输出分辨率随着g范围的增加而增加由范围位设置以保持4mg/LSB比例因子。什么时候FULL_RES位设置为0,设备处于10位模式,并且范围比特确定最大g范围和比例因子。
调整位
正当位中的1的设置选择左正当(MSB(模式,并且设置为0选择具有符号扩展的右对齐模式。
范围位
这些比特设置g范围,如表21中所述。
表21。g量程设置
╔═════════╦══════════╗ ║ Setting ║ ║ ╠════╦════╣ g Range ║ ║ D1 ║ D0 ║ ║ ╠════╬════╬══════════╣ ║ 0 ║ 0 ║ +/- 2 g ║ ╠════╬════╬══════════╣ ║ 0 ║ 1 ║ +/- 4 g ║ ╠════╬════╬══════════╣ ║ 1 ║ 0 ║ +/- 8 g ║ ╠════╬════╬══════════╣ ║ 1 ║ 1 ║ +/- 16 g ║ ╚════╩════╩══════════╝
因此,您要做的是读取寄存器0x31的当前值,屏蔽位0和1,设置您想要的值(根据表21(,然后将新值写入寄存器0x31。
其次,有两个寄存器存储X轴的测量值。如何从两个寄存器读取数据?我需要同时发送寄存器的地址吗?
否,您按顺序读取每个寄存器。
寄存器0x32保存x轴值的最低有效位,寄存器0x33保存x-轴值的最高有效位。它们结合在一起,形成一个x轴读数,精度为13(最大(位,采用二进制补码格式。如果只需要8位精度,则可以从寄存器0x33中只读取MSB,这将比读取两个寄存器略快。
数据表确实提出了一个你应该注意的额外建议:
建议对所有寄存器执行多字节读取,以防止顺序寄存器读取之间的数据发生变化。
多字节读取的具体方式各不相同,具体取决于您使用的是SPI还是I2C总线,但无论哪种方式,都在数据表中进行了描述。对于SPI:
要在一次传输中读取或写入多个字节多字节位,位于第一个字节传输中R/W位之后(图37至图39中的MB(。寄存器之后寻址和数据的第一个字节,每个后续的时钟集脉冲(八个时钟脉冲(使ADXL345指向下一个读或写寄存器。这种转变一直持续到时钟脉冲停止并且CS被解除断言。执行读取或写入在不同的非顺序寄存器上,CS必须被取消断言在传输和新寄存器之间必须寻址分别地