本帖最后由 chenyuejian 于 2013-2-27 09:46 编辑
我用PIC18F4550的I2C来采集MPU6050的数据。PIC主模式数据接收是一个很简单的硬件过程。我发现在读取的时候,程序停在了Readi2c()处。分析原因是MPU6050一直未发送数据,硬件也就无法接收完成,程序停在了BF判别的地方(看源程序)。所以原因还是定位为传感器未初始化成功。但是传感器在先前的writeI2C时是提供了ACK响应信号的(是根据寻址成功来判断的)。跪求高手们指点!
附:REG_data = ReadI2C(); //read in single byte
ReadI2C() 源程序:
unsigned char ReadI2C( void )
{
SSPCON2bits.RCEN = 1; // enable master for 1byte reception
while ( !SSPSTATbits.BF ); // wait untilbyte received
return( SSPBUF ); // return withread byte
}
传感器初始化:
Single_WriteI2C(PWR_MGMT_1, 0x00); //解除休眠状态
Single_WriteI2C(SMPLRT_DIV, 0x07); //陀螺仪采样率,典型值:0x07(125Hz)
Single_WriteI2C(F_CONFIG, 0x06); //低通滤波频率,典型值:0x06(5Hz)
Single_WriteI2C(GYRO_CONFIG, 0x18); //陀螺仪自检及测量范围,典型值:0x18(不自检,2000deg/s) 0x00 250
Single_WriteI2C(ACCEL_CONFIG, 0x01);
|