Arduino Uno mit BMP085 barosensor --> Problem!

Hallo Forum,

ich bin Arduino-Newbie und auch neu hier im Forum.
Die ersten Schritte gelingen mir nach ein paar Anläufen recht gut - Dank auch der vielen Foren und Tips im I-net!
Echte Probleme bereitet mit der Bosch Drucksensor BMP085 mit I2C-Interface. Mit Hilfe verschiedenster Libraries und Beispielcodes konnte ich zunächst eine Kommunikation aufbauen. Leider sind die ausgegebenen Werte (Temperatur und Druck) alles andere als realistisch. Auf der Suche nach dem Fehler habe ich mir zunächst die Rohdaten direkt aus den Ausgaberegistern angeschaut. Schon die beiden Register für die Temperatur zeigen (was auch immer ich tue) 0xFF. Das Auslesen der Kalibrationskoeffizienten liefert hingegen glaubhafte Werte.
Um verschiedenes auszuschließen und die Sache für mich übersichtlicher zu gestalten, habe ich eine einfache Prozedur geschrieben, welche nur die Temperaturregister ausliest → 0xFF!
Dies würde aber maximale Temperatur bedeuten, hier im Büro habe ich jedoch so um die 20°C!

// Auslesen des BMP085-Sensors über I2C
// Spannungsversorgung Sensor: 3,3V
// Pin A4 --> SDA; Pin A5 --> SCL

#include <Wire.h>

int I2C_ADDRESS = 0x77;  // sensor address 0xEF >> 1 = 0x77
int oss = 2;             // oversampling setting
int msb=0;
int lsb=0;
void setup()
{  
  Serial.begin(9600);  
  Wire.begin();
  Serial.print("Auslesen des I2C Busses an Adresse: ");
  Serial.println(I2C_ADDRESS, HEX);
 
}

void loop()
{
 
  Wire.beginTransmission(I2C_ADDRESS);
  Wire.send(0xf4); // pointer to command register
  Wire.send(0x2e); // command for calculating temperature value
  Wire.endTransmission();
  
  delay(5);                //wait 5us
  
  Wire.beginTransmission(I2C_ADDRESS);
  Wire.send(0xf6);  // register to read
  Wire.endTransmission();
  
  Wire.requestFrom(I2C_ADDRESS, 1); // request one byte
  while(!Wire.available()); // wait until data available
  msb = Wire.receive();
  Serial.print("MSB: ");
  Serial.print(msb, DEC);
  
  
  Wire.beginTransmission(I2C_ADDRESS);
  Wire.send(0xf7);  // register to read
  Wire.endTransmission();
  
  Wire.requestFrom(I2C_ADDRESS, 1); // request one byte
  while(!Wire.available()); // wait until data available
  lsb = Wire.receive();
  Serial.print("  LSB: ");
  Serial.println(lsb, DEC);
  
  
}

Nun bin ich etwas ratlos wo der Fehler liegt.

Danke schonmal für die Hilfe!

Viele Grüße,

Florian

Barometric Pressure Sensor BMP085: http://interactive-matter.org/2009/12/arduino-barometric-pressure-sensor-bmp085/

BMP085 with Arduino (tested & working): http://mitat.tuu.fi/?p=78

Daten Deutung: http://www.mikrocontroller.net/topic/15696#109963

Hallo Forum,
hallo Florian,

ich habe genau das selbe Problem wie Du mit meinem neu erworbenen BMP085 Drucksensor Breakout Board.
Ich verwende das von MegaionStorm im vorigen Post angegebene Script:

Posted by: Megaionstorm
BMP085 with Arduino (tested & working)

Das Auslesen der Kalibrationsdaten ist erfolgreich und liefert m. E. auch relativ plausible Werte:

Setting up BMP085
Reading Calibration Data
AC1: 7224
AC2: -1105
AC3: -14340
AC4: 34529
AC5: 25413
AC6: 25388
B1: 5498
B2: 58
MB: -32768
MC: -11075
MD: 2432

Das Auslesen der Messwerte liefert hingegen auch bei mir völlig unplausible Daten:
Die beiden Register 0xF6 und 0xF7 liefern als Ergebnis der Temperaturmessung konstant dezimal 255 (entspricht -114,9 Grad C., brrrrrr… :o)
Die drei Registerwerte nach der Druckmessung schwanken immerhin etwas, sind aber im Ergebnis ebenso unplausibel (entsprechen ca. 460 hPa). Auch das Ändern des Oversampling-Settings von 3 auf 2, 1 oder 0 brachte keine Änderung.

