Forum: Mikrocontroller und Digitale Elektronik BME280 und BMP280 gleichzeitig nutzen. Geht das?


von Pete (Gast)


Lesenswert?

Hallo,

ich möchte einen BME280 und einen BMP280 gleichzeitig am I2C auslesen. 
Habe ich nur den BMP280 angeschlossen funktioniert alles. Aber schliesse 
ich den BME280 mit an, wird der BMP280 nicht mehr gefunden. Ich vermute 
die benutzen beide die Adresse 0x76. Geht es deshalb schief? Sind doch 
zwei unterschiedliche Sensoren.

Grüße

von Chris D. (Gast)


Lesenswert?

Das geht nur, wenn beide unterschiedliche I2C Adressen haben. Sonst 
wissen die ja nicht, wer angesprochen wird.

Grüße
Christian

von Pete (Gast)


Lesenswert?

Blöd, dachte, da es ja unterschiedliche Sensoren sind sollte das 
gehen... OK, danke.

Gibt es eine Möglichkeit zu erkennen ob ein BME oder ein BMP 
angeschlossen ist. Mein scetch stürzt nach dem init gleich ab.

von Schorschi (Gast)


Lesenswert?

Soweit ich weiss kann bei den BMx280 die I2C Adresse gewechselt werden. 
Zudem kann er auch SPI. Siehe s.28 im Datenblatt.

Die I2C Adresse kann mittels SDO geändert werden:
- High: 0x77
- Low: 0x76

Mehr als 2 dieser ICs geht aber nicht mit I2C (dafür aber mit SPI)

von Schorschi (Gast)


Lesenswert?

Dies gilt übrigens für beide BME280 und BMP280. Du kannst also mit 
(leichter) HW Änderung mit beiden kommunizieren.

von Schorschi (Gast)


Lesenswert?

Pete schrieb:
> Ich vermute
> die benutzen beide die Adresse 0x76. Geht es deshalb schief? Sind doch
> zwei unterschiedliche Sensoren.

Ja, aber ein Blick ins Datenblatt zeigt, dass beide die gleiche Adresse 
haben.

von Pete (Gast)


Lesenswert?

OK, danke. Werde mal sehen, ob ich das mit der Änderung über SD0 
hinbekomme. Habe ich hier schon einmal irgendwo gelesen...

Aber wie kann ich verhindern, dass wenn zb. der BME angeschlossen ist, 
der scetch nicht abstürzt.

Nach:

