mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Variable entprellen


Autor: cli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen.

Von meiner ADC Messung bekomme ich eine Variable.
Beispiel: 1234
Diese möchte ich gern auf einem GrafikLCD darstellen. Durch den 
ungenauen ADC Eingang ändert sich die Variable zwischen 1232 - 1236.
Das stört mich ein wenig.

Hat jemand eine Idee, wie man das Problem per einfacher Rechnung beheben 
kann.?



Danke euch ;)

Autor: Cyblord ---- (cyblord)
Datum:

Bewertung
2 lesenswert
nicht lesenswert
Gleitender Mittelwert

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
cli schrieb:
> das Problem
Was ist "das Problem"?
Dass ich die Anzeige so hektisch ändert, oder dass sich der Wert der 
Variablen ändert?
Das erstere ließe sihc durch ein weniger häufiges Update eledigen...

Autor: cli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lothar M. schrieb:
> Was ist "das Problem"?
> Dass ich die Anzeige so hektisch ändert, oder dass sich der Wert der
> Variablen ändert?

Problem ist, dass sich die Variable so ändert. Die Anzeige der Variable 
folgt ja daraus.

Lothar M. schrieb:
> Das erstere ließe sihc durch ein weniger häufiges Update eledigen...

Das ist richtig. Allerdings benötige ich die ständige Abfrage

Autor: Wdh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gleitender Mittelwert

Autor: Thomas Eckmann (Firma: Thomas Eckmann Informationst.) (thomase)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
cli schrieb:
> Das ist richtig. Allerdings benötige ich die ständige Abfrage

Aber eine Anzeige im 0,5 - 1s Takt ist vollkommen ausreichend. Schneller 
kannst du das ohnehin kaum verarbeiten. Nervig wird es doch erst, wenn 
sich die letzte Ziffer als unscharfe '8' darstellt.

Autor: Rolf Magnus (rmagnus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
cli schrieb:
> Lothar M. schrieb:
>> Was ist "das Problem"?
>> Dass ich die Anzeige so hektisch ändert, oder dass sich der Wert der
>> Variablen ändert?
>
> Problem ist, dass sich die Variable so ändert. Die Anzeige der Variable
> folgt ja daraus.

Die Frage war aber, welches von beiden jetzt für dich das Problem 
darstellt. Wenn das Problem also ist, dass sich die Variable so ändert, 
würde dich das also auch ohne die Anzeige stören?

> Lothar M. schrieb:
>> Das erstere ließe sihc durch ein weniger häufiges Update eledigen...
>
> Das ist richtig. Allerdings benötige ich die ständige Abfrage

Das verstehe ich nicht. Es stört dich, dass der Wert sich oft ändert, 
aber du brauchst oft einen neuen Wert? Wozu denn, wenn er sich 
zwischendurch nicht ändern soll?

Autor: Kai (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vermutlich um eine kurze Latenzzeit zu erreichen.
Ein gleitender Mittelwert mit einem Flush bei grossen Änderungen sollte 
dann das Mittel der Wahl sein.

Autor: cli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe am Eingang ein Poti. Mit dem möchte ich genau einstellen. 
Bedeutet ich möchte nicht immer eine Sekunde warten, bis es mir den Wert 
anzeigt.



Wenn ich fertig bin mit einstllen, quasi die Variable nicht mehr 
verändere, soll die letzte Zahl ziemlich konstant bleiben. Damit es eben 
nicht flackert.


Am besten wäre eine Abfrage im Programm, ob sich der Wert um +-1 oder 2 
verändert oder aber, wenn sich der Wert stärker verändert.
Quasi ab +-3(wenn ich wieder am Poti drehe)

Autor: Harald Wilhelms (wilhelms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
cli schrieb:

> Ich habe am Eingang ein Poti. Mit dem möchte ich genau einstellen.

Um mit einem Poti einen Wert genauer als 1% einzustellen, brauchst
Du ein sehr gutes Poti (möglichst Mehrgang)und eine ruhige Hand.

Autor: cli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das funktioniert, weil ich nicht auf die letzte Zahl genau einstellen 
muss. Möchte sie aber trotzdem gern anzeigen

Autor: Ingo Less (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein Display was auf User-Eingaben reagiert sollte mit 10-15Hz 
aktualisiert werden. Um deinen Wert zu beruhigen kannst du ihn mit nem 
gleitenden Mittelwert über 8 oder 16 Werte glätten.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Harald W. schrieb:
> Um mit einem Poti einen Wert genauer als 1% einzustellen, brauchst
> Du ein sehr gutes Poti (möglichst Mehrgang)und eine ruhige Hand.
Allerdings ist es schon so, dass ich schnell mal 50 oder 53 oder 57 
einstellen könnte, und sich danach ohne Hand am Poti genau dieser Wert 
blieben soll.

cli schrieb:
> Ich habe am Eingang ein Poti. ...
> Wenn ich fertig bin mit einstllen, quasi die Variable nicht mehr
> verändere, soll die letzte Zahl ziemlich konstant bleiben. Damit es eben
> nicht flackert.
Wieviele Bits hast du da im ADC? Bei einem 8 Bit Wandler sollten nicht 
schon die untersten 2 Bit vor sich hinzappeln. Falls doch: wie sieht der 
Aufbau aus?
Was man aber prinzipiell erst mal immer hat, ist dass der Wert zwischen 
2 Zahlen hin- und herhüpft. Das kann man nur beheben, wenn man ein 
"Weiterlaufen" erst erlaubt, wenn der Wert mehr als 2..3 Inkremente 
neben dem aktuellen Wert liegt.

Autor: Manfred (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
cli schrieb:
> Durch den
> ungenauen ADC Eingang ändert sich die Variable zwischen 1232 - 1236.

> Am besten wäre eine Abfrage im Programm, ob sich der Wert um +-1 oder 2
> verändert oder aber, wenn sich der Wert stärker verändert.
> Quasi ab +-3(wenn ich wieder am Poti drehe)

Nach dem Baumuster:

LetzteAnzeige = 735
Variable = 0

Schleife
  Meßwert holen
  Variable = Variable + Meßwert
  1 Millisekunde Pause
  Zähler = Zähler plus 1
  und wieder zurück
nach 10 Umläufen:
 Anzeigewert = Variable durch 10
 Variable = 0 nicht veregessen !

-- damit hast Du schon deutlich Ruhe im niederwertigsten Bit.

Wenn
  LetzteAnzeige - Anzeigewert oder Anzeigewert - LetzteAnzeige größer 2 
dann
  Unterroutine "schreibe in Anzeige"
  LetzteAnzeige = Anzeigewert
Ende wenn
-- nur Anzeigen, wenn Abweichun größer als

Mit einem ArduinoNano und I2C-Display schaffe ich damit etwa 30 Zyklen 
pro Sekunde.

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.