Estoy usando un acelerómetro ADXL343 en uno de mis diseños y obtengo lecturas extrañas del dispositivo. Solo para estar seguro, me gustaría confirmar que estoy formateando los datos correctamente. (Obtengo las lecturas a través de I2C y el identificador del chip se lee bien, por lo que el bus funciona correctamente)
Configuro el dispositivo como se explica en enlace
DATA_FORMAT = 0x0B // Full resolution and Range +-16g
POWER_CTL = 0x08 // Start to measure
INT_ENABLE = 0x80 // Enable data ready interrupt
Luego comienzo a sondear el dispositivo haciendo lecturas de ráfagas para obtener los 6 registros de datos (DATAX0, DATAX1, DATAY0, DATAY1, DATAZ0 y DATAZ1). Almaceno estos valores en una matriz de enteros de 16 bits sin signo (uint16_t datos []). Entonces, los datos [] = {DATAX0, DATAX1, DATAY0, DATAY1, DATAZ0, DATAZ1}
Como se explica en la nota de la aplicación, los datos están formateados como:
entonces,creoquetengoqueenmascararlapalabrade16bitscon0x8FFFdelasiguientemanera:
int16_taccelerationRawX=(int16_t)(((data[1]<<8)|data[0])&0x8FFF);
¿Estoescorrecto?Hagoestoporque,cuandoseemiteaintfirmado,laMCUsoloesperaquelaMSBseaelbitdesigno,sinoenmascaraD14,D13yD12,seinterpretaráncomobitsregulares.
Luego,paraobtenerlaaceleraciónfinal,multiplicoporelfactordeescala3.9:
int16_taccelerationX=accelerationRawX*3.9;
Estoyhaciendoalgomalporquelosresultadosqueobtengonotienenmuchosentido.EsperoobtenerunvalordeaceleracióndeZcercanoa1000mgcuandolatablaestéapoyadaenlatabla,peroobtengounresultadomuydiferente.
Además,noentiendoestatabladelamismaAN:
¿Cómoobtienenelvalor+1599?porque4095*3.9es15970.5..
Cualquierconsejooayudaseráapreciado!
Hojadedatosdelapieza: