Word addieren und Summe teilen

pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Word addieren und Summe teilen

 · 
Posted: 05.02.2013 - 01:28  ·  #1
Guten Morgen,

entweder bin ich zu müde oder AVRco kann nicht mehr rechnen :)

Eigentlich habe ich auf meinem Board 2 Lichtsensoren, beide Werte werden in einer Summe addiert und dann durch 2 geteilt. Um nun einen genaueren Wert zu Filtern, gehe ich nun vor der Auswertung mit der folgenden Routine drann.

Ich schreibe alle paar Sekunden einen Wert in ein Array und verschiebe den Array-Speicher entsprechend, so das der älteste Wert aus der Liste fliegt.

Dann addiere alle 31 Werte zusammen und teile sie wieder durch 31, somit habe ich einen kompletten gemittelten Wert über mehrere Sekunden. Dieser Vorgang soll auch verhindern, dass das kurze anstrahlen von Autoscheinwerfern einen sofortigen Sprung der Lichtsteuerung macht.

Eigentlich sollte das alles kein Problem sein, aber warum kann AVRco nicht mehr rechnen ???
Oder habe ich um diese Zeit einfach einen Denkfehler?

Die Einzelwerte sind max 1024, somit ist die maximal mögliche Zahl 31.744, also eigentlich auch kein Problem mit dem Word. Aber da ich hier ganz komische Werte erhalten habe, habe ich zum Test mal in das "Array [0..30] of word" mit je 200 gefüllt.

Somit sollte das Mittel eigentlich auch 200 sein und die Summe 6200, aber AVRco errechnet als Summme 9003 und als Mittel 290 ?????

Und der Wert ändert sich im laufenden Betrieb! Jetzt habe ich sogar Summe: 26424 und Mittel 852 ???

Ich benutze den mega1284P, hat Jemand eine Idee woran das liegen könnte?

Code

{--------------------------------------------------------------}
Procedure LichtSteuer;
var
    LichtX         : Integer;
    WordSumme      : Word;
begin
/// Ausgabe Lichtfilter

// Fülle zum Test mit 200
  for LichtX := 30 downto 0 do
   LichtFilter[LichtX]:=200;
  endfor;

  for LichtX := 0 to 30 do
   DebugOut('LichtFilter-'+IntToStr(LichtX)+': '+IntToStr(LichtFilter[LichtX]));
    WordSumme:= WordSumme + LichtFilter[LichtX];
  endfor;

   DebugOut('Summe: '+IntToStr(WordSumme));
    WordSumme:= WordSumme div 31;
     DebugOut('LichtFilter-Mittel: '+IntToStr(WordSumme));

end;


Beisst sich da was evtl. mit einen anderen Treiber (I2C, TWI, ModBus RTU)?

Gruss
Thorsten
Mario
Benutzer
Avatar
Gender: n/a
Age: 50
Posts: 15
Registered: 06 / 2012
Subject:

Re: Word addieren und Summe teilen

 · 
Posted: 05.02.2013 - 08:56  ·  #2
Hallo Thorsten,
Deine Variable Wordsumme ist lokal und deshalb bei Aufruf Deiner Prozedur nicht zwangsläufig 0, sondern besitzt einen zufälligen Wert.
Vor dem Aufruf der for Schleife musst Du sie deshalb auf 0 setzen, da Du ja

Wordsumme := wordsumme + LichtFilter[LichtX]
rechnest.

Gruß Mario
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: Word addieren und Summe teilen

 · 
Posted: 05.02.2013 - 11:28  ·  #3
Hallo Mario,

Quote by Mario

Hallo Thorsten,
Deine Variable Wordsumme ist lokal und deshalb bei Aufruf Deiner Prozedur nicht zwangsläufig 0, sondern besitzt einen zufälligen Wert.
Vor dem Aufruf der for Schleife musst Du sie deshalb auf 0 setzen, da Du ja

Wordsumme := wordsumme + LichtFilter[LichtX]
rechnest.

Gruß Mario

Jaaaaa, auf die einfachsten Sachen kommt man ab einer bestimmten Uhrzeit nicht mehr ;)
Ich hatte vor dem Ausschalten Heute Nacht noch überlegt, ob ich vor der Schleife das WORD auf 0 Setze! Mist :D

Danke für den Hinweis :D

Gruss
Thorsten
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: Word addieren und Summe teilen

 · 
Posted: 05.02.2013 - 14:16  ·  #4
Hallo Thorsten,

für solche Zwecke gibt es im AVRco den AVfilter (Moving Average Filter).

rolf
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 15 · Cache Hits: 14   81   95 · Page-Gen-Time: 0.141837s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI