mikrocontroller.net

Forum: Compiler & IDEs Mittelwertbildung von Messwerten in C mit Mega8


Autor: Guenter B. (gbl)
Datum:

Bewertung
0 lesenswert
nicht 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
void adc_messung(void)
{
unsigned long temp;
unsigned int result;
unsigned int mittelwert;
unsigned int temp2;

for (uint8_t i=0; i<=5; ++i) 
{
ADCSRA |= (1<<ADSC);
loop_until_bit_is_clear (ADCSRA,ADSC);
temp = 50 * ADC;    
result = (temp*10/1024)-273;   
//Result passt noch mit 15
temp2 = mittelwert + result;
mittelwert = temp2;
_delay_ms(300);
}
result = mittelwert / 5;
//hier kommt nun als result-Wert 241 raus
itoa( result, Text, 10 );// und in Text verwandeln
return;

Autor: Helmut Lenzen (helmi1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>for (uint8_t i=0; i<=5; ++i)

Deine Schleife läuft über 6 Additionen

und du must Mittelwert auch mal am Anfang auf 0 setzen.

Gruss Helmi

Autor: Guenter B. (gbl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke

Autor: Sebastian B. (mircobolle)
Datum:

Bewertung
0 lesenswert
nicht 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)
u8_mittelwert = (u8_a1 + u8_a2) >> 1; 

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.