GY-521 No se puede establecer el registro PWR_MGMT_1 - no se puede desactivar el modo SLEEP

2

Estoy intentando establecer una interfaz entre una MCU basada en 8051 y un nuevo módulo GY-521 (ebay) (chip Gyro / Accel) utilizando el bus I2C. He escrito yo mismo las funciones de bit bang de I2C y parecen estar funcionando bien. Puedo ver las operaciones del bus (lectura / escritura) en el alcance, y estoy viendo los ACK del GY-521 cuando deberían verse.

Sin embargo, para leer los datos del giro / aceleración, debo borrar el bit "SLEEP" del registro PWR_MGMT_1.

Procedimiento:  1. Enviar secuencia de inicio  2. Enviar dirección de 7 bits + ESCRIBIR bit (0)  3. Lee ACK del esclavo  4. Escriba la dirección de registro de 8 bits (0x6b)  5. Leer ACK  6. Escriba el valor de datos de 8 bits (0x01 = use X Gyro como fuente de reloj)  7. Leer ACK  8. Enviar secuencia de parada.

Puedo ver la MCU escribir el nuevo valor (0x01) en el registro, pero luego cuando leo el registro, el valor vuelve a 0x40 (predeterminado).

Cualquier lectura de los valores de giro o aceleración devuelve ceros debido a que el módulo está en modo de suspensión.

Aquí está la hoja de especificaciones para el gyro MPU-6050 que se usa en este tablero. enlace

Aquí está la lista de registro: enlace

Si lo desea, puedo publicar la salida de alcance donde puede ver el valor que se está configurando, el ACK recibido y luego leer el valor que produce el valor predeterminado.

Cualquier sugerencia apreciada.

Gracias

    
pregunta Ryan Griggs

1 respuesta

1

El registro PWR_MGMT_1 siempre debe configurarse como el último después de todas las configuraciones de registro como esas:

void MPU9150_Init_awake_SensorRegister (unsigned int MasterI2C_BaseAddress)

{

WriteByte_to_SlaveRegister (MasterI2C_BaseAddress, RA_GYRO_CONFIG, 0x08); WriteByte_to_SlaveRegister (MasterI2C_BaseAddress, RA_ACCEL_CONFIG, 0x10); WriteByte_to_SlaveRegister (MasterI2C_BaseAddress, RA_USER_CTRL, 0x00); WriteByte_to_SlaveRegister (MasterI2C_BaseAddress, RA_PWR_MGMT_1,0x09);

}

  • Usé 0x09 en lugar de 0x01 para deshabilitar el sensor de temperatura porque no lo necesito.

  • Por cierto, solo probé eso y funciona hasta ahora; Sin embargo, aún necesito experimentar con él.

respondido por el Mohamed Behery

Lea otras preguntas en las etiquetas