1 votos

Dificultad para leer los registros utilizando el I2C

Es necesario obtener los valores de la velocidad angular del módulo giroscopio en "Tablero "Amperka . Pero incluso para leer el registro identificador, devuelto respuestas incorrectas. Ya se pasa el día y no han logrado incluso esto, por no hablar de la angular ) Yo uso la biblioteca HAL. Aquí está mi código:

    void Accel_Ini(void)
{
        uint16_t ctrl = 0x0000;
        HAL_Delay(500);
        if(Accel_ReadID()!=0x68) while(1);
        AccInit(ctrl);
}

uint8_t Accel_ReadID(void)
{
uint8_t ctrl = 0x00;
        ctrl = Accel_IO_Read(0x68,0x0F);
        return ctrl;
}

uint8_t Accel_IO_Read(uint16_t DeviceAddr, uint8_t RegisterAddr)
{
        return I2Cx_ReadData(DeviceAddr, RegisterAddr);
}

static uint8_t I2Cx_ReadData(uint16_t Addr, uint8_t Reg)
{

        HAL_StatusTypeDef status = HAL_OK;

        uint8_t value = 0;

        status = HAL_I2C_Mem_Read(&hi2c1, Addr, Reg, I2C_MEMADD_SIZE_8BIT, &value, 1, 0x10000);

        if(status != HAL_OK)
                    while(1);

        return value;

}

enter image description here (la dirección del giroscopio es 0x68)

1voto

Nenad Puntos 3779

La función 'Accel_ReadID()' devuelve el contenido del registro 0x0f de I2C-Slave con dirección 0x68.

En el cuadro 18 del ficha técnica (página 27) encontrará la descripción del registro correspondiente:

  • Nombre: WHO_AM_I
  • Dirección: 0x0f
  • Por defecto: 0b11010011 (=0xd3)

Así que tienes que comparar el valor de retorno con 0xd3 (el contenido del registro por defecto) y no con 0x68 (la dirección del esclavo).

Por lo tanto, la función Accel_Init() debe modificarse como sigue:

void Accel_Ini(void) {
    uint16_t ctrl = 0x0000;
    HAL_Delay(500);
    if(Accel_ReadID()!=0xd3) while(1);
    AccInit(ctrl);
}

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X