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.
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** ( ). 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.
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.
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 condition
que 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 level
parte es un poco oscura. ¿Probablemente es un ruido sin sentido?
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.
PedroG
Spehro Pefhany
scott seidman