BMP085 on a custom shield - faultfinding problems.

i've got a BMP085 pressure module from sparkfun. Barometric Pressure Sensor - BMP085 Breakout - SEN-11282 - SparkFun Electronics

when I wire it to an arduino mega via jump leads it works fine. when I solder it into my homemade shield it doesn't work (using the sparkfun supplied sketch it hangs at "Wire.endTransmission();")

when I de-solder it and connect it via jump leads again it still works. (in fact, I've removed / replaced it several times now!)

Ok, so it must be a problem with my shield. I know the design itself is sound because this is my third shield of identical design (and the first 2 worked fine). The pressure module only has 5 wires, and I've 'buzzed' them all through with a multimeter so I know all the wires go from the module to the arduino ok. I've also done my best to confirm that there are no shorts on the board (a bit harder to do since there are so many more possible combinations of tracks that may be shorting together). the three other major components of my sheild all work fine, a GPS unit, 16*2 LCD display and SD card. The pressure module is the only device using the SCL and SDA lines so there can't be any conflict with other devices, and finally I've confirmed that there is 3.3volts on the power pin of the module when it's all plugged in.

I'm running out of ideas about what to check, I don't have access to an oscilloscope, so can't check what's going down the SCL/SDA lines.

Anything I've missed? i'm running out of ideas! All suggestions welcome.

Hard to say without seeing the design for your shield.

Run the i2c scanner
http://playground.arduino.cc/Main/I2cScanner

Do you have a 3.3V I2C bus ?
Is your shield connected to the Mega ?
The Mega has 10k pullup resistors on the board for the I2C bus, so you need a level shifter for a 3.3V I2C bus.

How many pullup resistors are there (combined of all modules and all shields and arduino).
I had a component that has a weak I2C, I think it was the BMP085. So with too many pullup resistors the BMP085 might be the first one to stop working.
The ideal situation is a single 4k7. If you use a level shifter, the 3.3V and 5V combined should be 4k7, that is 10k on 3.3V side and 10k on 5V side and nothing else.
If you use a level shifter with 10k pullup resistors on both sides, the Mega adds an extra 10k, so the result is already a low impedance.

Run the i2c scanner

Good idea - I'll give that a go.

Is your shield connected to the Mega ?

yes
I've seen several examples posted that DON'T suggest the use of a buffer, for example.... http://bildr.org/2011/06/bmp085-arduino/ I've used the module on several other designs and haven't had to buffer it before.

Hard to say without seeing the design for your shield.

doesn't the fact that this is the 3rd copy of the same design (and the other 2 work) indicate that the design is sound?

cheers

Got it! (well almost!)

I failed at this point...

I've also done my best to confirm that there are no shorts on the board (a bit harder to do since there are so many more possible combinations of tracks that may be shorting together).

i've just discovered there is a short! the SDA pin is connected to the 5v pin. Still haven't discovered exactly where this short is happening but at least I know what I'm looking for!

Phew - I wasn't looking forward to creating another board!

solved!

Just a follow on in case anyone's interested.

My shield was created using eagle, when I printed out the top layer onto a transparent sheet prior to UV exposure I selected (as normal) top, via and pads. I didn't realise that I'd also accidentally left 'holes' active (there's only one hole on my shield and I never actually bother to drill it) This produced a very, very thin circle on the transfer sheet, which went on to produce a very very thin circle of copper on the pcb that shorted two tracks together. When I made earlier versions of this board I must have left it in the etchant for just a few seconds longer - enough to eat through those very thin tracks!

thanks for the suggestions