Pregunta sobre cómo se procesan los datos enviados desde el tmp102

0

He conectado un sensor TMP102 (en una placa de ruptura) de sparkfun. El cableado tenía sentido, el cableado i2c estándar. Aquí está la hoja de datos de TMP102 . Usé esta guía como una guía para el programa que escribí. El programa que se ejecuta en el fotón de partículas (el tablero del microcontrolador que estoy usando), tiene una línea de código confusa. La línea de código a la que me refiero hace esto: los bits de la MSB que recibe el microcontrolador (el byte más significativo, no el bit) se desplazan a la izquierda, 8 veces y luego se envían con el LSB (byte menos significativo) . Los bits del resultado se desplazan a la derecha 4 veces. Por último, todo se multiplica por 0.0625. Esta línea de código resume lo que acabo de decir y se puede ver en la guía que se encuentra arriba:

int temp = (((MSB < < 8) | LSB) > > 4) * 0.0625;

Tengo todo para trabajar (mide la temperatura), pero no sé why funciona. Mi pregunta es: ¿por qué se requiere la línea de código anterior? ¿Por qué estas operaciones necesitan ser completadas? Y como una pregunta complementaria, si los bits en un byte se desplazan a la izquierda 8 veces, ¿no resultaría en un valor de 0000 0000? Si mi pregunta es un poco vaga, por favor dígame.

    
pregunta zack1544

1 respuesta

2

El (MSB < < 8) | Se entiende por LSB): desea concatinar los dos bytes juntos. Aparentemente, en LSB solo los [7: 4] son datos válidos. Por lo tanto, usted > > 4 para deshacerse de los bits [3: 0]. Ahora, la multiplicación de 0.0625 no está clara, pero es lo mismo que dividir por 16, o realizar otro desplazamiento de > > 4 bits. El resultado final en temp es solo para MSB.

MSB: 1010 1010
LSB: 0001 XXXX

MSB<<8     1010 1010 0000 0000  
LSB                  0001 XXXX

when ORed
           1010 1010 0001 XXXX

when shifted >>4
           0000 1010 1010 0001

when multiplied *0.0625
           0000 0000 1010 1010=MSB
    
respondido por el Nazar

Lea otras preguntas en las etiquetas