mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mittelwertbildung aus 10 Werten im Ram Mega16


Autor: René (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte gern aus 10 Werten die Im Ram des Controllers stehen auslesen
und den Mittelwert des Ganzen bilden.
Gibt es da im Assembler Lösungsansätzte?

Mittelwert = Wert von (1+10) / Anzahl

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Müssen es wirklich 10 Werte sein? Mit 8 oder 16 wäre es trivial...

Autor: D. W. (dave) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Können es auch 8 oder 16 Werte sein? Das wäre wohl einfacher.

Was meinst du mit Lösungsansätze?
Jeden Wert holen und zu einem Register hinzuaddieren. Am Ende dann durch 
10 teilen. Das Teile wird nicht einfach, aber dazu googlen. Wenn du wie 
oben gesagt jedoch auf 8 oder 16 Werte kämst, würde sich ein 3 oder 
4facher Shift Right anbieten.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
René wrote:
> Hallo,
>
> ich möchte gern aus 10 Werten die Im Ram des Controllers stehen auslesen
> und den Mittelwert des Ganzen bilden.
> Gibt es da im Assembler Lösungsansätzte?

Das würde ich straight forward machen.
Je nachdem, wie gross die Zahlen sind, entsprechend
viele Register für die Summe bereitstellen und darin
die einzelnen Werte aufsummieren. Bei Byte-Werten, reicht
es aus, wenn in 16 Bit summiert wird, also 2 Register.
Ansonsten wirst du wohl mit 24 Bit Arithmetik arbeiten
müssen. Ist aber zumindest im Bereich des Aufsummierens
kein Problem.

Aus dem Fundus an Routinen eine Divisionsroutine hervorgekramt
(16/8 oder 32/8, 24/8 haben wohl die wenigsten vorrätig)
und durch 10 dividieren.

PS: Ich würde mir auch überlegen, ob es unbedingt 10 Werte
sein müssen, oder ob nicht 8 oder 16 auch gehen würden. Denn
dann wäre die Division einfacher :-)

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: René (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

können aus 8 oder 16 sein 16 ist sogar noch besser.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
René wrote:
> können aus 8 oder 16 sein 16 ist sogar noch besser.
Also, wo genau liegt das Problem?

Autor: René (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also alles aufaddieren

maximal also 8 * 256 = 2048 da Reicht also eine 16 Bit addition und dann
3 mal lsr ror hintereinander.

meint Ihr das so?

Mfg
René

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
René wrote:
> also alles aufaddieren
>
> maximal also 8 * 256 = 2048 da Reicht also eine 16 Bit addition und dann
> 3 mal lsr ror hintereinander.
Zum Beispiel. Bei 16 Werten dann einmal mehr schieben...

Autor: Jan Enenkel (Firma: Austriamicrosystems AG) (jankey)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Google --> IIR Filter

Autor: Luther Blissett (luther-blissett)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
René wrote:
> Hallo,
>
> ich möchte gern aus 10 Werten die Im Ram des Controllers stehen auslesen
> und den Mittelwert des Ganzen bilden.
> Gibt es da im Assembler Lösungsansätzte?
>
> Mittelwert = Wert von (1+10) / Anzahl

Du kannst durch bekannte Konstanten (=10) auch mit festen shifts+add 
dividieren. Siehe hier:

http://www.cs.uiowa.edu/~jones/bcd/divide.html

Seine Beispiele sind in C, lassen sich aber spielend in Assembler 
übertragen.

Autor: rene (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit noch weniger Aufwand, speziell wenn's schnell gehen muss :
http://www.ibrtses.com/embedded/exponential.html

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.