4 votos

Fórmula cálculo e impresión de valor negativo.

Estoy con éxito la lectura externa ADC valor de uso de ATmega32-A.

 Unsigned int adc;
 adc = AD7798_16(0x58, 0xFFFF);                           // read register 
       printf("ADC value is %d\r\n", adc);   

Estoy recibiendo ADC valor como número decimal entre un rango de "0 a 65535". Quiero que la convierte en analógica de voltaje usando la siguiente fórmula.

Código = 2N – 1 × [(AIN × GANANCIA / VREF) + 1]

donde:
AIN es el voltaje en la entrada analógica.
N = 16 para el AD7798, y N = 24 para el AD7799.

He simplificado la fórmula y cálculo de

// la fórmula para caluculate tensión analógica de salida digital :Código = 2N – 1× [(AIN × GANANCIA/VREF) + 1] // OBTENER / VREF = 1 / 2.5 => 0.4
// 0.4 Ain = ((adc / 32768) - 1)

flotador de Ain;

Ain=(((((float) adc) / 32768) - 1) / 0.416);

printf("valor:%.2f [v]\r\n", Ain);

La fórmula anterior devuelve siempre el valor negativo. Quiero impresión de que valor negativo. Me han tratado como en el anterior, pero no su trabajo. Cómo imprimir Ain valor? aquí adc es de valor sin signo así que me estoy convirtiendo en un flotador.

Me han tratado como esta también

Ain = (((adc / 32768.0) - 1) / 0.416);

printf("value:%.2f [v]\r\n", Ain);

pero yo no soy capaz de imprimir ese valor.

1voto

Morris Maynard Puntos 49

El AVR, las bibliotecas no se compilan en el apoyo para la impresión de valores de punto flotante por defecto. Esto es para ahorrar espacio en sus entornos de recursos limitados. Usted necesita saber el compilador y el enlazador para habilitar el soporte para esta característica.

Desde el avr-libc documentación en vfprintf():

Desde la plena aplicación de todos los rasgos mencionados se convierte en bastante grande, de tres diferentes sabores de vfprintf() puede ser seleccionado utilizando las opciones del vinculador. El valor predeterminado vfprintf() implementa todas las mencionó funcionalidad, excepto de punto flotante de conversiones. Una minimizado la versión de vfprintf() que sólo implementa de forma muy básica entero y conversión de cadena de servicios, pero sólo el # adicionales la opción se puede especificar el uso de los indicadores de conversión (estos indicadores son analizados correctamente a partir de la especificación de formato, pero luego simplemente se ignoran). Esta versión se puede solicitar mediante las siguientes opciones del compilador:

-Wl,-u,vfprintf -lprintf_min

Si la funcionalidad completa, incluyendo la de punto flotante de conversiones es se requiere, las siguientes opciones:

-Wl,-u,vfprintf -lprintf_flt -lm

(el énfasis es mío)

Puesto que usted está utilizando CodeVisionAVR como hemos discutido en el chat, tienen esta opción incorporada a su ventana de configuración como se ve en la Página 4, en el Paso 9 de este tutorial:

enter image description here

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X