Forum: Mikrocontroller und Digitale Elektronik Variable entprellen


von cli (Gast)


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 ;)

von Cyblord -. (cyblord)


Lesenswert?

Gleitender Mittelwert

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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...

von cli (Gast)


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

von Wdh (Gast)


Lesenswert?

Gleitender Mittelwert

von Thomas E. (thomase)


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.

von Rolf M. (rmagnus)


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?

von Kai (Gast)


Lesenswert?

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

von cli (Gast)


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)

von Harald W. (wilhelms)


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.

von cli (Gast)


Lesenswert?

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

von Ingo Less (Gast)


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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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.

von Manfred (Gast)


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.

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.