Hier ein kleiner Auszug meiner ausgelesenen Werte (Oversampling=3; das o.g. Skript habe ich erweitert, damit es mir auch die einzelnen Registerwerte ausgibt):

msb: 255 lsb: 255 → UT: -1
msb: 128 lsb: 156 xlsb: 224 → UP: 263399
Temp.: -1149
Pres.: 45889

msb: 255 lsb: 255 → UT: -1
msb: 128 lsb: 155 xlsb: 160 → UP: 263389
Temp.: -1149
Pres.: 45886

msb: 255 lsb: 255 → UT: -1
msb: 128 lsb: 156 xlsb: 128 → UP: 263396
Temp.: -1149
Pres.: 45888

msb: 255 lsb: 255 → UT: -1
msb: 128 lsb: 156 xlsb: 128 → UP: 263396
Temp.: -1149
Pres.: 45888

msb: 255 lsb: 255 → UT: -1
msb: 128 lsb: 156 xlsb: 64 → UP: 263394
Temp.: -1149
Pres.: 45888

msb: 255 lsb: 255 → UT: -1
msb: 128 lsb: 155 xlsb: 224 → UP: 263391
Temp.: -1149
Pres.: 45887

Ich habe leider keine Idee mehr, woran dies liegen könnte und würde mich sehr über Hilfe freuen.

Viele Grüße
Tom

Adding some pull up resistors (1K to 20K, most often something like 4.7K) between SDA, SCL and VCC finishes the setup (this was included in my breakout board).

Auch daran gedacht ?

Datasheet BMP085 :
http://www.bosch-sensortec.com/content/language1/downloads/BST-BMP085-DS000-05.pdf

Flyer BMP085 :
http://www.bosch-sensortec.com/content/language1/downloads/BMP085_Flyer_Rev.0.2_March2008.pdf

API BMP085: C-SOURCECODE
http://www.bosch-sensortec.com/content/language1/downloads/API_BMP085.zip

Hallo Megaionstorm,

danke für die Info. Mit den externen Pullup-Widerständen (4,7 kOhm) hab ichs auch schon probiert, hat aber nichts gebracht. Zudem sind auf dem Breakout Board die Pullups schon integriert. Ich glaube nicht, dass es ein Problem der Datenübertragung ist, da die ausgelesenen Daten ja teilweise plausibel und konstant sind (z.B. die Kalibrationskoeffizienten). Eigentlich hab ich schon alles probiert und auch das Datasheet kann ich nun schon fast auswendig ;-). Ich habs auch schon mit unterschiedlichen Stromversorgungen (USB, Netzteile) probiert, hat auch nichts geändert. Den BMP085 hab ich an die 3,3V vom Arduino geklemmt. Alles genau so, wie schon viele User im Web erfolgreich beschrieben haben, und mit deren Skripts. Da wie gesagt die Datenabfrage eigentlich klappt (z.B. die Kalibrationswerte), und nur die Messwerte Schrott sind, ging ich seither von einem Defekt der Messtechnik meines BMP085 aus.

Aber nun wundert es mich, dass ein weiterer User ausgerechnet gestern erstmals denselben Effekt gepostet hat!

Hat auch er einen defekten Sensor abbekommen? Oder wurden vom Hersteller die Steuerbefehle z.B. für die Temperaturmessung (write 0x2E in reg 0xF4, wait 4,5 ms) geändert? Steht aber nichts im aktuellen Datasheet. Kann ich mir auch nicht vorstellen.

@Florian: Hast Du auch das Sparkfun Breakout Board? Wo hast Du es gekauft?

Ich bin echt ratlos...? Hat jemand (positive wie negative) Erfahrungswerte mit dem BMP085?

Wiring Example: http://wiring.org.co/learning/libraries/bmp085.html

Example Code: http://www.sparkfun.com/datasheets/Sensors/Pressure/BMP085%20Example%20Code.zip

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1280074353/1#1

Hallo TomTom,

