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