Gast
#3234056
Hallo ich muss für ein Projekt einen Beschleunigungssensor Ansteuern. Dies geschieht über I2C. Die Auswertung wird mit einem PIC der 16F-Serie abgewickelt. Der Beschleunigungssensor ist der ADXL350 (Datasheet im Anhang). Der Beschleunigungssensor wird als Neigungsmesser benutzt. Er wird also auf einen Bereich von 1G (Erdbeschleunigung) eingestellt. Nach der Verarbeitung möchte ich in einer Variable ein Wert in Stufenform (z.B 0..40), also z.B 40 Stufen, wo "20" die Mitte darstellt, "0" -90°, und "40" 90°. Es müssen auch nicht so feine Abstufungen sein, das Gerät ist ein Spiel, in dem ein Ball balanciert wird, es wird also nicht zum Messen o.ä. benutzt. Ich bin mir jetzt nicht ganz sicher, wie das Ausgangssignal des Sensors aussieht, und wie es zu verarbeiten ist. Fangen wir an beim 0g Wert (Winkel 0°). Stimmt es, dass dies die Hälfte des möglichen Maximumwertes ist (bei 10-Bit: 1024, also 512)? Und dann der Wert einfach Proportional bei minus nach unten und bei positiver Neigung nach oben variiert? Und was mich auch noch verwirrt, ist, dass der Ausgang als Zweierkomplement ausgegeben wird. Ich meine, wenn der Ausgangswert zwischen 0 und 1023 sein sollte, dann hat man ja keine negativen Werte, braucht also kein 2er Komplement. Auf jeden Fall ist der 10-Bit Wert auf 2 Register verteilt. Das untere Byte ist komplett in einem Register. Die oberen 2 Bits sind im 2. Register rechtsbündig (einstellbar). (Bei der Übertragung mit I2C bin ich davon ausgegangen, dass der Sensor autoincrement hat, also ins nächsthöhere Register springt (in dem Fall das Register mit den 2 MSB) nach einem empfangenen Byte mit Multiple Byte Read.) Zum zusammenfügen habe ich zuerst die höherwertigen 2 Bits in einen signed int kopiert, anschliessend um 8 Stellen nach links geschoben. Dann das niederwertige Byte ODER Verknüpft. Somit sollte der 10-Bit Wert komplett sein. Stimmt das soweit? Das Zweierkomplement hat ja das Vorzeichen als erstes Bit. Deshalb müsste also bei einem signed int das Vorzeichen auch an 16. Stelle sein meines Wissens nach. Also habe ich im Code mit Bitmanipulationen die 10. Stelle des Ausgabewerts auf die letzte Stelle verlegt. Meiner Vorstellung nach sollte jetzt der Wert fertig verarbeitet sein. (Bis auf die Abstufung). Was denkt ihr? Hoffe es ist einigermassen verständlich und jemand kann mir helfen. Vielen Dank.