Thread 中讨论的其他器件:CC2650
工具/软件:TI-RTOS
大家好、
我遇到的问题与本文(https://e2e.ti.com/support/embedded/tirtos/f/355/t/538836)非常相似、只不过我使用的是 CC2650通过 I2C 接口与 ADXL345连接。 我的第一个读/写事务始终失败、我必须发送虚拟事务作为变通方法。 在我的第一个事务之后、 写入/读取寄存器的其他事务将正常工作。 遗憾的是、该帖子很旧、因此我不知道 OP 是否找到解决方案。 是否有人遇到相同的问题或知道导致此问题的原因?
我运行了几个测试来确保我的 CC2650和 ADXL345能够正常通信、包括"重新读取"事务以获取器件 ID、并返回0xE5的值(如数据表中所述正确)。
此时、我将尝试找到上述解决方案、并实现一个函数来读取3轴 x、y、z 的原始输入数据并 将其转换为 g、
void ADXL345_GetGxyz (float* x、
float* y、
float* z)
{
system_printf ("\t%s 被调用\n"、__function__);System_flush ();
无符号短整型 xData = 0;// X 轴的输出数据。
unsigned short yData = 0;// Y 轴的输出数据。
unsigned short zData = 0;// Z 轴的输出数据。
ADXL345_GetXyz (&xData、&yData、&zData);
*x =(浮点)(fullResolutionSet? (xData * ADXL345_scale_factor):
(xData * ADXL345_scale_factor *(selectedRange >> 1)));
*y=(Float)(FullResolutionSet? (yData * ADXL345_scale_factor):
(yData * ADXL345_scale_factor *(selectedRange >> 1)));
*z =(浮点)(fullResolutionSet? (zData * ADXL345_scale_factor):
(zData * ADXL345_scale_factor *(selectedRange >> 1)));
}
void ADXL345_GetXyz (unsigned short* x、
unsigned short* y、
unsigned short* z)
{
system_printf ("\t%s 被调用\n"、__function__);System_flush ();
*x = ADXL345_GetRegisterValue (ADXL345_DATAX1)<<8;
*x += ADXL345_GetRegisterValue (ADXL345_DATAX0);
* y = ADXL345_GetRegisterValue (ADXL345_DATAY1)<< 8;
*y += ADXL345_GetRegisterValue (ADXL345_DATAY0);
*z = ADXL345_GetRegisterValue (ADXL345_DATAZ1)<<8;
*z += ADXL345_GetRegisterValue (ADXL345_DATAZ0);
}
uint32_t ADXL345_GetRegisterValue (uint32_t registerAddress)
{
system_printf ("\t%s 被调用\n"、__function__);System_flush ();
uint32_t ReadData[2]={0};
uint32_t writeData[2]={0};
uint32_t 寄存器值= 0;
I2C_Transaction i2cTransaction;
//设置事务
writeData[0]=寄存器地址;
i2cTransaction.slaveAddress = ADXL345_address;
i2cTransaction.writeBuf = writeData;
i2cTransaction.writeCount = 1;
i2cTransaction.readBuf = ReadData;
i2cTransaction.ReadCount = 1;
if (I2C_transfer (i2c、&i2cTransaction)){
registerValue = ReadData[0];
System_printf ("我们从 ACC 收到了这个1字节:%04x\n"、registerValue);System_flush ();
System_printf ("读取工作\n");System_flush ();
} 否则{
System_printf ("I2C 总线故障....。 读取寄存器函数\n");
system_flush();
}
返回寄存器值
;}
但是、调用 ADXL_GetGxyz 时、我只能得到与 X Y Z 相同的值:c083 9d8b 1759、尽管我尝试用不同的位置移动加速计? 我可能出了什么问题?
如果有任何帮助,将不胜感激。 谢谢、
Henry