Word addieren und Summe teilen

pvs-deck
PowerUser
Avatar
Geschlecht:
Alter: 54
Beiträge: 1343
Dabei seit: 02 / 2009
Betreff:

Word addieren und Summe teilen

 · 
Gepostet: 05.02.2013 - 01:28 Uhr  ·  #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
Geschlecht: keine Angabe
Alter: 51
Beiträge: 15
Dabei seit: 06 / 2012
Betreff:

Re: Word addieren und Summe teilen

 · 
Gepostet: 05.02.2013 - 08:56 Uhr  ·  #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
Geschlecht:
Alter: 54
Beiträge: 1343
Dabei seit: 02 / 2009
Betreff:

Re: Word addieren und Summe teilen

 · 
Gepostet: 05.02.2013 - 11:28 Uhr  ·  #3
Hallo Mario,

Zitat geschrieben von 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
Geschlecht:
Herkunft: Germany
Alter: 25
Homepage: e-lab.de
Beiträge: 5558
Dabei seit: 03 / 2002
Betreff:

Re: Word addieren und Summe teilen

 · 
Gepostet: 05.02.2013 - 14:16 Uhr  ·  #4
Hallo Thorsten,

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

rolf
Gewählte Zitate für Mehrfachzitierung:   0

Registrierte in diesem Topic

Aktuell kein registrierter in diesem Bereich

Die Statistik zeigt, wer in den letzten 5 Minuten online war. Erneuerung alle 90 Sekunden.
MySQL Queries: 10 · Cache Hits: 14   82   96 · Page-Gen-Time: 0.020456s · Speichernutzung: 2 MB · GZIP: ein · Viewport: SMXL-HiDPI