Leider nein,
im wert_h steht bei Dir immer 0 und zwar schiebst Du wert 8 Stellen nach links, dabei rutschen von rechts 8 Nullen rein und mit dem Cast schneidest Du die oberen 8 Stellen ab.
Was bleibt über ? Null...
Code:
wert_h = (int8_t)(wert>>8);
wäre richtig gewesen.
zusammensetzen ist auch einfach
Code:
int16_t wert= (wert_h<<8)|wert_l;
Was hälst Du von einer Union:
Code:
typedef union {
int16_t wert;
int8_t wert_bytes[2];
} eine_zahl;
zugriff:
Code:
eine_zahl test;
test.wert=1234;
i2c_send (test.wert_bytes[0]); // sendet die unteren 8 Bytes
i2c_send (test.wert_bytes[1]); //sendet die oberen 8 Bytes
Auf der andern Seite machst Du das genauso, die erste Zahl in bytes[0] und die zweite in bytes[1] packen, mit test.wert kannst Du auf Deine 16 Bit Zahl zugreifen.
Gruß Sebastian
Lesezeichen