Ich benutze ein Synapse Wireless-Modul, das eine ATMEL ATmega128 hat. Ich habe einen 3 Achsen Beschleunigungsmesser ADXL345 damit verbunden und ich kommuniziere mit ihm über I2C. Das Synapse-Modul verwendet eine Untergruppe von Python als Skriptsprache.ADXL345 Accelerometer Datenausgabe Konvertierung
Wenn ich die XYZ-Daten lese, bekomme ich ein Array von 6 Bytes zurück. EC FF EF FF 01 01
Die Ausgangsdaten sind zwei Komplemente mit DATAx0 als niedrigstwertiges Byte und DATAx1 als höchstwertiges Byte. Im obigen Beispiel ist EC FF der Ausgang für die x-Achse.
Ich habe Probleme damit, dies in G-Force umzuwandeln. Das Datenblatt sagt im Vollauflösungsmodus (in dem ich bin), dass die Ausgabeauflösung mit dem g Bereich steigt, der durch die Entfernungsbits eingestellt wird, um einen 4 mg/LSB Skalierungsfaktor beizubehalten.
Ich habe versucht, die folgenden:
x0 = ord(data[0])
x1 = ord(data[1])
raw = x0+(256*x1)
aber der Wert der rohen keinen Sinn machen. Wie konvertiere ich diese zwei Bytes in eine vorzeichenbehaftete Ganzzahl?
Weitere Informationen Als ich den Anruf die ADXL345 zu lesen:
data = readAdxls(6)
es die Folge von Bytes zurück zurück gelesen von dem externen I2C-Gerät.
Xlsb = data[0] # EC - 236
Xmsb = data[1] # FF - 255
Ylsb = data[2] # EF - 239
Ymsb = data[3] # FF - 255
Zlsb = data[4] # 14 - 20
Zmsb = data[5] # 01 - 1
So XLSB ist das am wenigsten signifikante Byte und XMSB ist das bedeutendste Byte. Dies sind ganze Zahlen
Ich denke, ich verstehe einfach nicht die Zweier-Komplement und wie diese 2 Integer/Bytes zu einer vorzeichenbehafteten Ganzzahl kombinieren.
Wie vollständig ist diese Teilmenge? Kannst du das 'struct' Modul benutzen? – MaxNoe
Nein, das Strukturmodul ist nicht Teil der Sprache. FWIW, es gibt auch keine Unterstützung für Floats. Es wurde entwickelt, um extrem leicht zu sein. – cce1911
Es tut mir leid, aber wenn die zwei Byte EG und FF sind, wobei die zweite die signifikanteste ist, ist die richtige Reihenfolge FF EC. Zum Konvertieren benötigen Sie also nur: (die meisten << 8 | mindestens) Dies wird Ihnen die Rohdaten geben, dann multiplizieren Sie es für die gewählte Sensorauflösung. Wenn Sie für die maximale Auflösung gehen, multiplizieren Sie einfach für 0,0039 – Lornioiz