Bonjour bonjour ,
Me voilà parmi vous pour mon premier post. Je me suis inscrit en voyant le sérieux de vos réponses et j'espère que vous saurez encore m'épater ^^.
Je suis actuellement en stage, et dans le cadre de mon stage, je dois développer une application en langage C sur un PIC18F87J11 (3,3V).
J'utilise un module SPI distant accéléromètre, gyroscope tri-axe où je vais récupérer les valeurs des différents capteurs régulièrement puis je les range dans un premier tableau d'octets. Seulement, ces valeurs étant sur 16 bits au complément à deux, je me dois de créer une fonction qui regroupe les octets deux à deux (ils sont rangés dans l'ordre) puis de réaliser un formatage en complément à deux tout en sachant que même si le module m'envoie 16 bits, seuls 14 bits sont significatifs de la valeur mesurée. Les deux premiers (MSB) font état des erreurs. Et là, je sèche. Étant nouveau sur les architectures PIC, je n'ai pas encore saisi toutes ces subtilités.
Voici mon code :
Et là c'est le drame, j'obtiens des valeurs incohérentes ! Je me demande si ma fonction ne reconvertit pas les variables mot1 et mot2 au format int avant de réaliser la mise dans le tableau et fausse complètement la valeur ? Comme vous pouvez le voir dans ce code, pour le moment, la conversion n'est pas réalisée (procédant par étape et celle-ci ne fonctionnant pas...).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 short int conv_triaxe (unsigned char* valeur) { int i=0; int conv[6] = {0, 0, 0, 0, 0, 0}; int k=0; char mot1=0; char mot2=0; while (i<=5) { mot1=valeur[k]; mot2=valeur[k+1]; conv[i]=(mot1<<=8) | mot2; k=k+2; i++; } return *conv; }
Quelqu'un saurait-t-il pourquoi ? Aurait-il une idée ?
Merci d'avance.
Partager