Das Ding zeigt bei mir falsche Tempwerte an. Erst dachte ich mein Code stimmt nicht, mit den Beispielwerten aus dem Datenblatt liefert er aber genau das korrekte Ergebniss, sowohl die Fixpointumsetzung als auch die mit Fliesskommanzahlen aus dem Datasheet. Divese Libs habe ich auch probiert, deren Code sieht auch nicht anders aus und liefert die gleichen falschen Werte wie meiner bzw. die richtigen Werte wenn ich die Beispielwerte aus dem Datasheet einsetze. Ergo können nur die Kalibirierdaten im Sensor falsch sein (27° zu wenig). Hat jemand ne Idee wie man die drei Werte von Hand ermitteln kann? Druckmessung habe ich noch nicht gemacht. Sensor wurde als Modul "vom Chinesen" auf ebay gekauft, vermutlich war es deshalb so günstig, weil sie einem den Ausschuss andrehen.
Jetzt habe ich mal den Druck ausgelesen, funktioniert, Werte sind wohl korrekt wenn ich die mit den aktuellen Daten von Wetterdiensten zu meinem Standort vergleiche.
Hans Pater Barometer schrieb: > Hat jemand ne Idee wie man die drei Werte von Hand ermitteln kann? Ich würde ein Excel Worksheet nehmen und dazu das Solver Add-In. In die Formel zur Berechnung der Temperatur gehen lt. Datenblatt 3 Kalibrierparameter (dig_T1..T3) ein. Also brauchst du 3 Messungen bei bekannter Temperatur, die deinen gewünschten Messbereich vernünftig abdecken. Die Berechnungsformel gefüttert mit den 3 Datensätzen ergibt 3 Gleichungen, die sich nach den 3 Kalibrierkonstanten auflösen lassen sollten - oder du lässt den Solver suchen.
Stimmt, da hätte ich auch selbst drauf kommen können. Manchmal sieht man den Wald vor lauter Bäumen nicht.
Im übrigen... Mal von den 27°C abgesehen, wo ich denke das da ein Rechenfehler ist. Sei dir Bewusst das der Sensor KEINE Umgebungstemperatur wiedergibt, sondern die PCB Temperatur des Sensors zur Temperaturkompensation des Luftdrucksensors. Siehe Datenblatt Seite 8: "Temperature measured by the internal temperature sensor. This temperature value depends on the PCB temperature, sensor element self-heating and ambient temperature and is typically above ambient temperature. "
:
Bearbeitet durch User
Rene K. schrieb: > Im übrigen... Mal von den 27°C abgesehen, wo ich denke das da ein > Rechenfehler ist. Sei dir Bewusst das der Sensor KEINE > Umgebungstemperatur wiedergibt, sondern die PCB Temperatur des Sensors > zur Temperaturkompensation des Luftdrucksensors. Die Raumtemp ist 27°C, der Sensor zeigt 0.05°C an. Der Sensor wird wohl kaum kälter sein als die Umgebung. Ein Rechenfehler kann ich ausschliessen weil es mit den Beispieldaten aus dem Datasheet problemlos funktioniert, mit jeder der dort angegeben Umrechnungsroutinen, nur mit dem realen Werten aus dem Sensor geht es nicht. Die Routine habe ich übernommen für die Druckmessung, den entspr. Formelpart und Registeraddressen geändert, das funktionierte auf Anhieb. Wenn man den Sensor nicht für Tempmessung aktiviert und ihn trotzdem ausliest liefert er 0x80 0x00 0x00 (MSB, LSB, XLSB), daran erkennt man dass eben die Tempmessung nicht aktiviert wurde, das ist aber nicht der Fall. Sie ist konfiguriert und aktiviert und liefert einen anderen Wert wie oben, also ist sie aktiv. Schaut man sich die drei bytes an die er ausliest sind sie von 0x80 0x00 0x00 verschieden, LSB ändert sich wenn man den Sensor z.B. anhaucht, der misst also schon irgendwas und reagiert auf Änderungen, nur halt mit dem Offset von ca 27°C. Aktuell liefert er 0x7E, 0x06, 0x00 rechnet man das mit den Korrekturdaten aus dem Sensor um (32-Bit-Variante hinten im Datasheet, fixpoint) kommt 0.05 °C raus, mit den anderen Umrechnungsroutinen ebenso, ein anderes Thermometer zeigt Raumtemp 27°C an. Die Korrekturdaten habe ich auch schon mehrmal ausgelesen, sind immer identisch, das ID-Register liefert auch den Korrekten Wert, beim Druck funktioniert auch alles und liefert korrekte Werte, I2C-Problem kann ich also auch ausschliessen. Ich habe schon mit versch. Oversamplingeinstellungen und IIR-Filterkonfigs probiert, Ergebniss immer mit dem Offset von 27°C.
Ich habe bei den Bosch-Sensoren aufgehört den Code selber zu schreiben. Das ist sehr fehleranfällig und somit nicht zielführend, wenn man da ewig debuggen muss - Der Grund sind diverse Integerüberläufe, die bei der Berechnung sehr schnell auftreten können, wenn man mal einen Cast vergisst. Es gibt von Bosch selbst C-Code [1] für den BMP280. Den kann man sich herunterladen und hat dann im Normalfall keinerlei Probleme. Es gibt dort in der Regel sogar verschiedene Berechnungsfunktionen, die wenn man auf Genauigkeit verzichten kann auch gut für kleine µC geeignet sind. Grüße Oliver [1] https://github.com/BoschSensortec/BMP280_driver
:
Bearbeitet durch User
Kesselhaus schrieb: > Die Raumtemp ist 27°C, der Sensor zeigt 0.05°C an. Der Sensor wird wohl > kaum kälter sein als die Umgebung. > > Ich habe schon mit versch. Oversamplingeinstellungen und > IIR-Filterkonfigs probiert, Ergebniss immer mit dem Offset von 27°C. Ja was denn nu? Immer 27° Offset oder immer 0.05°?
Hatte mir auch einen BMP180 bestellt, kam gestern an. Auslese- und Umrechnungsfunktionen wieder selber geschrieben und mit Fremdlibs verglichen, unter armbian automatisch erkannt: Funktioniert sofort wie er soll keine Zicken, keine Ausreisser. Jetzt merke ich dass die Druckwerte des 280er im Vergleich zum 180er auch verschoben sind (Ja ich habe die Höhe berücksichtigt), der 180er stimmt nach Umrechnung auf Meereshöhe sehr genau mit nahe gelegenen Wetterstationen (fast gleiche Höhe) überein, der 280 liegt konstant 10-12 hPa drüber. Beim Luftdruck ist mir der Wert an sich egal, da interessiert mich nur der Verlauf, ob das jetzt x Einheiten nach oben/unter verschoben ist, interessiert mich nicht, dafür wäre er noch brauchbar aber dass die Temp so krass abweicht. Zeitweise scheint er auch nen Hänger zu haben, da ändert sich dann der Wert längere Zeit nicht, obwohl andere Sensoren deutlich abfallen/steigen. Liest man sich in anderen Foren die Probleme zum BMP280/BME280 durch, ist das Teil ziemlicher Müll, zeigt generell zu hohe Temp an, weil er sich erhitzt im Normalmode, setzt man das Intervall rauf oder nimmt den ForcedMode wird es etwas besser, ist zwar innerhalb der Toleranz aber wenn zig andere Tempsensoren alle 1.5-2°C drunter liegen und nur um 0,1-0.05° ausseinanderliegen, dann ist das Teil einfach minderwertig, bei mir ist die Tempmessung ja völlig daneben. Der BME kann ja zusätzlich noch Luftfeuchte, da haben diverse Besitzer auch krasse Ausreisser. Der BMP280 ist wohl der Ausschuss der bei der Luftfeuchte komplett versagte und wird dann als abgespeckte Version verkauft. Mit dem BMP180 hat keiner solche Problem, BMP/BME ist wohl ne Gurkenserie deren Ausschuss nach China verkauft wurde und jetzt dort via Banggood, ebay als Modulschund für Bastler vertickert wird. Ab in den Mülleimer damit, jede weitere Beschäftigung damit ist Zeitverschwendung.
Und der nächste der es nicht verstanden hat das die Temperatur keine Umgebungstemperatur ist! Es ist die PCB- / Membran Temperatur!!!! Deswegen die 2-3°C höhere Temperatur! Diese Sensoren sind NICHT dafür Gedacht die Umgebungstemperatur zu messen! Sondern die Temperatur wird für die Kompensation und Dew-Point Berechnung gebraucht - zu nix weiter! Man sollte das echt beim Absenden eines Textes in denen die Worte SHT, BMP etc... Und Temperatur vorkommenden nen rotes Hinweisfenster einblenden.
Kesselhaus schrieb: > der 180er stimmt nach Umrechnung auf Meereshöhe sehr genau mit nahe > gelegenen Wetterstationen (fast gleiche Höhe) überein, der 280 liegt > konstant 10-12 hPa drüber. Wenn du beim BMP280 die Umrechnungsroutine für den Druck mit deinen falschen Temperaturen fütterst, wäre das ja verständlich.
Ich hab hier diverse I2C-Sensoren am Start (alle aufm Steckbrett): *** BMP085/BMP180-Test *** Chip-ID: 0x55 Pressure/Temp: 95743 Pa @ 20.1 °C Altitude: 476.41 *** BME280-Test *** Chip-ID: 0x60 Pressure/Temp: 95799 Pa @ 20.2 °C and 71.4%RH *** LM92-Test *** Value: 21.6875°C +021°C (015B) *** Sht21Test *** Humidity : 68.4 Temperature : 21.4 Alles aus China (mit Ausnahme des LM92). Für meine Anwendungsfälle reicht die Genauigkeit durchaus. Dass man damit keine präzisen Messinstrumente bauen kann, sollte jedem klar sein. Grüße Oliver
Hans Pater Barometer schrieb: > Ergo können nur die Kalibirierdaten im Sensor falsch sein Kannst du bitte deinen Code posten? Eventuell ist ja ein Fehler beim interpretieren der Kalibrierdaten oder ähnliches (Da reicht schon ein falscher oder vergessener Cast aus und man hat verloren). Ich habe schon einige von den 1Euro-Chinateilen probiert und bei diesen Sensoren gab es bisher nur gravierende Abweichungen, wenn ich einen Fehler gemacht hab. Grüße Oliver
Oliver J. schrieb: > *** BMP085/BMP180-Test *** > Chip-ID: 0x55 > Pressure/Temp: 95743 Pa @ 20.1 °C > Altitude: 476.41 Dann solltest du auch verraten, was du deinem Sensor als Input gegeben hast. Den Luftdruck kann er messen. Die Höhe nicht. Damit die Höhe berechnet werden kann, musst du beispielsweise den Luftdruck auf NN vorgeben und kannst dann mit der barometrischen Höhenformel rechnen. Ohne Zusatzinformation wird das nichts. Und wenn die Eingabe falsch ist, kommt eine Hausnummer raus.
Der Luftdruck auf NN ist Normgerecht mit 101.325 Pa vorgegeben. Ob dies an diesem Tag, zu diesem Zeitpunkt wirklich so ist, sei dahingestellt - das spielt keine Rolle. Aber dies ist die Berechnungsgrundlage.
Beitrag #5094164 wurde vom Autor gelöscht.
Rene K. schrieb: > Der Luftdruck auf NN ist Normgerecht mit 101.325 Pa vorgegeben. Ob dies > an diesem Tag, zu diesem Zeitpunkt wirklich so ist, sei dahingestellt - > das spielt keine Rolle. Das spielt es wohl. Der Sensor misst nicht irgendeinen "normgerechten" Druck auf Stationshöhe - was auch immer das sein soll, sondern den tatsächlichen.
Wolfgang schrieb: > Das spielt es wohl. Der Sensor misst nicht irgendeinen "normgerechten" > Druck auf Stationshöhe - was auch immer das sein soll, sondern den > tatsächlichen. Deshalb wird so etwas vor Benutzung kalibriert. Aber das tut hier nichts zur Sache. Grüße Oliver
Oliver J. schrieb: > Deshalb wird so etwas vor Benutzung kalibriert. Aber das tut hier nichts > zur Sache. Du kannst auf eine bekannten Stationshöhe gehen, dort aus dem gemessenen Druck und der bekannten Höhe den Druck auf NN ausrechnen und dann - solange der tatsächliche Druck auf NN sich nicht ändert - aus deinem tatsächlich gemessenen Luftdruck deine tatsächliche Höhe berechnen. Das hat aber nichts mit den 101325 Pa Normaldruck auf Meereshöhe zu tun. Und mit kalibieren hat das auch wenig zu tun. Kalibrieren stellt alleine Abweichungen von einem Normal fest. https://de.wikipedia.org/wiki/Kalibrierung
Wolfgang schrieb: > Und mit kalibieren hat das auch wenig zu tun. Kalibrieren stellt alleine > Abweichungen von einem Normal fest. > https://de.wikipedia.org/wiki/Kalibrierung Ja richtig, und das festgelegte Normal für Pa ü. NN ist halt nun mal 101.325 Pa. Ob ich den Sensor nun dann auf 500M mit dem dort aktuellen Pa auf 500M KALIBRIERE - dann kann dennoch der Pa auf 700M oder NN von dieser Kalibrierung abweichen. Der Pa ist immer Ortsabhängig - deswegen gibt es einen festgelegtes Normal mit dem alle rechnen, ja selbst die Luftfahrt. Ich verstehe dein Problem da gerade nicht?!
Rene K. schrieb: > Ob ich den Sensor nun dann auf 500M mit dem dort aktuellen Pa auf 500M > KALIBRIERE Also hast du ihm den dort gemessenen Druckwert als Druck für 500m Höhe vorgegeben und rechnest mit Nichten aus dem NN Normaldruck und dem gemessenen Druck deine Höhe aus - das meinte ich mit "Zusatzinformation".
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.