Ich verwende einen ADXL345-Dreiachsen-Beschleunigungsmesser über eine FEZmini1.3 .Net Micro Framework-Karte in einem Projekt, mit dem ich beschäftigt bin.
Der ADXL345 liefert Daten im 13-Bit-2-Komplement.
Wie dekodiert man dies in Dezimalzahlen?
Ich habe einen BitConverter ( wie von Ravenheart (Toshko) bereitgestellt) in das Projekt implementiert, aber dies setzt sicherlich eine vollständige voraus Daten im Wert von 16 Bit (oder zwei Bytes), wobei das höchstwertige Bit immer das Vorzeichenbit ist?
In einer 13-Bit-Zahl ist das 16. Bit immer 0, nicht wahr?
------------ Byte 1 ------------ ------------ Byte 2-- --------- Bit #: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 016 Bit: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 = -3276713 Bit : 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 = -4095
aber wenn die 13-Bit-Nummer von einem Algorithmus konvertiert wird, der volle 16 Bit annimmt, ist die Nummer wird gleich 8192 sein.
Ist mein Verständnis korrekt? Wenn ja, wie gehe ich vor, um die Komplementzahl einer 13-Bit-2 in eine Dezimalzahl umzuwandeln?
Bearbeiten (nachdem ich unten Hilfe von meinen Freunden erhalten habe): Also dank der Antworten, die ich Jetzt wissen Sie, dass meine Annahmen über das Kompliment von 2 falsch waren. Aus Gründen der Klarheit wollte ich meine ursprüngliche Aussage korrigieren, wenn jemand diesen Thread liest:
------------ Byte 1 ------------ ------------ Byte 2 ----------- Bit #: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 016 Bit: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 = -113 Bit: 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 = -1
In 2's Compliment zählen die Zahlen bis zur Hälfte und beginnen dann mit dem Countdown.
00000000 = 000000001 = 200000010 = 300000011 = 4 .. .01111110 = 12601111111 = 12710000000 = -12810000001 = -12710000010 = -126 ... 11111100 = -411111101 = -311111110 = -211111111 = -1