Also komm...Alt Gr + m, sollte man doch kennen. :)
Druckbare Version
Frage: Für was nimmst Du values mal 5?Code:v = (5 * values) / (0.47 * 1024);
Also den selben Wert mal 5.
Das sind ja nicht 5 hintereinander gemessene Werte sondern der letzte gemessene Wert mal 5.
Versuch mal:
1023 deshalb, da bei 1024 Werten und 0 als kleinstem Wert der größte Wert 1023 ist.Code:v = values * 14.28 / 1023;
oder
v = values * 0.01396;
Und wenn 912 bis 916, also im Mittel 914 einer realen Klemmenspannung von 12,76 V entsprechen und der Wert 0 dementsprechend 0V,
dann entspricht der Wert 1023, 14,28V.
Das war der passende Kick der mir gefehlt hat. Ein einfacher Rechenfehler... Vielen Dank ! Jetzt bekomme ich die richtigen Werte =)
Wenn Du trotzdem noch den Mittelwertüber mehrere Messungen nehmen willst, mach Dir ein Array mit der entsprechenden Anzahl Zellen und inkrementier bei jeder Messung den Pointer so schreibt es den Messwert immer in die nächste Zelle. Bei Überlauf (pointer > maxpointerwert) setze den Pointer auf Startwert. Dann hast Du einen Ringpuffer, der bei jeder Messung den ältesten Wert überschreibt.
Das Array wird beim Start mit 1023 in jeder Zelle initialisiert, dann kann Dir auch nicht eine Unterspannug detektiert werden. Bis alle Initalwerte überschrieben wurden ist dier Mittelwert halt höher als die tatsächlich gemessene Spannung.
Bie der Mittelwertbildung empfiiehlt sich eine Anzahl von Messwerten von 2 hoch n, also 2, 4, 8, etc. Damit ist die Division eine einfache Folge von Shift right. Wenn der Compiler gut ist, (habe ich bei Arduino noch nicht getestet) ersetzt er also eine Division durch 4, durch zwei mal Shift right und spart so deutlich Rechenzeit.