Ja, dieser Code sollte korrekt sein.
Aber je nach Anwendung (z.B. sharp Infrarot Sensor) würde ich eher die
LSBs maskieren anstelle eine Schleife zu betretten.
Aber kommt halt immer drauf an, eine Wetterstation wird wohl kaum wegen
zu langsamer Sensorauswertung gegen die Wand fahren.
Du musst einfach Anhand deiner Daten zusehen inwiefern sich das rauschen
bemerkbar macht. Es kann gut sein das deine Schleife sich auch durch
1 | short Messwert = (MSB << 8) + (LSB & 0xF0);
|
ersetzen ließe ohne dass es einen Unterschied macht.
BTW.
Dein 16 Bit ADC gibt dir sein Ergebnis als Zweierkomplement zurück. Bist
du sicher, dass er auch negative Ergebnisse liefern kann? Ansonsten
würde ich eifach mal behaupten es ist ein 15 Bit ADC ;)
So oder so, signed Variable wirds schon packen. Aber wenn er 16 Bit
genauigkeit hat, also Vin = Vref -> Mess = 0xFFFF dann musst du
unbedingt unsigned verwenden.
Bei 15 Bit währe dein Ergebniss ohnehin 0x7FFF und damit in jedem Fall
unkritisch.