if (!bmp.begin()) {
    Serial.println(F("Could not find a valid BMP280 sensor, check 
wiring!"));
    while (1);
  }

resetet mein Wemos gleich.

Grüße...

von Schorschi (Gast)


Lesenswert?

Haben beide dieselbe Adresse? Dann musst du einen weg nehmen. 
Funktioniert NUR der BMP sowie NUR der BME?
Wahrscheinlich antworten dann beide ICs auf deine bmp.begin Meldung. Die 
beiden ICs funktionieren nämlich beinahe identisch, ausser dem 
zusätzlichen Sensor im BMP. Aber sie haben den selben Startcode

von Pete (Gast)


Lesenswert?

Ja denke auch die reagieren beide auf begin. Ich glaube ich löse das 
einfach durch weglassen des BME280. Der ist eh unzuverlässig im 
Außen-Betrieb ohne Schutzmaßnahmen. Ich hatte nur vor einem 
Multi-Außensensor zu bauen, in dem "on the fly" die Sensoren zwischen 
SHT BME und BMP getauscht bzw kombiniert werden können. Und per Software 
automatisch erkannt werden.

Grüße...

von pegel (Gast)


Lesenswert?

Na ja, Adressen lassen sich wie geschrieben mit SDO umschalten.
Beide haben auch ein ID Register 0xD0 mit unterschiedlichem Inhalt.

von Patsche@web.de (Gast)


Lesenswert?

Moin,

Du kannst aber auch den einen Sensor an den Hard-i2c Bus hängen und den 
2. per soft-i2c betreiben.

von Andy (Gast)


Lesenswert?

Pete schrieb:
> if (!bmp.begin()) {
>     Serial.println(F("Could not find a valid BMP280 sensor, check
> wiring!"));
>     while (1);
>   }
>
> resetet mein Wemos gleich.

versuch mal statt:
 while(1);

dieses:
 while(1) {
   yield();  // oder: delay(1);
 }

auf einem wemos sitzt ein ESP8266, den darfst du nicht in eine 
endlosschleife wie einen AVR schicken. Delay geht beim ESP auch durch 
yield.

von Pete (Gast)


Lesenswert?

Ok. Danke werde das mal probieren...

von Maxim B. (max182)


Lesenswert?

Pete schrieb:
> Ja denke auch die reagieren beide auf begin. Ich glaube ich löse das
> einfach durch weglassen des BME280.

Wenn beide Adressen identisch sind und kaum zu ändern, gibt es immer 
noch zwei Lösungen:
1. Software-I2C.
2. PCA9517 oder Ähnliche als I2C-Trennung.

von Wolfgang (Gast)


Lesenswert?

Schorschi schrieb:
> Ja, aber ein Blick ins Datenblatt zeigt, dass beide die gleiche Adresse
> haben.

Dann solltest du auch mal einen Blick ins Datenblatt tun. Für beide 
Sensoren, den BMP280 und den BME280 gibt es die Möglichkeit den Sensor 
wahlweise auf I2C Adresse 0x76 oder auf I2C Adresse 0x77 zu betreiben.
(Abschnitte 6.2 I2C Interface). Gesteuert wird dies über die 
Verschaltung vom SDO-Pin (Abschnitt 6.4 bzw. 7.2 Connection diagram 
I2C).

Sinnvollerweise wird man dann für parallelen Betrieb den einen auf 0x76 
und den anderen auf 0x77 betreiben, damit es nicht zu Konflikten kommt.

Maxim B. schrieb:
> Wenn beide Adressen identisch sind und kaum zu ändern, ...
Ist aber zu ändern - s.o.

Schorschi schrieb:
> Haben beide dieselbe Adresse? Dann musst du einen weg nehmen.
... oder den anderen auf der anderen Adresse betreiben.

von SP (Gast)


Lesenswert?

Maxim B. schrieb:
> 2. PCA9517 oder Ähnliche als I2C-Trennung.

Der PCA9517 ist ein Bus Repeater. Benötigt wird ein Multiplexer, wie 
z.B. der TCA9548A.

von Wolfgang (Gast)


Lesenswert?

SP schrieb:
> Der PCA9517 ist ein Bus Repeater. Benötigt wird ein Multiplexer, wie
> z.B. der TCA9548A.

Naja, zu solch einer Lösung wird man nur greifen, wenn man absolut nicht 
in der Lage ist, die I2C-Adressen bei den Sensoren geeignet zu 
konfigurieren.

von Maxim B. (max182)


Lesenswert?

SP schrieb:
> Der PCA9517 ist ein Bus Repeater. Benötigt wird ein Multiplexer, wie
> z.B. der TCA9548A.

PCA9517 hat Enable-Eingang, somit kann für Trennung von I2C-Bus benutzt 
werden - als Ergänzung für Hauptfunktion, Schaltpegel zu konvertieren.

Wolfgang schrieb:
> zu solch einer Lösung wird man nur greifen, wenn man absolut nicht
> in der Lage ist, die I2C-Adressen bei den Sensoren geeignet zu
> konfigurieren.
TO hat zu wenig über seine Platine berichtet. Möglicherweise hat er eine 
Platine, wo nicht alle IC-Eingänge herausgeführt sind. Bei Arduino-Zeug 
ist es oft so, leider.

: Bearbeitet durch User
von Holger L. (max5v)


Lesenswert?

Wenn es immer noch nicht laufen sollte, ich gehe mal von Arduino aus, 
ist hier ein i2c Scanner : 
https://playground.arduino.cc/Main/I2cScanner/

von Wolfgang (Gast)


Lesenswert?

Holger L. schrieb:
> Wenn es immer noch nicht laufen sollte, ich gehe mal von Arduino aus,
> ist hier ein i2c Scanner :
> https://playground.arduino.cc/Main/I2cScanner/

Aber welchen Erkenntnisgewinn soll der Scanner bringen, wenn beide auf 
der selben Adresse sitzen und einer alleine funktioniert?

von Holger L. (max5v)


Lesenswert?

Wolfgang schrieb:
> Aber welchen Erkenntnisgewinn soll der Scanner bringen, wenn beide auf
> der selben Adresse sitzen und einer alleine funktioniert?

Wer sagt denn das die Adressen richtig (oder gleich) sind, sowie die 
Bibliothek(en) solch einen Fehler in der Adressierung behandeln?
Um den Gedankengang in diesem Fall zu erklären: Fehlerhafter Code ist 
einem Hardware Fehler, welcher fast auszuschließen ist, da von diesen 
Sensoren nicht nur ein oder zwei existieren, relevanter.
Wen man 3.3V und 5V Sensoren ausschließt.

von Wolfgang (Gast)


Lesenswert?

Holger L. schrieb:
> Wer sagt denn das die Adressen richtig (oder gleich) sind, sowie die
> Bibliothek(en) solch einen Fehler in der Adressierung behandeln?

Zumindest der BMP280 läuft. Also wird die Adresse wohl stimmen.

Pete schrieb:
> Habe ich nur den BMP280 angeschlossen funktioniert alles.

Die Aktivität des TO hält sich leider in Grenzen und ob er auch mal 
versucht hat, den BME280 alleine zu betreiben, verschweigt er. Einen 
Logikanalysator im Gegenwert eines besseren Kantinenessens besitzt er 
wohl auch nicht, sonst hätte er damit schon längst mal geguckt, was los 
ist.

von M. K. (sylaina)


Lesenswert?

Pete schrieb:
> Gibt es eine Möglichkeit zu erkennen ob ein BME oder ein BMP
> angeschlossen ist

Ja, Chip-ID auslesen.

Ich hab selbst auch mal ne Lib für den BME280 geschrieben 
(http://www.github.com/sylaina/bme280) und vor ein/zwei Wochen die Lib 
auf Multisensorbetrieb umgeschrieben, bisher hab ich das aber noch nicht 
getestet und daher mein github daher noch nicht aktualisiert.

: Bearbeitet durch User
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.