der BMP085 ist ein Druckmesser von Bosch. Nachdem man die Kalibrierungsdaten und die Temperatur für die Korrektur ausgelesen hat, steht der Druckwert in einem int32_t zur Verfügung. Die Einheit ist Pa (mBar). Auch findet man im Datenblatt: https://www.sparkfun.com/datasheets/Components/General/BST-BMP085-DS000-05.pdf Seite 14 die Formel zum Berechnen der absoluten Höhe. für p0 kann man 101325 Pa wählen (das ist der Standart). Wie lässt man den Mikrocontroller die Formel schön rechnen? Da ist ja ein Exponent drin. p= gemessener Druck altitude= 44330* ( (1-(p/p0)^(1/5.255) ) dieses "^" soll ein "hoch" darstellen. Will keine Datei einbinden
Standard! Wie hoch ist die tatsächliche Auflösung des Messwertes? Sicher nicht 32 Bit... Nenn mal den Wertebereich und die "Schrittgröße". Sehr wahrscheinlich kommst du mit einer recht übersichtlichen Tabelle und linearer Interpolation dazwischen aus, ohne einen nennenswerten zusätzlichen Fehler zu erzeugen.
drucki schrieb: > die Formel zum Berechnen der absoluten Höhe. für p0 kann man 101325 Pa > wählen (das ist der Standart). Vorsicht: Nur weil das irgendein Trottel aus unerfindlichen Gründen zum Standar_d_ erklärt hat, fühlt sich die Natur da absolut nicht dran gebunden und läßt ihn weiterhin örtlich und zeitlich nach Belieben schwanken. D.h.: Wenn dich die Höhe wirklich interessiert, wirst du es so machen müssen, wie jeder Pilot auch: auf den lokalen Luftdruck in bekannter Höhenlage kalibrieren. Und zwar immer wieder neu, wenn du den Ort wechselst oder auch einfach nur etwas Zeit vergeht. Zur barometrischen Höhenmessung gehört also auch immer eine entsprechende Kalibriermöglichkeit in der Firmware, wo man eine Referenzhöhe und den dortigen Luftdruck eingeben kann. > Will keine Datei einbinden Dann wirst du selbst eine Exponentialfunktion schreiben müssen. Und auch gleich noch was zum Logarithmieren. Das brauchst du dann zum Kalibrieren. Mein Vorschlag: binde doch besser einfach eine Datei ein. Wer so fragt wie du, der ist wahrscheinlich nicht in der Lage, sowas selber zu implementieren.
Nicht nur die Höhe selbst sondern auch dann Wetter verändert den Luftdruck. Deswegen kann man da nicht so genau die Höhe daraus ableiten. In der Fahrzeugtechnik wird das zur Anpassung der Einspritzmenge hergenommen und da speilt die Luftmasse ne Rolle unabhängig von der Höhe in der sich das Fahrzeug befindet.
Auch ein Mikrocontroller "kann" float, wenn man die entsprechende Library einbindet... Für genau deinen Sensor hat sich schon mal jemand Gedanken und Mühe gemacht...: http://www.sicklinger.com/atmel-avr-atmega-bmp085-library-in-c.html http://www.sicklinger.com/en/component/remository/func-startdown/8/?Itemid=54
Das kann man auch ohne externe Library mit etwas "zu-Fuß-Integer-Rechnung" hinkriegen. Bei einem ähnlichen Problem habe ich mir eine asm-Funktion geschrieben, die den Log2 einer Zahl ermittelt hat. Danach ist der Exponent (1/5,255) nur noch eine Integer-Multiplikation mit 12471, wonach das Produkt durch 65536 geteilt werden muss: untere 2 Byte des Ergebnisses verwerfen. Dann muss das Ganze wieder "entlogarithmiert" werden, was man auch in asm bewerkstelligen kann. Die log/antilog-Prozeduren erfordern somit keine extra Library, aber doch schon einige 100 Byte asm-Code. Ärgerlich bei diesem Sensor ist allerdings, dass er nur von 0...65 °C Temperatur-kompensierbar ist. Wenn du mal auf den Mt. Everest (8850 m) kletterst, solltest du den Sensor unter der Jacke tragen, in freier Luft herrschen dort auch bei sonnigem Wetter eisige MINUS-Temperaturen von -20 bis -60 °C.
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.