Je veux faire une moyenne mobile ou quelque chose de similaire, parce que je reçois des valeurs bruyantes de l'ADC, c'est mon premier essai, juste pour calculer la moyenne mobile, mais les valeurs vont à 0 à chaque fois, Pouvez-vous m'aider?Moyenne flottante avec lecture des valeurs ADC
Cela fait partie du code, ce qui rend cette magie:
unsigned char buffer[5];
int samples = 0;
USART_Init0(MYUBRR);
uint16_t adc_result0, adc_result1;
float ADCaverage = 0;
while(1)
{
adc_result0 = adc_read(0); // read adc value at PA0
samples++;
//adc_result1 = adc_read(1); // read adc value at PA1
ADCaverage = (ADCaverage + adc_result0)/samples;
sprintf(buffer, "%d\n", (int)ADCaverage);
char * p = buffer;
while (*p) { USART_Transmit0(*p++); }
_delay_ms(1000);
}
return(0);
}
Ce résultat j'envoie via USART à la valeur afficher.
Votre équation n'est pas correcte, essayez avec 'ADCaverage + = (adc_result0-ADCaverage)/samples;' – eyllanesc
ty mate, ça marche – Branis
Si le bruit est une préoccupation, vous pouvez également utiliser des entiers et ne pas flotter. – Lundin