Werte eines BMA020 (vorzeichenlos) ausgeben (vorzeichenbehaftet)

OP #2480296
Lesenswert?

Hi,
mein Versuche Daten aus einem BMA020 auszulesen ist nun geglückt.

Erst über den I2C den Offset senden ab dem gelesen werden soll:
Adresse: 0x70
Daten:   0x02

Dann die 6 Byte für X, Y, Z lesen.
Adresse: 0x71
Daten:   0x06 (6 Bytes empfangen)

So nun habe ich die Daten in
1
uint8_t write_buf[]
 von
1
write_buf[1]
 bis
1
write_buf[6]
 stehen.
Die Daten sind wie folgt codiert:
1
{LSB_X,MSB_X,LSB_Y,MSB_Y,LSB_Z,MSB_Z}

Es handelt sich um 10 Bit pro Achse.
Am Beispiel von X:

In
1
write_buf[1]
 sind Bit.7 und Bit.6 das 1. und 0. Bit von dem 10 Bitwert von X. In
1
write_buf[2]
 befinden sich die Bits 2 bis 9. Die Werte sind im Zweierkomplement 
codiert.

Mein Versuch die Werte auf einem Terminal (RS232) auszugeben liefert nur 
positive Werte. Hier lasse ich die unteren 2 Bit weg um es einfach zu 
halten.
1
put_string(itoa((int)write_buf[2], msg, 10));

Was mache ich hier falsch?

Tschüss muebau
OP #2480555
Lesenswert?

Hi,
niemand?

Ich habe auch schon mit den vollen 10 Bit gearbeitet. Hierbei habe ich 
geprueft ob das Bit an der 10. Stelle gesetzt ist. Dies sollte ja 
anzeigen ob die Zahl negativ ist.
Ist dieses Bit gesetzt habe ich es geloescht und dann das Bit an der 16. 
Stelle gesetzt. Hiermit korrigiere ich den Fehler der entstehen wuerde 
wenn das Vorzeichenbit an der 10. Stelle bliebe.

Bevor ich mir allerdings Gedanken um 10 Bitwerte mache, sollte das mit 
den 8 Bitwerten klappen.

Tschuess muebau

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren