Moin Moin. Ich möchte gern einen von einem Atmega gemessenen elektrischen Strom (externer ADC) über die Zeit integrieren. Kurz die Eckdaten: Der ADC spuckt mir ca. alle 68ms einen Messwert aus, der bereits über 128 Samples gemittelt wurde. Das Zeitintervall über das integriert werden soll, kann bis zu 12 Stunden lang sein. Mein erster Ansatz war, nach jeder Messung den Wert (12 bit Genauigkeit) in ein Array zu packen, um so einen gleitenden Mittelwert zu erhalten. Dieser würde dann alle 500ms abgefragt werden und dann mit dem Zeitintervall (500ms) multipliziert werden. Das Resultat wird dann über die Zeit auf eine Gleitkommazahl addiert werden. Bei diesem Ansatz sehe ich allerdings zwei Probleme: 1. Die AVR-Architektur soll relativ lahm mit Gleitkommazahlen sein. Werden double unterstützt? 2. Anfangs wird die Lösung noch relativ gut funktionieren, wird jedoch die Summe größer, ist sie irgendwann so groß, dass aufsummierte (kleine) Werte den Zahlenwert nicht mehr verändern. Langsamer externer Speicher (SD-Karte über SPI) ist en masse vorhanden. Könnte man damit was machen? Generell suche ich nach Ideen, wie ich mein Problem programmiertechnisch umsetzen könnte... Ich bin für Anregungen aller Art dankbar. Gruß Sven
Der Ansatz ist schon richtig, jedoch brauchst du keinen gleitenden Mittelwert, wenn du bereits über 128Werte gekitzelt hast. Nimm diesen Wert, multiplizier die Samplerate rein (deine 68ms) und summiere dann auf. Würde aber fixed Point nehmen und dann in eine uint32 Variable. Sollte gehn, hoffe ich... Knut
Sven S. schrieb: > 1. Die AVR-Architektur soll relativ lahm mit Gleitkommazahlen sein. > Werden double unterstützt? > 2. Anfangs wird die Lösung noch relativ gut funktionieren, wird jedoch > die Summe größer, ist sie irgendwann so groß, dass aufsummierte (kleine) > Werte den Zahlenwert nicht mehr verändern. Du hast es schon selber erkannt: Gleitkommazahlen auf einem 8-Bitter ist nicht so schön. Warum nimmst du keine Ganzzahl? Ich komme auf eine Summe von 2 602 164 224 wenn du 12h alle 68ms 4096 addierst das passt gut in ein uint32: 4 294 967 296
Wozu berechnest du den Mittelwert, wenn du nachher integrieren willst? Nimm einfach die Werte vom ADC und summiere sie auf.
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.