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
giowidow:
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)
GO_zalo:
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