Estoy utilizando un acelerómetro de triple eje ADXL345 a través de una placa de microestructura FEZmini1.3 .Net en un proyecto con el que estoy ocupado.
El ADXL345 proporciona datos en el complemento 2 de 13 bits.
¿Cómo decodificar esto en decimal?
He implementado un BitConverter ( según lo proporcionado por Ravenheart (Toshko) ) en el proyecto, pero seguramente esto supone un total de 16 bits (o dos bytes) de datos, donde el bit más significativo siempre será el bit de signo?
En un número de 13 bits, el 16 ° bit siempre será 0, ¿no?
------------Byte 1------------ ------------Byte 2-----------
bit#: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
16 bit: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 = -32767
13 bit: 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 = -4095
pero si el número de 13 bits se está convirtiendo mediante un algoritmo que supone 16 bits completos, el número será igual a 8192.
¿Mi entendimiento es correcto? En caso afirmativo, ¿cómo hago para convertir un número de complemento de 13 bits 2 en decimal?
Editar (después de obtener ayuda de mis amigos a continuación): Así que gracias a las respuestas, ahora sé que mis suposiciones del cumplido de 2 estaban equivocadas, así que para mayor claridad cuando alguien lee este hilo, quería corregir mi declaración inicial:
------------Byte 1------------ ------------Byte 2-----------
bit#: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
16 bit: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 = -1
13 bit: 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 = -1
En 2's Compliment, los números cuentan hasta la mitad del camino y luego comienzan a contar, así que:
00000000 = 0
00000001 = 2
00000010 = 3
00000011 = 4
.
.
.
01111110 = 126
01111111 = 127
10000000 = -128
10000001 = -127
10000010 = -126
.
.
.
11111100 = -4
11111101 = -3
11111110 = -2
11111111 = -1