Bonjour,

J'ai un sushi ! je pilote un gyroscope L3GD20H. Je récupère les valeurs de l'axe X dans 2 registres, H(msb) 8bits et L(lsb) 8bits. Dans mon code je fais un décalage de 8 pour les avoir dans la même variable OUT_X. A la fin j'envoie sur le port com du PC. Voici le programme en question:

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
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
 
#include "mbed.h"
 
SPI spi(D11, D12, D13);
DigitalOut cs(D10);
 
Serial pc(USBTX, USBRX);
 
Timer t_angle;
 
int STATUS_GYRO = 0;
int OUT_X_H = 0;
int OUT_X_L = 0;
int OUT_X = 0;
int ANGLE_X = 0;
int tn;
int X[100];
int zero = 0;
int b = 0;
int axe_x = 0;
 
void spi_write(int registre, int data)
{
    cs = 0;
    spi.write(registre);
    spi.write(data);
    cs=1;
}
 
int spi_read(int registre)
{
    registre = registre + 0x80;
    cs = 0;
    spi.write(registre);
    int buffer = spi.write(0x00);
    cs=1;
    return buffer;
}
 
int main()
{
    cs=1;
    spi.format(8,3);
    spi.frequency(900000);
    wait(1);
    spi_write(0x20, 0x0F);
    wait(1);
    int whoami = spi_read(0x0F);
    pc.printf("Who Am I = 0x%X\r\n", whoami);
    wait(0.1);
    spi_write(0x23, 0x80);
    while(1) {
        t_angle.start();
        STATUS_GYRO = spi_read(0x27);
        //pc.printf("STATUS = %-d \r\n", STATUS_GYRO);
 
        for (b=0; b<=9; b++) {
            OUT_X_L = spi_read(0x28);
            OUT_X_H = spi_read(0x29);
            OUT_X = (OUT_X_H << 8) + OUT_X_L;
            axe_x = axe_x + OUT_X;
        }
 
        axe_x = axe_x/10;
 
        tn = t_angle.read_ms();
        pc.printf("X = %-i, T = %-i \r\n", axe_x, tn);
        t_angle.stop();
        t_angle.reset();
 
    }
}
Cependant dans PuTTY il m'affiche X = 72000 ( c'est le moment où le gyro est immobile). le problème c'est que ce chiffre est sur 17 bits ! Donc je ne voie pas ce qui cloche !
Pour info, le gyro envoie la valeur des axe directement en complément à 2.

donc pour moi 72000 (dec) => 11940 (hex) => 10001100101000000 (bin) donc le msb 1 est l'indicateur du - .

des idées? merci !
NI3