mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mittelwertbildung


Autor: Michael R. (luke3105)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

habe folgendes Problem:

Über eine 4-20mA Stromsteuerung wird über den ADC eines PIC 16F876 die 
analoge Spannung (über einen 250 Ohm Wid) am PIC eingelesen und daraus 
16 log. Stufen für ein PWM Signal erzeugt (für LEDs)

Leider kann es passieren, das die LED zwischen 2 Stufen mal hin und 
herspringt (die LED flackert) , mein Gedanke war entweder eine 
Mittelwertbildung oder pro Stufe eine "Hysterese" einzufügen....

Was würdet Ihr bevorzugen oder hat vielleicht jemand ein ähnliches 
Projekt realisiert ??


Gruß

Michael

Autor: AKKS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie wäre es mit einem Filter?
Such doch mal nach WinFilter.

Autor: Tubie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich würde 256 Messungen machen, in ein 16 Bit Register alle gemessenen 
Werte hinzuaddieren. Nach 256 Messungen steht das Ergebnis in Bit 15 - 
Bit 8 als 8-Bit Wert zur verfügung. Danach nochmal /16 und du hast deine 
16 Stufen

Gruß,
Tubie

Autor: Frank B. (frank501)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine Möglichkeit wäre ein gleitender Mittelwert.
In einen Ringspeicher wird jeder Messwert eingeschrieben und danach alle 
Zellen des Ringspeichers addiert und durch die Anzahl der 
Speicherstellen  des Ringspeichers geteilt.

Durch die gleitende Mittelwertbildung wird verhindert, daß erst alle X 
Messungen ein gültiger Wert herauskommt.

Das lässt sich relativ einfach mit einem Array aufbauen.

Frank

Autor: Michael R. (luke3105)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Frank,

danke für die Antwort. Das Problem ist nur, das ich in Assembler (nicht 
in C, was wahrscheinlich einfacher gewesen wäre) programmiert habe, da 
kann ich zwar addieren, nur teilen wir schwierig, oder ich muss erstmal 
einlesen^^

Gruß

Michael

Autor: Helmut Lenzen (helmi1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael R. schrieb:
> da
> kann ich zwar addieren, nur teilen wir schwierig, oder ich muss erstmal
> einlesen^^

Wenn du deinen Teilerfaktor in 2er Potenzen anlegst brauchst du nur zu 
shiften.

z.B. durch 16 teilen ist 4 mal nach rechts schieben.  Also solltes du 
deinen Buffer im 2er Potenzen Groesse anlegen.

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>danke für die Antwort. Das Problem ist nur, das ich in Assembler (nicht
>in C, was wahrscheinlich einfacher gewesen wäre) programmiert habe, da
>kann ich zwar addieren, nur teilen wir schwierig, oder ich muss erstmal
>einlesen^^

Nur wenn man es sich selbst schwer macht. Bei einer Puffergröße von 
2,4,8,16... reichen zum teilen einfache lsr/ror Befehle.

MfG Spess

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.