LTC2485 Formato de datos I2C

1

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

La hoja de datos dice que devuelve 4 bytes (32 bits enteros), 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 de rango superior o inferior. 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é "quater" del rango completo está la señal.

Forme 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 dice más adelante:

  

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

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

  

La función de estos dos bits se resume en la Tabla 1. Los siguientes 24   los bits contienen los resultados de conversión en formato de complemento binario de dos.   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 más arriba).

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 recibo (llamémoslos bytes 0 a 3 por orden de recuperación), ¿cómo obtengo el voltaje medido por el ADC? ¿Cuál es la función de "Los seis bits restantes son sub LSB por debajo del nivel de 24 bits"?

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

    
pregunta PeterG

3 respuestas

1

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 de 2 es de bits 30 a 0. Los 6 bits menos significativos no forman parte de los 25 bits (tipo de bits de basura adicionales que probablemente tienen 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 \ cdot V_ {REF} \ lt V_ {IN} \ lt 0.5 \ cdot V_ {REF} \ $). Si el bit 30/31 es el mismo y los bits del resultado son los que se muestran en la tabla 3 (todos los ceros con ambos altos o todos los 1 con ambos bajos), usted sabe que la entrada es mayor o menor que el voltaje de referencia (condición de rango excesivo).

A menudo, eso indicaría un sensor roto o un problema similar, por lo que querría tratarlo adecuadamente.

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

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

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

    
respondido por el Spehro Pefhany
1

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.

Supongamos 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- , bit31 estará BAJO.

En lo que respecta 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 condition , por lo que solo necesita verificar estas dos posibilidades, luego cuidar los bits 29 a 6 que son los 24 bits interesantes de su resultado.

Debo admitir que la parte The remaining six bits are Sub LSBs below the 24-bit level Es un poco oscuro. Probablemente es un ruido sin sentido?

    
respondido por el FredP
0

Para responder a su pregunta sobre qué bits son cuáles, creo que la hoja de datos es bastante clara. Siempre que realice un ciclo de lectura I 2 C, lea 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 ACK es o no el byte de dirección.

    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas