Forum: Mikrocontroller und Digitale Elektronik Zwei 8b zu einer 16Bit Zahl zusammensetzen


von Sven Müller (Gast)


Lesenswert?

Hallo,

Ich bekomme von einem I2C AD Wandler zwei 8 Bit worte zurück. wie packe
ich die jetzt in eine Int Zahl? Ich will ja meine Spannung berechnen
und laut Datenblatt ist der min Code -32,768. das verstehe ich so dass
das 0V entspricht und 32,767 der Referenzspannung.

Ich habe es mit zahl = (upper<<8) | lower; probiert, aber irgendwie
kommt das nicht hin..

Was mache ich falsch?

Danke schonmal.

von leo9 (Gast)


Lesenswert?

als welcher type sind zahl, upper und lower definiert.
Wenn upper nur ein 8-Bit Typ ist kommt beim shift immer 0 heraus.

grüsse leo9

von Dieter B (Gast)


Lesenswert?

Hallo

volatile   unsigned char  wert_1;
volatile   unsigned char  wert_2;
volatile   unsigned int   wert;

           wert_1 = 0x34;
           wert_2 = 0x23;

           wert = ( wert_1 << 8) + wert_2;  //wert = 0x3423

Das volatile nur zum Test.

MFG
Dieter

von Sven Müller (Gast)


Lesenswert?

Upper und lower sind als unsigned int definiert..

von OldBug (Gast)


Lesenswert?

Achte mal auf Dieters Posting!
Der Fehler wird bei Dir wohl im ODER liegen, da muss nämlich eine
addition erfolgen!

Gruß,
Patrick...

von Khani (Gast)


Lesenswert?

@ Old Bug
"Plus" oder "Oder" oder "exclusiv Oder" ist hier egal. Die
unteren acht bit solltren eh leer sein, daher ist hier ein ODER schon
angebracht.
@Dieter
Wenn das geht ist das Compiler-Zufall. Nicht jeder Compiler behandelt
unsigned char als 16bit-Werte.

besser so :
unsigned wert = ((unsigned int)MSB_byte << 8)|(unsigned int)LSB_Byte;

MfG, Khani

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.