Forum: Mikrocontroller und Digitale Elektronik BMP280 am I2C Bus


von Johannes (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe ein paar Luftdrucksenoren BMP280 gekauft.

Ich verwende die Arduino IDE 1.6 die die Standard Libraries SPI und Wire 
behinhalten.
Zuätzlich die Library Adafruit Bmp280 und Sensor

Es funktioniert wunderbar am SPI-Bus.

Leider wird am I2C kein Senso erkannt.
Mein Testprogramm findet aber was an 0x76.

Die Beschreibung auf ADAfruit sagt das die Software auf 0x77 abgestimmt 
ist.
Das wird mein Problem sein, ich weis aber nicht wo ich was editieren 
muss damit es funzt.

Für Eure Hilfe wäre ich dankbar.

von Michael U. (amiga)


Lesenswert?

Hallo,

keine Ahnung, welche BME280-Lib Du benutzt:

bme.begin(0x76)

sollte helfen.

Gruß aus Berlin
Michael

von Wolfgang (Gast)


Lesenswert?

Johannes schrieb:
> Das wird mein Problem sein, ich weis aber nicht wo ich was editieren
> muss damit es funzt.

In deinem Programm bzw. deiner Bibliothek. Das kommt drauf an, wie die 
aussehen. Du kannst auch den Pegel am SDO-Pin ändern.

von Johannes K. (johngun) Benutzerseite


Lesenswert?

bme.begin(0x76) Den hatte ich schon probiert.
Das wars nich.

Ich werd aber mal den SD0 auf Ground ziehen. Mal sehen was passiert.

von Michael U. (amiga)


Lesenswert?

Hallo,

wenn es die Adafruit_BME280_Library-master ist, sollte es klappen. Falls 
es die BME280-master ist, da hat wohl jemand etwas gepfuscht.
In der BME280_MOD-1022.h die Adresse von Hand ändern.

SDO auf GND geht natürlich auch, bei meinem BME280 ist SDO nicht 
rausgeführt, da hätte ich erst rumkratzen müssen.

Gruß aus Berlin
Michael

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Johannes K. schrieb:
> Ich werd aber mal den SD0 auf Ground ziehen. Mal sehen was passiert.

Nichts.

Falls dein Testprogramm nicht irgendwelchen Unfug ausspuckt oder du 
nicht noch irgendein anderes I2C-Device mit Adresse 0x76 dem Bus liegen 
hast,  liegt der SDO vom BMP280 bereits auf Gnd. Sonst würde er nicht 
auf der Adresse 0x76 reagieren.

Zitat aus dem Datenblatt:
"Connecting SDO to GND results in slave address 1110110 (0x76);"

Johannes schrieb:
> Mein Testprogramm findet aber was an 0x76.

von Johannes K. (johngun) Benutzerseite


Lesenswert?

Wolfgang schrieb:
> Falls dein Testprogramm nicht irgendwelchen Unfug ausspuckt oder du
> nicht noch irgendein anderes I2C-Device mit Adresse 0x76 dem Bus liegen
> hast,  liegt der SDO vom BMP280 bereits auf Gnd. Sonst würde er nicht
> auf der Adresse 0x76 reagieren.

Ist nur der BMP dran. SD0 kann auch nicht von Haus aus auf GND liegen 
weil die SPI SChnittstelle wunderbar funzt.

Ich hasse es wenn man sich über dieses Chinesenzeug für 1,50€ tagelang 
Gedanken machen muss.
Vermutlich werde ich auf I2C verzichen und mal andere bestellen.

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Johannes K. schrieb:
> SD0 kann auch nicht von Haus aus auf GND liegen
> weil die SPI SChnittstelle wunderbar funzt.

Das ist doch kein Argument.

Warum soll auf deinem Board SDO nicht z.B. über einen Pull-Down auf Gnd 
gezogen sein. Guck einfach mal auf den Schaltplan oder miss nach, auf 
welchem Pegel SDO liegt.

> Ich hasse es wenn man sich über dieses Chinesenzeug für 1,50€ tagelang
> Gedanken machen muss.

Da können doch die Chinesen nichts für, wenn du tagelang brauchst, um in 
deiner Software die I2C-Adresse auf 0x76 zu setzen.

von Michael U. (amiga)


Lesenswert?

Hallo,

Wolfgang schrieb:
> Johannes K. schrieb:
>> Ich hasse es wenn man sich über dieses Chinesenzeug für 1,50€ tagelang
>> Gedanken machen muss.
>
> Da können doch die Chinesen nichts für, wenn du tagelang brauchst, um in
> deiner Software die I2C-Adresse auf 0x76 zu setzen.

da kann ich nur zustimmen. Meist gibt es mehrere Modulvarianten aus 
China, Displays mit anderen Controllern und unsinnigen Beschriftungen.
Meine BME280-Module haben SDO garnicht rausgeführt, Adresse ist fest 
0x76, steht auch nirgends. I2C-Scan und Datenblatt des BME280 haben es 
mir genauso gesagt wie ihm.

Ich habe 2 Libs gefunden, die Adafruit sollte bme.begin(I2C-Adresse) 
eigentlich kennen, default ist aber 0x77. Ich habe noch eine zweite von 
einer BME-Modulseite mit etwas anderen Funktionen, die habe ich 
letztlich genommen, weil die für den ESP8266 sauber compilierte.
Die stammt von
https://www.embeddedadventures.com/bme280_weather_multi_sensor_mod-1022.html

Allerdings ist dort die Adresse per #define im headerfile der lib 
eingetragen und dort war auch die 0x77 hinterlegt. Geändert und gut.

PS: Die meiste Zeit habe ich damit verbracht, ein I2C-Scan für den 
ESP8266 zum Laufen zu bekommen, a) weil ich zu faul war, einen Arduino 
rauszukramen und b) weil ich sicher sein wollte, daß der Wire-Kram auf 
dem ESP lief.

