Ist mein bmp085 kaputt?

Guten Tag,
Heute ist mein bmp085 angekommen. (dieses teil hier http://www.amazon.de/gp/product/B0090XB5GQ/ref=oh_details_o02_s00_i02?ie=UTF8&psc=1)

Voller Vorfreude wollte ich den an mein mega board anschließen und Prüfen mit diesem Sketch ( Arduino Playground - I2cScanner)

leider kommt da in der Konsole nur "No I2C devices found"

Ist das ding kaputt?
Sollte ich es lieber einschicken, oder kann ich es auch irgendwie anders Prüfen?
MFG

vivianmeally:
Ist das ding kaputt?

Wenn Du das Ding nicht schon selbst kaputtgespielt hast, wahrscheinlich nicht.
Falsch angeschlossen ist wahrscheinlicher.

vivianmeally:
Sollte ich es lieber einschicken, oder kann ich es auch irgendwie anders Prüfen?

Wenn Du ein Multimeter mit Voltbereich hast, kannst Du mal diesen einfachen Test-Sketch laufen lassen:

#include <Wire.h>

void setup()
{
  Wire.begin();
}

void loop(){
}

Der Sketch macht nichts anderes als die I2C Schnittstelle zu aktivieren.

Wie hoch ist die Spannung, die Du dann bei angeschlossenem Sensor an den SDA und SCL Pins messen kannst?

Welche Pins hast Du am Arduino MEGa für den I2C Bus genommen.
grüße Uwe

Bei mega ist sda 20 und scl 21, so habe ich das auch verbunden.
Multimeter zeigt mit deinem test sketch 3.2V bei sda und 0.03V bei scl

vivianmeally:
Bei mega ist sda 20 und scl 21, so habe ich das auch verbunden.
Multimeter zeigt mit deinem test sketch 3.2V bei sda und 0.03V bei scl

Wie SDA unter 3.3 Volt liegen kann ist mir zwar schleierhaft, aber das sollte in Ordnung gehen.

Was allerdings gar nicht geht, sind 0,03V an SCL.

Beide Leitungen müssen mit PullUp-Widerständen auf die Betriebsspannung des BMP085 von ca. 3.3V hochgezogen werden. Ohne eine auf circa 3.3V hochgezogene Clock-Leitung kann der BMP085 auch keine Daten heraustakten.

Wie sieht es aus, wenn Du einen zusätzlichen PullUp-Widerstand (irgendwas von 2.2K bis 4.7K) von 3.3V nach SCL legst und SCL damit pullst?

Vielen Dank, ein pullpup wiederstand von 4.7k hat geholfen. Funktioniert jetzt alles.

Aber wieso wird in jedem Tutorial das ich im netz gefunden habe, ohne die 2 wiederstände verbunden?
Und anscheinend funktioniert das bei denen.

hi,

viele module haben die pullups auf der platine. erleichtert den aufbau, aber wenn Du mehrere module anschließt, hast Du den scherben auf...

gruß stefan

vivianmeally:
Vielen Dank, ein pullpup wiederstand von 4.7k hat geholfen. Funktioniert jetzt alles.

Na prima!

vivianmeally:
Aber wieso wird in jedem Tutorial das ich im netz gefunden habe, ohne die 2 wiederstände verbunden?
Und anscheinend funktioniert das bei denen.

Wenn Du solche fertigen "Modul-Platinen mit BMP085 und SMD-Kleinkram" kaufst, sind da die PullUp-Widerstände normalerweise auf der Platine drauf und sorgen für das Pullen der SDA- und SCL-Leitungen. Also brauchst du keine zusätzlichen PullUps.

In Wirklichkeit passiert auf dem Arduino sogar das:
Mit wire.begin() aktivierst Du die (sehr schwachen weil hochohmigen) internen PullUps am Arduino, die SDA und SCL auf 5V pullen würden. Damit würden 5V I2C-Sensoren funktionieren, wenn sie "nackt" angeschlossen werden.

Auf so einer Platine wie Du sie mit dem BMP085 hast, sind "normale" (stärkere und nicht ganz so hochohmige) PullUps eingebaut, und wenn Du die Platine mit 3.3V versorgst, pullen diese auf der Platine vorhandenen PullUps die Spannung in Richtung 3.3V. Zusammen mit den aktiven internen schwachen 5V PullUps des Arduino ergibt sich dann an SDA und SCL eine Spannung von meist knappen 3,6 Volt.

Also funktionieren am Arduino I2C-Sensoren

  • wenn Du sie "nackt" ohne PullUps anschließt und es 5V-Sensoren sind
  • wenn Du eine Platine mit 5V PullUps anschließt und es 5V-Sensoren sind
  • wenn Du eine Platine mit 3.3V PullUps anschließt und es 3.3V Sensoren sind

Probleme für Arduino-User mit I2C ergeben sich erst dann, wenn jemand in Mischbestückung gleichzeitig 5V und 3.3V Sensoren betreiben möchte. Aber der Fall liegt bei Dir ja nicht vor.

Was an Deiner Schaltung genau defekt ist, kann ich so nicht diagnostizieren, aber irgendwas ist da faul.

Falls als einziger PullUp der interne PullUp des Arduino aktiv wäre, der mit wire.begin aktiviert wird, sollte die Spannung bei ca. 5V liegen. Falls als einziger PullUp der externe PullUp der angeschlossenen Platine aktiv ist, sollte die Spannung bei 3.3V liegen. Und falls sowohl der interne PullUp des Arduino als auch der externe PullUp der angeschlossenen Platine aktiv ist, sollte die Spannung bei ca. 3.6 V liegen.

Die 0,03V kann ich mir nicht erklären.
In Frage käme ein Kurzschluss am PullUp, aber das kann es ja auch nicht sein, wenn Du mit einem zusätzlichen externen PullUp die Spannung dann doch wieder auf 3.3V gepullt bekommst, so dass der Sensor funktioniert.

Hast Du mal Deine Platine mit dem Bild des Anbieters verglichen? Fehlt vielleicht irgendein kleines SMD Bauteil auf Deiner Platine und ist nicht bestückt, obwohl es vorhanden sein sollte?

Auch wenn ich Dir mit dem zusätzlichen externen PullUp an SCL eine Lösung anbieten konnte, wie Du den Sensor nun nutzen kannst: Was genau bei Dir schiefläuft oder defekt ist, kann ich mir nicht erklären.

P.S.: Du könntest auch nochmal testen, ob die internen PullUps am Arduino an SDA und SCL in Ordnung sind. Selber Test-Sketch wie oben, aber diemal OHNE die Sensorplatine anzuschließen. Dann sollte an SDA und SCL eine Spannung in der Größenordnung von Arduino-VCC messbar sein