Mittelwertbildung in ASM

Gast #148237
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 ;)
Gast #148239
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
Gast #148240
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
Gast #148241
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.

...
Gast #148242
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
Gast #148243
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

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