Hallo,
zurzeit arbeite ich mit dem MPL3115a2 von Freescale.
Die gelieferte Temperatur von 20 °C scheint mir auch realistisch zu
sein.
Leider liefert mir der Sensor eine Höhe von 161m statt den ca 80-90m
über NN die ich erwarte und der Druck von 33871 Pa scheint mir auch
nicht möglich zu sein.
Hat jemand mit diesen Sensor ähnliche Probleme oder eine Idee woran dies
liegen könnte?
Über Tipps oder Anregungen würde ich mich sehr freuen.
Hier ein Ausschnitt über den Relevanten Code
Noch keiner Erfahrungen mit diesem Chip?
Außerdem fällt mir auf, dass die Ergebnisse der Höhe nicht
reproduzierbar sind, zwar steigt die Höhe um ca 2m, wenn man den Chip um
2m anhebt, jedoch bin zeigt der Sensor mittlerweile 230m an....
Das Problem der Höhe habe ich gelöst, um die Höhe über NN zu erfahren
muss man natürlich wie bei allen Höhenmetern das Aktuelle QNH eingeben,
bzw. für die Höhe über den Boden das aktuelle QFE.
;) Dafür fehlten mir bis vor kurzen leider noch die grundlegenden
Erkenntnisse über den Luftdruck.
Falls aber schon mal einer es geschafft hat bei diesem Sensor auch einen
Korrekten Luftdruck auszulesen, würde ich mich immer noch freuen.
Gruß
Ja das Problem war, dass ich beim zusammensetzen des 12 Bit Registers
die einzelnen Bytes auf long int casten musste. Ohne casten gab es halt
immer einen Überlauf bei der Berechnung, was zu einem Fehlerhaften
Ergebnis führte.
Nein das zeitliche Driften führe ich jedoch auf leichte
Luftdruckschwankungen zurück, welche ständig vorhanden sind und das
Ergebnis natürlich negativ beeinflussen. Wenn man bedenkt, dass 1 hPa
ca. 8,3m entsprechen ist hierfür auch nicht viel nötig.
Gruß Marcel
Hallo Marcel,
ich experimentiere auch mit dem MPL3115a2 und habe ihn gestern erst zum
Laufen gebracht.
Anscheinend ist er sehr empfindlich beim Löten...(hüstel)
Ich habe hier auch einen viel zu hohen Höhenwert: ca. 140m statt 60.
Gut, ich kann einfach einen Offset abziehen, aber eigentlich ist der
Sensor ja temperaturkompensiert und "akkurat".
Leider läuft er immer nur etwa eineinhalb Minuten und steigt dann aus.
(Kann auch an meinem übrigen Programm liegen).
Ist das auch der Grund, warum du ihn immer neu initialisierst?
1
while(1){
2
I2C_send_1(sensor,0x26,0xB8);// Set to Altimeter with an OSR = 128
3
I2C_send_1(sensor,0x26,0xB9);// Set Active Altimeter
4
...
Meine Temperatur liegt zur Zeit bei 4925°C. Entweder ist meine Küche
sehr warm oder die Daten liegen im Zweierkomplement vor. Ich teste die
Tage aber noch weiter.
Ich bin schon froh, dass ich überhaupt Kontakt mit dem Sensor aufnehmen
konnte.
Gruß
Michael
dr.prof.schlau schrieb:> Ich habe hier auch einen viel zu hohen Höhenwert: ca. 140m statt 60.> Gut, ich kann einfach einen Offset abziehen, aber eigentlich ist der> Sensor ja temperaturkompensiert und "akkurat".
Einen Offset von 10m musste ich bei mir auch einstellen, um ein
korrektes Ergebnis zu erlangen. 100m sind jedoch denke ich zuviel. Hast
du auch vor der Messung immer dran gedacht dem Sensor, den aktuellen
"relativen" Luftdruck deines Standortes mitzuteilen?
dr.prof.schlau schrieb:> Leider läuft er immer nur etwa eineinhalb Minuten und steigt dann aus.> (Kann auch an meinem übrigen Programm liegen).> Ist das auch der Grund, warum du ihn immer neu initialisierst?>
1
while(1){
2
>I2C_send_1(sensor,0x26,0xB8);// Set to Altimeter with an OSR = 128
3
>I2C_send_1(sensor,0x26,0xB9);// Set Active Altimeter
4
>...
Ich initalisiere den Sensor nur jedesmal, um zwischen Höhen- und
Druckmessung zu wechseln. Dies ist jedoch nur bei mir notwendig, da mich
beide Werte interessiere.
dr.prof.schlau schrieb:> Meine Temperatur liegt zur Zeit bei 4925°C. Entweder ist meine Küche> sehr warm oder die Daten liegen im Zweierkomplement vor.
Ich kann dir leider nicht sagen, wie warm es in deiner Küche ist, jedoch
kann ich bestätigen, dass die Temperatur im Zweierkomplement vor liegt
;)
Gruß Marcel
Marcel W. schrieb:> Einen Offset von 10m musste ich bei mir auch einstellen, um ein> korrektes Ergebnis zu erlangen. 100m sind jedoch denke ich zuviel. Hast> du auch vor der Messung immer dran gedacht dem Sensor, den aktuellen> "relativen" Luftdruck deines Standortes mitzuteilen?
Nein, das habe ich bislang noch nicht gemacht. Da muss ich mir wohl noch
einmal das Manual unters Kissen legen..
Zur Temperatur:
Im Manual steht:
if (data.Byte.hi > 0x7F)
{
SCI_CharOut ('-');
data.Word = ~data.Word + 1; //Zweierkomplement
}
Bei meinem Wert von 4295 liegt das High-Byte aber unter 7F und sollte
doch so übernommen werden können, oder?
Wie gesagt, noch kämpfe ich mit dem Sensor, der nach kurzer Zeit nicht
mehr ausgelesen wird, obwohl zum Auslesen sämtl. Interupts gesperrt
sind. Das ganze habe ich in einem Projekt mit mehreren Anzeigen diverser
Sensoren, die bereits laufen und ich so leider experimentieren muss.
Gruß
Michael
> Zur Temperatur:> Im Manual steht:> if (data.Byte.hi > 0x7F)> {> SCI_CharOut ('-');> data.Word = ~data.Word + 1; //Zweierkomplement> }
Beim durchsehen des Manual wird dir dann auch sicher auffallen, dass die
nur das Byte T_MIN_MSB für die Stellen vor dem Komma zuständig sind. Aus
diesem Grund können ja unter keinen Umstand Werte über 255 entstehen.
Die übrigen 4 Bit aus dem Register T_MIN_LSB musst du gesondert
bearbeiten um daraus die Nachkommastellen zu ermitteln.
> Wie gesagt, noch kämpfe ich mit dem Sensor, der nach kurzer Zeit nicht> mehr ausgelesen wird, obwohl zum Auslesen sämtl. Interupts gesperrt> sind.
Das Problem ist mir mal untergekommen als ich mit voller Geschwindigkeit
ständig die Register ausgelesen habe. Da ich dies zurzeit nur alle 5s
mache, kann ich nicht sagen ob es jetzt nicht mehr auftritt oder halt
nur 1000 mal so lange dauert bis der Sensor abschmiert.
Gruß Marcel
Marcel W. schrieb:> Das Problem ist mir mal untergekommen als ich mit voller Geschwindigkeit> ständig die Register ausgelesen habe. Da ich dies zurzeit nur alle 5s> mache, kann ich nicht sagen ob es jetzt nicht mehr auftritt oder halt> nur 1000 mal so lange dauert bis der Sensor abschmiert.
Hi Marcel,
leider verliere ich auch bei 10kHz I2C-SCL nach einigen Minuten die
Verbindung (1 Abfrage/s.
Da du oben für 'altitude' einen 'int' angegeben hast, nehme ich an, dass
du dein Programm auf einem PC und nicht auf einem AVR laufen lässt. Ich
hantiere hier mit einem AVR644. Die Temperatur kann ich immer genau
auslesen. Bei der Höhe haperts noch (evtl. ein Fehler beim casten der
Werte)
Wie liest du das aktuelle QNH ein? Holst du dir die Werte irgendwo her
und trägst sie dann ein oder liest du sie mit dem Sensor aus und legst
sie dann im entspr. Register ab?
Gruß
Michael
Marcel W. schrieb:> 338 // Druck aus den 3 Character zusammensetzen> 339 pressure = ((long)P_LSB >> 6) ;> 340 pressure += ((long)P_CSB << 2) ;> 341 pressure += ((long)P_MSB <<10);
Hi nochmal,
gleich noch eine Frage:
Bei der Zusammensetzung berücksichtigst du nur die oberen zwei Bits des
P_LSB. (das LSB ist Bit 7-4, du benutzt also nur insgesamt 18Bit). Sehe
ich das richtig?
Gruß
Michael
dr.prof.schlau schrieb:> Hi Marcel,> leider verliere ich auch bei 10kHz I2C-SCL nach einigen Minuten die> Verbindung (1 Abfrage/s.
Dazu weiß ich zurzeit auch leider keinen Rat.
dr.prof.schlau schrieb:> Da du oben für 'altitude' einen 'int' angegeben hast, nehme ich an, dass> du dein Programm auf einem PC und nicht auf einem AVR laufen lässt.
Nein ich nutze einen 8051er.
dr.prof.schlau schrieb:> Bei der Höhe haperts noch (evtl. ein Fehler beim casten der> Werte)
Denk dran, die Vorkommastellen befinden sich in OUT_P_MSB und OUT_P_CSB,
bzw. die Nachkommastellen in OUT_P_LSB in Bit 7-4. Beim casten dürfte es
deshalb an dieser Stelle keine Fehler geben. Wohl jedoch falls du
vergisst, dass die Daten in OUT_P_MSB und OUT_P_CSB im 2er Komplement
vorliegen.
dr.prof.schlau schrieb:> Wie liest du das aktuelle QNH ein? Holst du dir die Werte irgendwo her> und trägst sie dann ein oder liest du sie mit dem Sensor aus und legst> sie dann im entspr. Register ab?
Den QNH holst du dir aus entweder aus einem auf deine Höhe kalibrierten
Barometer bzw. im Internet bei irgendeinem Wetterdienst, bezogen auf
deinem Einsatzort. Weil für eine Richtige Höhenangabe der relative
Luftdruck notwendig ist. Umgekehrt kann dein Sensor nur den relativen
Luftdruck berechnen, wenn dir deine Höhe über NN bekannt ist.
Gruß
Marcel
dr.prof.schlau schrieb:> Marcel W. schrieb:>> 338 // Druck aus den 3 Character zusammensetzen>> 339 pressure = ((long)P_LSB >> 6) ;>> 340 pressure += ((long)P_CSB << 2) ;>> 341 pressure += ((long)P_MSB <<10);>> Hi nochmal,> gleich noch eine Frage:> Bei der Zusammensetzung berücksichtigst du nur die oberen zwei Bits des> P_LSB. (das LSB ist Bit 7-4, du benutzt also nur insgesamt 18Bit). Sehe> ich das richtig?
Ja wie aus dem Datenblatt ersichtlich, sind die ersten 18 Bit wiedermal
die Vorkommastellen, und die 2 Bit auf Position 5-4 im OUT_P_LSB
repräsentieren die Nachkommastellen.
Gruß
Marcel
Schaut euch dazu die Barometrische Höhenformel an:
http://de.wikipedia.org/wiki/Barometrische_H%C3%B6henformel
Der Druck auf Meereshöhe beträgt im Mittel 1013,25 mbar. Er kann aber
abhängig von der Wetterlage auchmal 1025 mbar betragen oder nur 980
mbar. Das entspricht einem Höhenunterschied von ca. 360 Meter. Im
Extremfall wurden im Zentrum eines Hurricanes schon mal 950 mbar
gemessen.
Ganz grob ändert sich der Druck um 1 mbar pro 8 Meter Höhenunterschied.
Also im Treppenhaus 3 Stockwerke hoch -> 1 mbar weniger.
Marcel W. schrieb:> Ja wie aus dem Datenblatt ersichtlich, sind die ersten 18 Bit wiedermal> die Vorkommastellen, und die 2 Bit auf Position 5-4 im OUT_P_LSB> repräsentieren die Nachkommastellen.
Ja, natürlich, beim Druck.
Ich habe bislang nur die Höhe ausgelesen. Da sind die 4 Bits aus dem LSB
die Nachkomastellen.
Gruß
Michael
Hallo,
ich bin gerade auf der Suche nach Sensoren für eine Wetterstation.
Temperatur und Druck möchte ich dafür erfassen aber mir sind die
Sensoren, gerade für Druck, zu teuer.
Wie sind denn eure Erfahrungen mit dem MPL bezüglich der Druckmessung?
Für die Temperatur würde ich einen anderen Sensor vorziehen.