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