Estoy leyendo con éxito el valor ADC externo usando ATmega32-A.
Unsigned int adc;
adc = AD7798_16(0x58, 0xFFFF); // read register
printf("ADC value is %d\r\n", adc);
Estoy obteniendo un valor de ADC como rango de números decimales entre "0 a 65535". Quiero convertirlo en voltaje analógico usando la siguiente fórmula.
Código = 2 N - 1 × [( AIN × GAIN / VREF ) + 1]
donde:
AIN es el voltaje de entrada analógica.
N = 16 para el AD7798, y N = 24 para el AD7799.
He simplificado la fórmula y el cálculo
// fórmula para calcular la tensión analógica de la salida digital: Código = 2N - 1 × [(AIN × GAIN / VREF) + 1]
// GAIN / VREF = 1 / 2.5 = > 0.4
// 0.4 Ain = ((adc / 32768) - 1)
flotar Ain;
Ain = ((((((float) adc) / 32768) - 1) / 0.416);
printf ("value:%. 2f [v] \ r \ n", Ain);
La fórmula anterior devuelve siempre un valor negativo. Quiero imprimir ese valor negativo. He intentado lo anterior pero no funciona. ¿Cómo imprimir el valor de Ain? Aquí adc es un valor sin signo, así que me estoy convirtiendo en flotante.
He intentado así también
Ain = (((adc / 32768.0) - 1) / 0.416);
printf("value:%.2f [v]\r\n", Ain);
pero no puedo imprimir ese valor.