No estás solo si estás frustrado. A continuación se incluye una explicación detallada de lo que está pasando con este chip, pero es una lectura larga, así que apilaré algunos enlaces en la parte superior de aquí para que pueda ir a toda prisa:
-
probablemente obtendrás los mejores resultados portando una biblioteca existente, o al menos tomando prestada la lógica de algunas de las funciones. Invensense lanzó recientemente el código fuente para la versión 6.12 de su controlador MotionApps, y también proporcionan (solo) las últimas versiones de sus documentos para la parte de sus controladores basada en I2C / Registro. Todo esto está disponible en su sitio después de registrarse. Lamentablemente, muchas de las funciones de DMP no están completamente incluidas ... ver más abajo para obtener más información al respecto.
-
I2CDevLib es una gran fuente de información sobre el MPU6050. Tengo un hilo abierto ahora con la esperanza de agitar la discusión sobre cómo activar las características avanzadas de DMP del chip. Aunque hay mucho que leer, necesitarás una larga noche para asimilarlo todo.
-
En realidad, he tenido la mayoría de mis avances después de buscar en google para otras discusiones de proyectos basadas en MPU (quadcopters, teléfonos celulares, controles remotos de wii, etc.). Mucha gente usa este chip, pero por diferentes razones, muchos usuarios del foro no se dan cuenta de los problemas y soluciones de los demás.
-
Si busca en Google, no limite las búsquedas a "MPU6050": hay otras unidades, como las 6500 y 9150, que comparten controladores. Y no se sorprenda si llega a la página 10 de los resultados de Google: siga paginando :)
Así que ahora tienes algunos consejos, aquí está la historia completa:
El código ejecutado por el coprocesador DMP en el MPU6050 es propietario y no se almacena en el chip; la versión compilada se incluye con cada versión de los archivos Invensense MPU c / c ++ como una matriz de ~ 3kB de bytes en bruto. Para empeorar las cosas, los registros y las ubicaciones de memoria para habilitar o alterar la funcionalidad DMP pueden ser diferentes para cada versión del firmware DMP.
Incluso los mapas de registro básicos y la documentación de la API para las funciones que se enumeran en las especificaciones del producto, como la detección de gestos y la fusión avanzada de sensores, son difíciles de encontrar. Algunas versiones de los documentos de Invensense incluyen secciones que otras revisiones no, aludiendo a la funcionalidad que no está documentada en ningún otro lugar. Es casi como si hubiera una versión "solo para uso interno" de su documentación, pero los miembros del personal de documentación ocasionalmente incluyen algo confidencial en una publicación pública por accidente.
Mi apuesta es que, a menos que alguien realice una ingeniería inversa en un binario, solo Invensense sabrá exactamente cómo se mueven los engranajes allí.
A pesar de todo esto, hay muchas promesas en este pequeño chip: algunas de las constantes de los archivos .h implican la existencia de una funcionalidad que es muy intrigante, como Swing_xxx , Flick_xxx y muchos otros. Recientemente pude obtener datos de detección de Tap y Orientación en FIFO después de portar un controlador de una versión aleatoria del sistema operativo Android. Desafortunadamente, encontré el archivo de origen después de hacer clic en más de 20 páginas de resultados de Google, y estaba tan enterrado en Chrome: "nuevas pestañas" en el momento en que ni siquiera guardé un enlace ... ¡lo siento! Ahora que estoy obteniendo datos, puedo ver que Tap y Orientación solo representan 8 bits del aumento de 4 bytes en el tamaño del paquete FIFO cuando "Enviar datos de gestos FIFO" está habilitado. Definitivamente hay más que aprender.
¡Buena suerte, avísanos si progresas!
-Matt