Salut, je souhaite utiliser un MMA8451 dans un projet avec une carte Z-uno. (specs)
Il y a une librairie avec mais celle ci ne marche pas correctement avec cette carte. Les valeurs récupérées ne sont pas bonne... Sur un mega ou un nano pas de soucis.
La partie du code posant problème est la suivante:
Wire.requestFrom(_i2caddr, 6);
x = Wire.read(); x <<= 8; x |= Wire.read(); x >>= 2;
y = Wire.read(); y <<= 8; y |= Wire.read(); y >>= 2;
z = Wire.read(); z <<= 8; z |= Wire.read(); z >>= 2;
La conversion bit à bit ne rends pas les valeurs correctement.
Comme c'est un truc assez hard à comprendre, j'ai eu du mal a analyser ce morceau de code. Mais je ne comprends pas pourquoi ça ne marche pas.
Quel microconrolleur tourne sur cette carte Z-Uno ? (8 , 16, 32 bits ? variété de microcontrolleur ARM ?)
Comment sont déclarées les variables x, y et z ? (-> ne pas donner un 'bout de code')
Quel est le résultat d conversion attendu et quel est le résultat obtenu ?
D'après la doc du module que j'ai trouvée en suivant le lien donné ce serait ça:
Key Hardware Features
Programming in C/C++ language:
Optimized 8051 CPU Core
30 kB (6 kB with S2) Flash
2 kB (2kB with S2) RAM
Il y a ça aussi
Z-Uno Module compiler (called Z-Uno uCXX) accepts C and slightly limited C++ programming language. All peripherals are accessible via special functions or libraries in Arduino style. Some Arduino libraries are compatible with Z-Uno, others might require porting. User code should be compiled with special Z-Uno Core Libraries.
je ne pense pas, c'est envoyé par l'accéléromètre en standard dans cet ordre.
il faudrait tout le code et comme le compilateur est SDCC, on peut s'attendre à quelques différences par rapport à GCC. La bibliothèque Wire peut aussi être bugguée...
Bonjour a tous. En voulant vous répondre avec le code du github de la librairie, j'ai remarqué qu'elle avait était mise a jour vers une nouvelle version et celle ci n'utilise plus la librairie Wire mais BusIO comme décrit dans la realease 1.2.0
Je vais devoir tester pour savoir si mon problème est résolue grâce aux updates mais je doute.
Pour l'histoire de la déclaration de X,Y,Z c'est dans le fichier .h,
Comme la dit fdufnews, la compatibilité n'est pas garantie, j'ai déjà porté deux trois librairies dont les modifs étaient mineurs mais la avec les bit à bit, je cale.
Toujours pour fdufnews, comment vérifier le problème mentionné ?
J-M-L, de quoi avait vous besoin comme code ? Pour la librairie Wire, c'est effectivement une librairie Wire modifiée si je ne me trompe pas, en tout cas elle fait partie des fichiers du core de la librairie de la carte (Z-Uno-Core/Wire.cpp at master · Z-Wave-Me/Z-Uno-Core · GitHub)
Bon j'ai essayé avec la nouvelle lib et en fait rien ne change, le fonctionnement reste le même au final.
Pour fdufnews, comment avoir la réponse a votre interrogation ? Car quand je laisse la librairie faire, j'arrive a obtenir un valeur sur y qui semble cohérente(et suit le mouvement, avec passage en négatif etc...) alors que les autres restent bloquées ou bouge peut autour d'une seul valeur... Ca marche mais pas complétement en gros...