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 ;)
Die Frage ist, über wieviele "Messungen" der Mittelwert gelten soll. ...
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
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
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. ...
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
@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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.