Forum: Mikrocontroller und Digitale Elektronik Werte eines BMA020 (vorzeichenlos) ausgeben (vorzeichenbehaftet)


von Fridolin O. (muebau)


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

von Fridolin O. (muebau)


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

von Fridolin O. (muebau)


Lesenswert?

Hi,
meine Frage ist doch im Prinzip...

Warum wird ein Wert der in einem uint8_t steckt und ein 
Zweierkomplementwert darstellt nicht richtig ausgegeben wenn ich ihn 
caste (int)?

Habe ich die Frage zu dumm gestellt?

Tschuess muebau

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.