Forum: Mikrocontroller und Digitale Elektronik Mittelwertbildung in ASM


von Dennis Brücke (Gast)


Lesenswert?

hi @all,

Ich habe jetzt schon einiges im Forum gesucht, nur leider nicht
wirklich das gefunden was mir geholfen hat... :(

Ich lese über ICP die Zeitdifferenz 2er Signale ein, berechne damit die
Umdrehungen pro Minute haut auch alles soweit hin... nur wie kann ich
jetzt mit meinem 16bit ergebnis den Mittelwert berechnen ?

Im Interupt Rechne ich bereits :
neuen zeitwert - alten zeitwert = differenz zeit

dann neuen Zeitwert als alten zeitwert abspeichern für "nächste
runde"

In der Hauptroutine:
rufe ich dann die Division auf welche aus
Timer HZ * 60 Sekunden
(3456000)               / Differenz Zeit = UPM

Wo ist es Sinnvoll hier den Mittelwert zu bilden ?

Gruß Dennis

CPU: ATMega8
Coding: ASM
Status: Anfänger ;)

von ...HanneS... (Gast)


Lesenswert?

Die Frage ist, über wieviele "Messungen" der Mittelwert gelten soll.

...

von Andi (Gast)


Lesenswert?

He he, den Floh hatte ich Dir mal ins Ohr gesetzt!

Ist doch Easy:

 MittelWert = (MittelWert + NeuerWert) / 2

 Angezeigt wird dann der Mittelwert.
 Hat der vorige Mittelwert den Wert 1000 und der neue Wert 1008 ist
 Mittelwert = 1004.

Ob nun 8 oder 16 Bit ist völlig egal.
Bei 16 Bit bnötigt man halt 4 Register bzw. eine 16 Bit-Addition und
ein 16 Bit rechts schieben für die Division / 2.
Bei der Addition und beim rechts schieben benutzt man das Carry-Flag.

Gruß
Andi

von Alexander Höller (Gast)


Lesenswert?

Alsoo.... weiß zwar nicht genau um was es in deinem Projekt geht aber
mit

MittelWert = (MittelWert + NeuerWert) / 2

erechnest du den Mittelwert über ALLE Messungen bis jetzt - was
vermutlich nicht Sinn der Sache sein wird. Nehme mal an, dass du ja die
derzeitige UpM wissen willst und durch die Mittelwertbildung nur
kleinere Störungen rausfiltern willst - dazu würde ich nen Mittelwert
über die letzte 5 - 20 Messungen bilden.

mit freundlichen Grüßen,
Alexander Höller

von ...HanneS... (Gast)


Lesenswert?

5 bis 20 Messungen...

Das war nun wieder "menschlich" (dezimal) gedacht, der MC mag es aber
lieber binär (rechnet sich für ihn leichter). Wenn also eine
Mittelwertbildung der letzten 256 Messungen akzeptabel wäre, dann ist
das recht leicht zu machen. Das Beispiel
http://www.mikrocontroller.net/forum/read-1-150508.html#150575
lässt sich sicherlich leicht auf 16 Bit erweitern. Das ergibt dann eine
24-Bit-Zahl, von der die oberen 2 Bytes den Mittelwert representieren.

Wenn 256 Messungen zu viel sind, dann muss man es eben über 8, 16, 32,
64 oder 128 Messungen machen und die Bits etwas schieben.

...

von Andi (Gast)


Lesenswert?

Das mit dem Mittelwert kam von mir in einem anderen Thread!
Ist nur zur Anzeige gedacht um die Auflösung der Drehzahlberechnung
optisch zu erhöhen.
Da reicht es dann nur den letzten Mittelwert mit dem neuen Messwert zu
addieren und durch 2 zu teilen.

Gruß
Andi

von Volker Kattoll (Gast)


Lesenswert?

@Alexander Höller:

Deine Aussage,
> MittelWert = (MittelWert + NeuerWert) / 2
> erechnest du den Mittelwert über ALLE Messungen bis jetzt

ist nicht richtig, es wird nicht der Mittelwert berechnet.
Korrekt währe:
Mittelwert = (Wert1 + Wert2 + Wert3 + Wert n) / n

Bei deiner Berechnung geht der letzte Wert überproportional (zu den
anderen Messwerten) in die Berechnung ein. Da erhältst du eher so etwas
wie eine Tendenzanzeige, aber keinen Mittelwert.

Gruss
Volker

von Alexander Höller (Gast)


Lesenswert?

Hmmm ... stimmt - hoppla!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.