www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mittelwertbildung in ASM


Autor: Dennis Brücke (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;)

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Frage ist, über wieviele "Messungen" der Mittelwert gelten soll.

...

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Alexander Höller (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...
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.

...

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Volker Kattoll (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Alexander Höller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmmm ... stimmt - hoppla!

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.