Formato de datos LTC2485 I2C

Estoy tratando de entender el formato de datos I2C de un ACD de 24 bits (LTC2485).

La hoja de datos dice que devuelve 4 bytes (entero de 32 bits), pero no está claro dónde se encuentran los 24 bits que busco.

Esto es lo que no entiendo:

El papel de los bits 31 y 30

Los dos bits más significativos (30, 31) se utilizan para indicar condiciones por encima o por debajo del rango. También se utilizan para indicar en qué "cuarto" del rango completo se encuentra la señal.

La documentación dice: Si se establece el bit 31, entonces la señal está entre 0V y +Vref; de lo contrario, la señal está entre -Vref y 0V.

Entiendo esto como: si la señal está entre 0V y +Vref, el código está entre 2^23 y 2^24 y si la señal está entre -Vref y 0V, el código está entre 0 y 2^23.

Se puede usar un razonamiento similar para el bit 30 y Vref/2. Así es como funciona el número binario. Ambos bits se pueden usar para indicar en qué "cuarto" del rango completo se encuentra la señal.

A partir de esto, supongo que el bit 31 es el bit 23 de la señal, el bit 30 corresponde al bit 22, y así sucesivamente. Por lo tanto, los tres primeros bytes deberían ser mi código de 24 bits.

Sin embargo, la documentación más adelante dice:

El segundo bit es el bit más significativo (MSB) del resultado.

Lo que indicaría que el resultado se desplaza un bit. Pero más adelante:

La función de estos dos bits se resume en la Tabla 1. Los siguientes 24 bits contienen los resultados de la conversión en formato de complemento a dos binario. Los seis bits restantes son Sub LSB por debajo del nivel de 24 bits.

Lo que indicaría que el resultado se desplaza dos bits y que los bits 31 y 30 son redundantes (consulte mi explicación anterior).

Y por último, el código de ejemplo proporcionado utiliza... 32 bits en lugar de 24.

signed int32 x;
// Reading X
x ^= 0x80000000;
voltage = (float) x;
voltage = voltage * 5.0 / 2147483648.0;// Multiply by Vref, divide by 2^31

Como resultado, me siento perdido. Dados los 4 bytes que obtengo (llamémoslos bytes 0 a 3 por orden de recuperación), ¿cómo obtengo el voltaje medido por el ADC? ¿Cuál es el papel de "Los seis bits restantes son Sub LSB por debajo del nivel de 24 bits"?

Gracias por leerme. La documentación de la pieza está disponible aquí . Las explicaciones sobre el formato de datos I2C están en la página 15.

Respuestas (3)

LTC2485 es un convertidor de "signo más de 24 bits". Entonces, oficialmente, hay 25 bits en la representación del complemento a 2.

El número de complemento a 2 son los bits 30 a 0. Los 6 bits menos significativos no forman parte de los 25 bits (una especie de bits adicionales de basura que probablemente tengan poco significado en la mayoría de las situaciones).

El bit 31 es más o menos ** el complemento del bit 30 en condiciones normales cuando la entrada está dentro del rango de operación normal** ( 0.5 V R mi F < V I norte < 0.5 V R mi F ). Si los bits 30/31 son iguales y los bits de resultado son los que se muestran en la tabla 3 (todos ceros con ambos altos o todos 1 con ambos bajos), sabrá que la entrada es mayor o menor que el voltaje de referencia (condición de sobrerrango).

A menudo, eso indicaría un sensor roto o un problema similar, por lo que querrá tratarlo de manera adecuada.

** excepto por una posible diferencia justo en la entrada cero.

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Por lo tanto, su resultado con signo de 25 bits se puede obtener desplazando a la izquierda el número de 32 bits en un bit y enmascarando los 7 bits menos significativos (ahora).

Los 6 bits menos significativos serán prácticamente todo ruido, pero si está haciendo cálculos en doble precisión o punto fijo sesgado de 64 bits, probablemente no cueste nada extra usarlos (puede considerar el resultado como un número con signo de 31 bits una vez que lo desplazaste a la izquierda). ENOB (Número equivalente de bits) de la mayoría de los ADC no es mejor que alrededor de 20 bits y eso en condiciones ideales.

Gracias por su respuesta. Entonces, ¿24 bits + signo significa que tengo 24 bits entre 0V y +Vref, y 24 bits entre -Vref y 0V? Entonces, ¿cuál es el papel del LSB de 6 bits? ¿Por qué usar los bits 30 a 0? ¿Por qué no dividir por 2^24 en lugar de 2^31? ¿El complemento a dos de un número de 24 bits debería ser un número de 24 bits?
Espero haber respondido completamente en mi edición. Es un número de 25 bits, no de 24 bits, en " representación en complemento a 2 ". Donde +FS = 0b0111111111111111111111111, y -FS = 0b10000000000000000000000000.
Muy interesante. Significa que puede elegir entre el complemento a dos y el binario compensado. No estoy seguro de cuán útil es eso, pero los bits están ahí, por lo que incluyeron la función

El bit 31 es un bit de signo = aquí es ALTO si el voltaje medido es positivo (>= 0V), de lo contrario, es BAJO. No es parte del valor real. Por lo tanto x ^= 0x80000000;, borra este bit del valor de lectura.

Digamos que conecta una batería de 1,5 V en la entrada de su sensor, con + conectado al pin Vin+ , este bit será ALTO. Luego cambie los lados de la batería: conecte el polo + al pin Vin- , el bit 31 estará BAJO.

Con respecto al bit 30, la parte importante es If both bits are LOW, the input voltage is below –FS and the following 24 bits are set to HIGH to indicate an underrange conditionque solo necesita verificar estas dos posibilidades, luego busque los bits 29 a 6 que son los 24 bits interesantes de su resultado.

Debo admitir que la The remaining six bits are Sub LSBs below the 24-bit levelparte es un poco oscura. ¿Probablemente es un ruido sin sentido?

Gracias por su respuesta. Bueno, yo también ando perdido con el LSB. Parece que usan 31 bits en el código de ejemplo... Y cuando leen datos del chip, el LSB contiene valores.
Como @Spehro Pefhany parece confirmar, es ruido, no me preocuparía por eso. No soy fluido en I2C, pero si usa bytes, y el chip usa un total de 26 bits (24 bits para datos + esos 2 bits adicionales para señal y MSB) tenían que poner estos 6 bits como relleno de todos modos.
Un montón de Δ Σ Los convertidores tienen la basura debajo de los bits de salida LSB provistos. Son casi sin sentido. Tal vez sea útil para una semilla generadora de números aleatorios o algo así.

Para abordar su pregunta sobre qué bits son cuáles, creo que la hoja de datos es bastante clara. Cada vez que realiza un ciclo de lectura I 2 C, lee 32 bits de datos (4 bytes), y esos bits son los bits que se enumeran de izquierda a derecha en la Tabla 3.

La forma en que sabe que una conversión está lista es si el dispositivo reconoce o no el byte de dirección.