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.
Miitelwert bilden soll helfen. zB. ein gleiternder Mittelwert. Wert=(3xWert_alt+Wert_neu)/4
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!
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.
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.