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
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.
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)
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.
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...
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
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...
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.
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.
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.
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.
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.
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?
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.
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.
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.