Forum: Mikrocontroller und Digitale Elektronik Frage bezüglich ADC Datenverarbeitung


von Urlauber (Gast)


Lesenswert?

Hallo,

folgende Vorgehensweisen sind doch gleichwertig:
8 Ergebnisse eines 12Bit ADC aufsummieren,
durch 8 dividieren und dann mit Konstanten vergleichen
oder
8 Ergebnisse eines 12Bit ADC aufsummieren,
und dann mit 8 facher Konstante vergleichen?

Also z.B.:
unsigned int wAdcSum;

if (wAdcSum / 8 > MAX_XXX)
{
  ...
}

if (wAdcSum / 8 < MIN_XXX)
{
  ...
}

gleichwertig zu:

if (wAdcSum > MAX_XXX * 8)
{
  ...
}

if (wAdcSum < MIN_XXX * 8)
{
  ...
}

Bei der 2.Methode habe ich doch auch einen "Mittelungseffekt"?

Steh im Moment ein wenig aufm Schlauch ...

Bin für klärende Worte dankbar :-)

von Peter R. (gelb)


Lesenswert?

Urlauber schrieb:

> 8 Ergebnisse eines 12Bit ADC aufsummieren,
> durch 8 dividieren und dann mit Konstanten vergleichen

Hier wird das ADC-Ergebnis abgerundet

> oder
> 8 Ergebnisse eines 12Bit ADC aufsummieren,
> und dann mit 8 facher Konstante vergleichen?

Hier nicht.

Die Wahrscheinlichkeit, dass der ADC-Wert größer ist als die Konstante, 
ist also im ersten Fall größer.

Grüße, Peter

von Karl H. (kbuchegg)


Lesenswert?

Peter Roth schrieb:

> Die Wahrscheinlichkeit, dass der ADC-Wert größer ist als die Konstante,
> ist also im ersten Fall größer.

In dem Fall nicht, weil der Vergleichswert nicht jeden beliebigen Wert 
annehmen kann, sondern nur das 8 fache des Grenzwertes.

Die beiden Methoden sind IMHO gleichwertig.

von Detlev T. (detlevt)


Lesenswert?

Es gibt schon einen Unterschied. Nehmen wir an, die Konstante ist 
0x0100, die Messwerte sind sieben mal 0x101 und einmal 0x100. 
Aufsummiert also 0x0807. Vergleiche ich das mit der achtfachen Konstante 
(0x0800) ist das größer.

Dividiere ich hingegen , kommt 0x100 als "Mittelwert" der Messungen 
heraus und das ist nicht mehr größer. Der Vergleich ">" wie in dem 
Beispiel ist also im ersten Fall wahr, im zweiten falsch.

von Urlauber (Gast)


Lesenswert?

Ok,

if ((wAdcSum & 0xFFF8) > MAX_XXX * 8)
{
  ...
}

wäre dann also zur 1. Methode gleichwertig.

Das bedeutet wohl, das die 2. Methode vielleicht sogar genauer ist,
weil Brüche nicht verlorengehen.

Z.B. so:

if (wAdcSum > MAX_XXX * 8 + 4)
{
  ...
}

Ist nur fraglich ob das sinnvoll ist?

Danke an allen die geantwortet haben.

Lg
Gerhard

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
Noch kein Account? Hier anmelden.