Go Down

Topic: [ duda ] mpu9250 lectura de Reg acc/gyro duda (Read 991 times) previous topic - next topic

giowidow

Hola amigos del foro tengo una duda sobre como  se lee los registros del acc y gyro del mpu 9250 puesto que mirando el datasheet la informacion me la encapsula de la siguiente foma:

x HIGH (un byte) dir 0x3B
X LOW (un byte) dir 0x3C

Y HIGH (un byte) dir 0x3D
Y LOW (un byte) dir 0x3E

Z HIGH (un byte) dir 0x3F

Z LOW (un byte) dir 0x40

Por lo que yo entenderia toca leer cada registro aparte  y unirnos en un entero de 16 bits por eje para obtener un dato RAW valido pero en cambio al ver las diferentes bibliotecas veo que la mayoria hacen esto:

x HIGH (6 byte) dir 0x3B

esto quiere decir que solo al primer registro le piden lso 6 bytes y de alli hacen un arreglo parecido a esto:

x = xHIGH[0]<<8 | xHIGH[1];
y = xHIGH[2]<<8 | xHIGH[3];
z = xHIGH[4]<<8 | xHIGH[5];

y con esto obtienen los ejes,y leyendo el data no e obtenido informacion de porque y si es valido obtenes los datos raw de x, y,z de un mismo registro cuando en el data a cada uno lo trata de manera diferente,



alguien me podria explicar, o dar luz de porque  obtienen los datos de esta forma??

muchas gracias de antemano

GO_zalo

x HIGH (6 byte) dir 0x3B

esto quiere decir que solo al primer registro le piden lso 6 bytes y de alli hacen un arreglo parecido a esto:

x = xHIGH[0]<<8 | xHIGH[1];
y = xHIGH[2]<<8 | xHIGH[3];
z = xHIGH[4]<<8 | xHIGH[5];

y con esto obtienen los ejes,y leyendo el data no e obtenido información de porque y si es valido obtenes
Parece correcto, son seis registros (6 byte) consecutivos, los lee y los guarda en xHIGH (el nombre es lo de menos aunque igual es lo que te confunde, contiene todos los datos  x y z, HIGH y LOW de cada uno)

Luego para montar x coge los dos primeros, desplaza el HIGH (entran 0 por la derecha es decir de XXXXXXXX pasa a XXXXXXXX00000000) y luego con la instrucción OR (|) añade la parte baja (se aprovecha de que cualquier cosa OR 0 siempre es igual a cualquier cosa (XXXXXXXX00000000 OR 00000000YYYYYYYY= XXXXXXXXYYYYYYY Hay que tener en cuenta que a la izquierda del byte también hay siempre ceros)

giowidow

Parece correcto, son seis registros (6 byte) consecutivos, los lee y los guarda en xHIGH (el nombre es lo de menos aunque igual es lo que te confunde, contiene todos los datos  x y z, HIGH y LOW de cada uno)

Luego para montar x coge los dos primeros, desplaza el HIGH (entran 0 por la derecha es decir de XXXXXXXX pasa a XXXXXXXX00000000) y luego con la instrucción OR (|) añade la parte baja (se aprovecha de que cualquier cosa OR 0 siempre es igual a cualquier cosa (XXXXXXXX00000000 OR 00000000YYYYYYYY= XXXXXXXXYYYYYYY Hay que tener en cuenta que a la izquierda del byte también hay siempre ceros)
gracias Go zalo lo que me tiene con duda es por lo que en el datasheet del fabricante los trata asi, y no encuentro referencia a la otra foram y eso es lo que me confunde

Go Up