BMP180 - Correct i2c address detected but no data

Hi all,
I have 2 BMP180 that i'm trying to get working (one at the time, of course!)

using rob tillaart's multispeed i2c port scanner I was able to see that my Arduino Uno r3 correctly picks up this:

  1. 0x77 for speeds 100 and upward, 0x00 for 50KHz.
  2. 0x77 for speeds 100KHz and upward

Other i2c port scanner give a similar result.

Now, I was not able to get these sensors working with any of the library that I found (Adafruit, SF, not even with my jeenode).

I am fairly convinced I am doing something wrong, since it's not very likely that both of the boards are not working.

Soldering seems OK in both sensors, and nothing else is plugged in my arduino uno (only 3v3 to VCC, GND to GND, A5 to SCL and A4 to SDA).

I am very puzzled, can anyone point me on the next thing that I could do/check to get these sensors working?

do you have pull up resistors on both SCL and DATA line (4K7 or so, longer lines => smaller resistors)

robtillaart:
do you have pull up resistors on both SCL and DATA line (4K7 or so, longer lines => smaller resistors)

I think the breakout has them already:

I tried with other two 4.7k resistors, and the story is the same, apart from the fact that 100KHz was now not detected by your multispeed scanner.

From the photo, it looks like that breakout has a voltage regulator. Maybe it's expecting a 5V supply on Vcc which it reduces to 3.3V?

As far as I know, accepts both 5V and 3.3V, and I assumed you could use both in VCC pin. The tutorial of Adafruit seems to reinforce my impression: Wiring the BMP | Bosch BMP085 Breakout Board | Adafruit Learning System

their sensor has only one input for current, VIN,

and my board has essentially the same components.

I found the board you have on eBay. Description says 3.3V supply should be connected to 3.3 pin. Minimum on Vcc is 3.6V.

This may not be the cause of your problem but it's worth eliminating it.

That is an Adafruit BMP180 board. It expects 5 volts on Vin. It has an onboard regulator.

0x77 is the correct address.

Mine doesn't need external pullups on the SDA and SCL lines. The processor has them built in and active when you start the I2C bus.

FYI: It works with 5 volt logic (Mega2560) or 3.3 volt logic (Due), but needs 5 volts on Vin for both.

Hackscribble:
I found the board you have on eBay. Description says 3.3V supply should be connected to 3.3 pin. Minimum on Vcc is 3.6V.

http://pages.ebay.com/link/?nav=item.view&alt=web&id=251744416712&globalID=EBAY-GB

This may not be the cause of your problem but it's worth eliminating it.

The problem is, when i connect the VCC to 5V, then it does not show up at all even in the MultispeedI2CScanner :o

Anyway, even connecting 3.3V to the 3v3 pin, it's the same. shows up in i2c scanner but not with example sketches for it.

Maybe the board's regulator has failed. If you connect 5 volts on Vin, do you get 3.3 volts on the 3vo pin?

Here is the page at Adafruit describing your board.

Using the sensor is easy. For example, if you're using an Arduino, simply connect the VIN pin to the 5V voltage pin, GND to ground, SCL to I2C Clock (Analog 5) and SDA to I2C Data (Analog 4).

The Adafruit BMP180 board will actually work just fine with Vin at 3.3V or even lower. I had mine connected to a coin cell battery yesterday. Vin was 2.78V and the "3Vo" output was 2.74V. The sensor chip will run at 1.8V.

@jboyton: Have you tried powering the board by connecting the coin cell battery to the 3vo pin?

No. But I have it on a breadboard of sorts so it would be easy to try.

edit: It worked. Both 3vo and Vin had the same voltage, about 2.8V.

Then I would suspect a hardware failure on the OP's board. If the OP doesn't get close to the same readings you do, except for the adjustment to 3.3 volts, then that would confirm it.

Connecting a 3.3V I2C module to an 5V Arduino is problematic. In detail when the board contains an voltage regulator, this means that the sensor chip only works on 3.3V, and does not support 5V on its I2C data lines - either the 5V Arduino does not detect the signals from the module, or the module is killed when pullups to 5V are added. Add an I2C level shifter and try again.

Or turn off the internal pullups on the Arduino.
After Wire (begin)
add digitalWrite (A4, LOW);
digitalWrite (A5, LOW);
to turn off the pullups to 5V, then add external pullups to 3.3V, that should be all that is needed.

DrDiettrich:
Connecting a 3.3V I2C module to an 5V Arduino is problematic. In detail when the board contains an voltage regulator, this means that the sensor chip only works on 3.3V, and does not support 5V on its I2C data lines - either the 5V Arduino does not detect the signals from the module, or the module is killed when pullups to 5V are added. Add an I2C level shifter and try again.

The level shifter (logic level converter) is on the Adafruit board.

This board is 5V compliant - a 3.3V regulator and a i2c level shifter circuit is included so you can use this sensor safely with 5V logic and power.

SurferTim:
Then I would suspect a hardware failure on the OP's board. If the OP doesn't get close to the same readings you do, except for the adjustment to 3.3 volts, then that would confirm it.

He doesn't have an Adafruit board. He's got something from eBay.

DrDiettrich:
Connecting a 3.3V I2C module to an 5V Arduino is problematic. In detail when the board contains an voltage regulator, this means that the sensor chip only works on 3.3V, and does not support 5V on its I2C data lines - either the 5V Arduino does not detect the signals from the module, or the module is killed when pullups to 5V are added. Add an I2C level shifter and try again.

In the case of the BMP180 this turns out to not be the case. The I2C lines are 5V tolerant, even though the chip only operates at 1.8-3.6V. And if SDA is only pulled up to 3.3V it will still be read as logic 1 by a 5V Arduino.

My bad on the board. The OP showed an Adafruit BMP085 (previous version of BMP180) board in reply #4, but a different board in reply #2. The board in reply #2 does not have a logic level converter.

The OP should have gone with the Adafruit board. Just my opinion...

In the case of the BMP180 this turns out to not be the case. The I2C lines are 5V tolerant, even though the chip only operates at 1.8-3.6V.

There is no indication in the BMP180 data sheet that the data lines are 5V tolerant. Indeed it is quite clear that they are not. The absolute maximum voltage on all pins is 4.25 V.

It is surprising that the chip reacted at all to the I2C scanner, but perhaps that was its death cry.