Forum: Mikrocontroller und Digitale Elektronik Mittelwert-Bildung


von Sascha (Gast)


Lesenswert?

Hallo,

ich messe mit einem 89C51AC2 und einem MAX1284 A/D-Wandler eine
Akkuspannung. Erst habe ich es mit der aufaddierung von Werten
versucht, einen Mittelwert zu bilden. Das ergebnis ist aber nicht so
befriedigend. Hab hier mal was von einem Ringbuffer gelesen. Könnte mir
einer das mal etwas genauer erklären?

Mfg sascha

von Frank Linde (Gast)


Lesenswert?

Ein Ringbuffer hat zunächst einmal nichts mit Mittelwertbildung zu tun,
sondern ist eine Speicherverwaltungsstruktur (FIFO). Beschreibe doch
einmal genauer, was Dein Problem bei der Mittelwertbildung ist, bzw.
was nicht befriedigend funktioniert.

Gruß, Frank

von Rahul (Gast)


Lesenswert?

Wieviele Messwerte hast du denn? Und wo liegt dein Problem?
256 Messwerte kann man doch addieren und dann acht mal nach rechts
schieben, was der Teilung duch 256 entspräche.
Ringpuffer werden IMHO meist für Datenkommunikation verwendet, wenn
mehr Daten zum Senden anstehen als gerade verschickt werden können.
Der Ring ist dann der Effekt, wenn Daten, die am Anfang des Puffers
stehen und schon verarbeitet wurden überschrieben werden.
Es gibt also eine Schreibpostion und eine Leseposition.
Gruß Rahul

von Sascha (Gast)


Lesenswert?

Hallo,

mit der Mittelwertbildung habe ich kein Problem. Addier momentan 64
Meßwerte und dividiere anschließend durch 64. Geht auch einigermaßen.
Habe eine Referenzspannung von 2,5V. Am A/D-Eingang ist ein
Spannungsteiler von 8, da ich bis 20V messen möchte. Mein Messwert
schwankt bei einer Messspannung von 1,233V zwischen 1,211V und 1,243V.
OK, das Haptproblem liegt halt daran, das alles momentan auf Lochraster
aufgebaut ist. Hab es aber bei dem int. Wandler des 89C51AC2 auch
hingekriegt, das nur noch das letzte LSB "wackelt".

Mfg Sascha

von Frank Linde (Gast)


Lesenswert?

Sorry, aber was heißt "geht einigermaßen"? Entweder die
Mittelwertbildung funktioniert oder sie funktioniert nicht. Das sollte
sich mit einem Taschenrechner doch sehr schnell herausfinden lassen.

Gruß, Frank

von Sascha (Gast)


Lesenswert?

Die Mittelwertbildung funktioniert. Nutze dieselbe für den int. 10Bit
Wandler. Ist nur um ein Byte erweitert.

Mfg sascha

von Frank Linde (Gast)


Lesenswert?

Und wo liegt jetzt Dein Problem?

Gruß, Frank

von Sascha (Gast)


Lesenswert?

Ich suche eine rechnerische infache Methode, die mir im Programm nicht
immens viel Zeit kostet aber effektiv ist.

Mfg sascha

von Bernd Schmidt (Gast)


Lesenswert?

Versuch mal den GND anderss zu Verlegen. Ich würde den GND Anschluss des
MAX direkt an den Akku anschließen, ohne Schleife.
100 Ohm Widerstände vor den Digital-Inputs des Max helfen manchamal ein
wenig. Ausserdem vor die Versorgung einen 10 Ohm Widerstand und 10uF
Kondensator. Oder eine 100uH Spule statt des Widertands.

Bernd

von Michael (Gast)


Lesenswert?


von Reiner (Gast)


Lesenswert?

Wie wäre es damit?

#define COEFF 7
...
value = (COEFF * previous_value + (10 - COEFF) * current_value) / 10;
previous_value = value;

Das ist ein Tiefpaßfilter welches die vorherig gemessenen Werte
kumulativ berücksichtigt und damit mittelt.  Die Wahl von COEFF
bestimmt, wie stark die alten Werte und der neue Wert berücksichtigt
werden.  "Ausreißer" und LSB-Fehler werden damit natürlich auch schön
eliminiert.

Mal in EXCEL o.ä. simulieren und graphisch anzeigen lassen.

Reiner

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.