mikrocontroller.net

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


Autor: Urlauber (Gast)
Datum:

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

Autor: Peter Roth (gelb)
Datum:

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

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

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

Autor: Detlev T. (detlevt)
Datum:

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

Autor: Urlauber (Gast)
Datum:

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

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.