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:
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 !
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(); } }
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
Partager