Mittelwertbildung von Messwerten in C mit Mega8

OP #992812
Lesenswert?

Hallo,
kann mir einer sagen warum meine Mittelwertbildung nicht funktioniert ?
Ich addiere 5 mal den Wert result: 15 + 15 + 15 + 15 + 15 (Momentanwert)
Dividiere diesen durch 5 und heraus kommt 241.
Warum ?
Hat jemand einen Link zum "Rechen mit C" ? Ich hatte schon bei der 
Umrechnung vom ADC zum Temperaturwert Probleme.
Geht
1
void adc_messung(void)
2
{
3
unsigned long temp;
4
unsigned int result;
5
unsigned int mittelwert;
6
unsigned int temp2;
7

8
for (uint8_t i=0; i<=5; ++i) 
9
{
10
ADCSRA |= (1<<ADSC);
11
loop_until_bit_is_clear (ADCSRA,ADSC);
12
temp = 50 * ADC;    
13
result = (temp*10/1024)-273;   
14
//Result passt noch mit 15
15
temp2 = mittelwert + result;
16
mittelwert = temp2;
17
_delay_ms(300);
18
}
19
result = mittelwert / 5;
20
//hier kommt nun als result-Wert 241 raus
21
itoa( result, Text, 10 );// und in Text verwandeln
22
return;
#993845
Lesenswert?

kennt ihr die einfachste Methode um den Mittelwert zweier Zahlen in C zu 
bekommen?

Voraussetzung:
Vorzeichenlose Ganzzahl Operanden, bei der Schnittstelle muss sicher 
gestellt werden, dass bei der Addition der Wertebereich von u8 nicht 
überschritten wird.

(Methode für höhere Präzission, Addieren + letztes Bit verwerfen)
1
u8_mittelwert = (u8_a1 + u8_a2) >> 1;

Alternative:
+ größerer Dynamik-Bereich
- ungenauer
1
u8_mittelwert = (u8_a1 >> 1) + (u8_a2 >> 1);

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren