Estoy leyendo los datos del acelerómetro del eje x de un IC a través del bus I2C usando I2C-Tools (específicamente i2cget
) en Linux. Aquí está el código que está leyendo estos valores:
$OUT_X_L_A = shell_exec( 'i2cget -y 1 0x19 0x28' ) ... eg. returns 0x20
$OUT_X_H_A = shell_exec( 'i2cget -y 1 0x19 0x29' ) ... eg. returns 0xfc
La documentación de este acelerómetro indica que estos valores (0x20 y 0xfc) son Expresado en cumplido de 2. Este acelerómetro tiene una resolución de 16 bits.
Desde otra aplicación que estoy ejecutando que está leyendo estos datos en C, creo que estos valores, cuando se convierten a un valor decimal, deben ser iguales a ~ 65,475 (esencialmente ninguna aceleración ya que el dispositivo está sobre mi escritorio). Algunos otros documentos que he encontrado sugieren que $ OUT_X_L_A es el registro menos significativo y $ OUT_X_H_A es el registro más significativo.
He investigado un poco, pero generalmente no estoy familiarizado con Complemento de Dos, LSB y MSB. ¿Cómo calculo el valor decimal completo (resolución de 16 bits) a partir de los dos valores hexadecimales devueltos por el dispositivo? ¿Cómo se supone que debo deducir de la documentación qué registro es el más significativo?