Forum: Mikrocontroller und Digitale Elektronik LCD-Anzeige Arduino Nachkommastelle


von Eugen (Gast)


Lesenswert?

Hallo zusammen,

Ich bastle grad an einer Strommessung mit einem Arduino.
Der Arduino misst den Strom indirekt über eine Sensorspannung 0-5V am 
A0.
0-5V entsprechen hierbei 0-40A.

Der Strom von 0-40A wird über das LCD-Display ausgegeben.
Nun habe ich das Problem, dass der Wert vom Analogen Eingang dauerhaft 
schwankt auf den letzten Bits.

Dementsprechend wird mir der Strom auch schwankend am Display 
ausgegeben.

Gibt es dafür eine einfache Lösung, dass der Anzeigewert nicht so 
schwankt?.

Danke im Voraus.

von Crazy Harry (crazy_h)


Lesenswert?

Kondensator? Wert mitteln?

von Stephan (Gast)


Lesenswert?

Miitelwert bilden soll helfen.
zB. ein gleiternder Mittelwert. Wert=(3xWert_alt+Wert_neu)/4

von Eugen (Gast)


Lesenswert?

Stephan schrieb:
> Miitelwert bilden soll helfen

Mein Fehler, hätte ich auch selbst drauf kommen können.
Dachte irgendwie es gäbe eine extra Funktion dafür.

Hab den Mittelwert mit einer Schleife gebildet und jetzt passt alles.

Danke!

von Harald W. (wilhelms)


Lesenswert?

Eugen schrieb:

> Hab den Mittelwert mit einer Schleife gebildet und jetzt passt alles.

Durch die Mittelwertbildung gewinnt man zwar theoretisch zwei Bit
Auflösung, man sollte aber nicht glauben, das jetzt die Genauigkeit
der Messung auch zwei Bit besser ist.

von Manfred (Gast)


Lesenswert?

Eugen schrieb:
> Dementsprechend wird mir der Strom auch schwankend am Display
> ausgegeben.

Bei der LCD-Ausgabe die Anzahl der Nachkommastellen angeben:
1
float Current = 1.753;
2
float Voltage = 3.9754;
3
4
lcd.print(Current, 1);
5
lcd.print(Voltage, 2);

Die Anzeige wird dann 1.7 bzw. 3.97.

In einem anderen Aufbau merke ich mir den Wert, es ist eine Temperatur, 
und schreibe nur ins Display, wenn der neue Wert sich um mindestens 2° 
geändert hat.

Ständiges Schreiben ist doof, da flackert das Display unangenehm.

von Joachim B. (jar)


Lesenswert?

Eugen schrieb:
> wird über das LCD-Display ausgegeben

ich hoffe du aktualisiert das Display nicht alle 10ms oder öfter, mehr 
als 4 Werte pro Sekunde kann eh niemand erfassen.
Schlecht wäre auch das ganze Display immer wieder zu löschen, machts nur 
unruhiger. Den alten Text passend zu überschreiben ist sinnvoller.

Auch würde ich auf float LIB verzichten, kostet nur Speicherplatz, 
besser Ganzzahlrechnung, bei Volt möglicherweise in deziVolt oder 
centiVolt. Das Komma oder den Punkt kann man ja per Zeicheninsert im 
String einfügen.

Mittelwertbildung 2^n Messwerte aufaddieren und dann mit n rechtsshiften 
geht schneller als rechnen.

: Bearbeitet durch User
von Manfred (Gast)


Lesenswert?

Joachim B. schrieb:
> ich hoffe du aktualisiert das Display nicht alle 10ms oder öfter, mehr
> als 4 Werte pro Sekunde kann eh niemand erfassen.

Das war meine erste Erfahrung mit LCD am Arduino.

> Schlecht wäre auch das ganze Display immer wieder zu löschen, machts nur
> unruhiger. Den alten Text passend zu überschreiben ist sinnvoller.

lcd.clear ist doof, wenn nötig, überschreibe ich nur eine Zeile mit 
Leerzeichen. Um Speicherplatz zu sparen, als Subroutine:
1
void lcd_clrline(int LineNo) {  // Zeilen 0..3
2
  lcd.setCursor(0,LineNo);
3
  lcd.print(F("                    "));
4
  lcd.setCursor(0,LineNo);
5
}

Überschreiben nur des Wertes erfordert Denkarbeit, wenn sich dessen 
Länge ändern kann - auch das muß man erstmal selbst erfahren.

> Auch würde ich auf float LIB verzichten, kostet nur Speicherplatz,
> besser Ganzzahlrechnung

Solange das nicht am Platz klemmt ist es egal, Zitat von unbekannt: "Für 
gesparten Speicher gibt es kein Geld zurück"

> Mittelwertbildung 2^n Messwerte aufaddieren und
> dann mit n rechtsshiften geht schneller als rechnen.

Wenn ich Zeit habe, hole ich n-Meßwerte und werfe den Min- / Maxwert 
weg.

von Stephan (Gast)


Lesenswert?

Manfred schrieb:
> Ständiges Schreiben ist doof, da flackert das Display unangenehm.

Je nachdem WIE man es macht. Ich bevorzuge das Ablegen des 
Displayinhalts im RAM 1:1. Den Rest macht eine ISR mit ca. 4 
Auffrischungen /Sekunde, da ist nichts sichtbar (außer den Änderungen 
der Werte).

Bei einer Arduino LCD Lib von XY sieht man nicht unbedingt was bei 
"Write_LCD, XY" passiert.

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.