MPU6050 I2C PIC18F458

0

Estoy usando MPU6050 con el protocolo I2C de PIC18F45. En la placa EasyPIC v6, simplemente me devuelve todo lo que puse en este comando ESCRIBIR I2C1_Wr(0xD3); . Reemplacé el sensor con New One también. No es bueno. Estoy usando MikroC Pro para la programación. Mi supervisor me obliga a abandonar este proyecto. ¿Puede alguien decirme el problema con este código, por favor? Aquí está el Código:

void MPU6050_Activ()
{    I2C1_Init(100000);
     I2C1_Start();
     I2C1_Wr(0x23);   //AD0 TO HIGH NOW ADD IS 0x69 to Write 0xD2 to Read 0xD3
     I2C1_Wr(0x6B); //PWR_MGMT REG ADDRESS
     I2C1_Wr(0x00);  // PWR_MNGMT Reg set to Intenal Clock no Sleep no Reset no Cycle
     I2C1_Stop();

     Delay_ms(70);

     I2C1_Start();
     I2C1_Wr(0x22);
     I2C1_Wr( 0x1B);   //GYRO_CONFIG  Reg
     I2C1_Wr( 0x00 ); //gyro_config, +-250 °/s
     I2C1_Stop();


}

    char text_output[13];
    int data_out;
    unsigned short MPU6050_Read(unsigned short rAddr)
  {
      unsigned short reslt;
      I2C1_Start();
      I2C1_Wr( 0x22 );
      I2C1_Wr(rAddr);  //66
      I2C1_Repeated_Start();
      I2C1_Wr( 0x23 );
      reslt = I2C1_Rd(0u);      // Read the data (NO acknowledge)
      while (!I2C1_Is_Idle()) asm nop;               // Wait for the read cycle to finish
      I2C1_Stop();
      return reslt;
}




void main()
{

     unsigned short read_out;
     TRISC = 0;
     Lcd_Init();                        // Initialize LCD
     Lcd_Cmd(_LCD_CLEAR);               // Clear display
   //Lcd_Cmd(_LCD_CURSOR_OFF);          // Cursor off

     Lcd_Out(2,1,"LED_ON");
     Delay_ms(1000);
     MPU6050_Activ();
     Lcd_Out( 2, 12, "LCDX" );
      while(1){
       Delay_ms(500);
       read_out=MPU6050_Read(MPU6050_RA_GYRO_XOUT_H);
       IntToStr(read_out, text_output );
       Lcd_Out( 1, 7, text_output );
       Lcd_Out( 1, 5, "K" );

      }
}
    
pregunta Ahmad

1 respuesta

2

Para seleccionar la dirección I 2 correcta, debe enviar 0xd2 para la escritura y 0xd3 para la lectura (suponiendo que AD0 es alto).

"I2C1_Wr (0xD3)" no aparece en ninguna parte de su código. ¡Está enviando 0x22 y 0x23 , que no está dirigiéndose a la MPU6050!

    
respondido por el Bruce Abbott

Lea otras preguntas en las etiquetas