Entweder billige China-Module kaufen und Spaß am Dazulernen haben oder 
"Originale" kaufen und hoffen, daß das auf Anhieb klappt.

Gruß aus Berlin
Michael

von Johannes K. (johngun) Benutzerseite


Lesenswert?

Danke, das wars
Es steht gleich oben zwischen den auskommentierten Zeilen in der 
Adafruit_BMP280.h

von Michael U. (amiga)


Lesenswert?

Hallo,

schön, wenn es jetzt klappt.

Trotzdem etwas eigenartig:

#define BME280_ADDRESS                (0x77)

Das ist die Vorbelegung der I2C-Adresse.

bool  begin(uint8_t addr = BME280_ADDRESS);

Das ist die Deklaration der Funktion begin()
Es wird also entweder nichts
begin()
erwartet, dann wird addr auf BME280_ADDRESS gesetzt
oder begin(addr)
dann wird addr auf den Wert gesetzt.

In der Funktion wird dann mit
bool Adafruit_BME280::begin(uint8_t a) {
  _i2caddr = a;
die interne Varuable gesetzt.

Ein Aufruf von begin(0x76) hätte hier also eigentlich funktionieren 
müssen.

Aber egal...

Gruß aus Berlin
Michael

: Bearbeitet durch User
von Romy (Gast)


Lesenswert?

Da ich eben auch vor dem Problem stand und falls es noch jemanden 
irgendwann interessieren sollte.
Neben der I2C-Adresse wird in der Funktion:
bool Adafruit_BME280::init() auch die ChipID auf 0x60 (für BME280) 
gelesen&geprüft.
Beim BMP280 (ohne Hydrosensor) ist die ChipID aber 0x58, weshalb init() 
mit false abbricht. Will man den BMP280 mit der AdafruitLib für den 
BME280 betreiben, muss man die Library dahingehend ändern, dass die 
andere ChipID akzeptiert wird.

von Michael (Gast)


Lesenswert?

Super Romy,
genau diese Info habe ich gerde gesucht...

Danke,
Michael aus Leverkusen

von M. K. (sylaina)


Lesenswert?

Öhm, wenn die Library heist ja nicht grundlos ... BME ... und ihr 
verwendet den BMP ;)

von Kurt (Gast)


Lesenswert?

Gibt es dann auch die Möglichkeit zwei BMx280 am I2C-Bus zu betreiben, 
also mit Adresse 0x76 und ox77?

von spess53 (Gast)


Lesenswert?

Hi

>Gibt es dann auch die Möglichkeit zwei BMx280 am I2C-Bus zu betreiben,
>also mit Adresse 0x76 und ox77?

Macht es so viel Mühe im Datenblatt vom BMP280 nach zu sehen?

-> 5.2 I²C Interface

MfG Spess

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.