Sorry, dass ich mich jetzt erst melde, das WE war doch recht ausgebucht! Es scheint mir ja fast so, als hätten wir gleichzeitig am gleichen Problem mit dem gleichen Ergebnis gearbeitet! Übrigens sind deine Druckwerte meinen sehr ähnlich! Liegt aber daran, dass Werte aus der Temp. Berechnung auch für den Druck gebraucht werden. Ersetzt du die benötigten Werte durch plausible Konstanten (z.B. T=20°C und B5=3192) kommst du mit dem Druck in die richtige Richtung (aber immer noch nicht ganz richtig). Auch ich habe das Datenblatt schon hin und her gewälzt und auch des neueste von der Herstellerpage runtergeladen. Auch die hier im Thread vorgeschlagenen Lösungen von den unterschiedlichsten Seiten ausprobiert (Danke trotzdem dafür!). Das Problem ist hier meist eine fehlerhafte Berechnung durch z.B. falsche Variablendeklaration. Soweit komme ich (und scheinbar auch TomTom) gar nicht, da die Rohwerte aus den Registern offensichtlich nicht richtig sind! Ja, ich benutze auch das Breakoutboard von Sparkfun mit den internen Pullups. Hatte auch schon gedacht, dass möglicherweise die Hardware nicht das macht, was sie sollte - aber als Anfänger sucht man die Fehler ja erstmal bei sich selbst. Werde mal den Hersteller und Tinkersoup (von da hab ich gekauft) anmailen, ob der Fehler irgendwie bekannt ist.

Grüße,

Florian

http://forum.sparkfun.com/viewtopic.php?f=14&t=23273&p=107658&hilit=bmp085#p107658

Hallo,

so, ich habe jetzt sowohl Anfragen beim Hersteller und Vertreiber laufen, als auch den gleichen Thread im Sparkfun Forum gestartet - leider bis jetzt alles mit recht wenig Rücklauf. Ich bleibe aber dran!

@Tom: Hast du schon Erfolg gehabt? Wenn ja würde mich die Lösung brennend interessieren! Oder hast du schon aufgegeben?

Viele Grüße,

Florian

Ich hatte ähnliche Probleme mit dem SCP1000 über SPI: Der Sensor liefert Werte, die in etwa die Bedingungen auf dem Saturn widerspiegeln. Lösung: Bislang keine

Hallo Leidensgenossen,

PROBLEM GELÖST!!! Habe gestern einen neuen Sensor (nur diesen, kein Breakout) bekommen und auf Streifenraster gelötet. Was soll ich sagen - der Beispielcode aus den I-net funktioniert einfach! Da es mittlerweile ja einige gibt, die dieses spezielle Problem haben, gehe ich mal davon aus, dass Sparkfun da irgendwie kaputte Sensoren abbekommen hat!

Also einfach mal ´nen anderen verwenden und dann läuft´s!

Danke für eure Hilfe!!!

Gruß,

Florian

Und nicht vergessen den defekten zum Umstausch zurückschicken !

Hallo,

ich hatte vor ein paar Tagen auch nochmal ein zweites Sparkfun BMP085 Board bestellt (diesmal aber bei bei einem anderen Händler). Habe es heute bekommen und angeschlossen. Und siehe da - es funktionierte gleich zu Beginn einwandfrei! Die Temperaturwerte sind plausibel und reagieren sehr schnell z.B. auf Fingerwärme. Also war auch mein erstes Sensor Board gleich von Anfang an defekt!

Die Luftdruckwerte sind etwas geringer als die Werte der Wetterdienste im Internet (970 statt 1010 hPa). Liegt dies vielleicht daran, dass ich den Sensor in meinem Zimmer und nicht außen habe? Hat jemand Erfahrungen mit den Luftdruckwerten des Sensors?

Viele Grüße Thomas

Hallo TomTom Nein, Zimmer oder draußen macht keinen Unterschied. Der Luftdruck hängt von der Höhe ab; ca 1 hPa je 8 Meter. Grüße Uwe

Macht dann einen Höhenunterschied von 320 Meter. Liegt die Wettermessstation wohl etwas höher als Du selber.

Hallo,

Florian hat mir den Tipp gegeben, dass die Werte der Wetterstationen meistens auf Meereshöhe (MSL) zurückgerechnet sind. Da ich (leider) kein Strandhaus am Meer habe, sondern mich auf ca. 350m über Meereshöhe befinde, kommt es mit den 8hPa pro Höhenmeter von uwefed wirklich sehr genau hin. Nochmals vielen Dank an alle!

Viele Grüße TomTom