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.
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. "
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
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.
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".