Hay un par de cosas que no entiendo a que queres llegar, pienso que queres que te devuelva todos los valores, pero te debe estar devolviendo 1 solo ( por el return como lo tenes).
Ademas por que devolver un entero... ¿cuando vos buscas decimales ?..
Este numero:
0.48875855327468230694037145650049
Es irrealizable en un micro. Lo maximo que se le aproxima es:
0.48875856399536133 expresado en un float como 0x3efa3e90 segun la IEEE 754.
Asi que ahi ya tenes un pequeño error.
Por otro lado esto:
return((int16)(Volt_AC_F2,Volt_AC_F1,volt_DC_12,temp_lm35,CTE_DC_12));
Si no falla mi C, quiere decir que va a castear cada uno de los valores, pero el unico que va a devolver casteado es el CTE_DC_12, los demas no.
Si lo haria y pudiera ponerle una variable dentro del set_adc_channel seria asi:
#define MUESTRAS (1<<3)
float ADC_Values[5];
const int8 ADC_Channels[5] = {0,1,2,3,5,0xFF};
const float ADC_Coef[5] = {0.48875855327468230694037145650049,0.48875855327468230694037145650049,0.48875855327468230694037145650049,0.48875855327468230694037145650049,0.06109481915933528836754643206256};
void filtro_promediado(float * ADC_Val)
{
int8 i,j;
for(i=0; i!=0xFF ; i++)
{
set_adc_channel(ADC_Channels[i]);
delay_us(20);
for(j=0; j<MUESTRAS;j++) {
ADC_Val[i] = read_adc();
}
ADC_Val[i] /= MUESTRAS;
ADC_Val[i] *= ADC_Coef[i];
}
}
Tambien buscaria como configurar el ADC para que use 20 TAD para el tiempo de adquisición.
Podrías decirme que es lo que causa que se mueva mucho el adc?.
- Que el tiempo de adquisicion no sea el correcto lo cual tendrias una lectura erronea. Esto depende del circuito.
- Errores al codificar en 32 bits algun numero con muchos decimales como comente arriba. y al hacer la operacion arroja un resultado que no es el adecuado comparado con usar todos los numeros.
- Que la tension realmente varie demasiado en la entrada del pin del ADC
- Que fluctue la alimentacion al momento de medir
- No cuento errores que pueda tener el mismo ADC.
En si, si todo esta correcto, VDD se mantiene constante, La tension de entrada al pin del ADC igual, y se cumple los tiempos deberia fluctuar a lo sumo 1 bit o 2 como maximo, con lo cual un promediado de 8 muestras ya te lo limpiaria.
Hay que tratar de determinar cual es el problema en realidad. Podrias mostrar primero los valores obtenidos por el ADC para ver si es ahi donde cambia tanto.