BMP-085 Pressure Sensor with ATMega168

Hello guys,

This is my first post here, so as usual a little introduction. I am an engineering student, involved in a "Cansat" contest in France.

I'm having some questions about BMP05 pressure sensors and their use with Arduino. I've got the thing working okay with my Arduino and now I'm looking at having a standalone circuit.

I bought this from Sparkfun : I had no problem wiring the sensor following this tutorial :

Now I'm a little surprised. The sensor must be powered with 3,3V (NOT 5V, it's over its max ratings) and it's using an I2C bus to communicate with the Arduino/ATMEGA168. No problem with this, they power it with 3,3v as well on the various tutorials found on the internet.

Although, it is explicitely said on the BMP05 datasheet (found here : that 3,3v should be used on I2C ports, for level high. This is the reason why Adafruit is selling a "5V Ready" version of its breakout board : using 5V -> 3,3V bidirectionnal level high conversion.

Arduino's are providing 5V level high outputs on Atmega168@16Mhz - and the various tutorials don't mention any level conversion. But the datasheet says it, and Adafruit is selling this "5V ready" board.

So I'm a little confused - especially because I'm using 5V on the communication lines and it's perfectly working. I'm afraid it may damage the sensor. I had similar problems using SPI to write on a SD-card (SD's are taking 3,3v for level high - and I had to use a voltage convertor). What would you guys do ? Leave it as is, buy the "5V ready" version, or use a little resistor on both lines ?

Thanks for your precious advice ;) !


Could you change the subject in your first post. The sensor is called BMP085, you omit the '8'.

The problem you noticed could be a problem, and many posts have been written about it. This is a page about it:

Since the I2C bus is open collector with pullup resistors, a small difference in voltages is allowed. The pullup resistors on the breakout board (two 4k7 resistors) are connected to 3.3V. So the high level of the I2C bus will be 3.3V. The ATmega168 might see that as a high level, and most of the times it does. It is however on the edge of the specifications. If you can lower the voltage of the ATmega168 to 3.3V ... 4.5V, you don't need a level shifter. If the voltage could be 5.25V, you do need a level shifter.

Thanks very much for the detailled explanation :) ! I'll use a level shifter then ;) !