Archiv verlassen und diese Seite im Standarddesign anzeigen : BME 280 gibt Rätsel auf
oderlachs
14.11.2016, 10:16
Hallo Freunde !
In der Projektierung meiner Wetterstation, wollte ich den Sensor von Bosch BME280 verwenden. Nun habe ich mal 2 PCB-Module a'la ChinaEbay geordert.
Da ich nun nicht sofort Zeilenlang C Code für den AVR tippen wollte, nahm ich einen Arduino DUE , wegen der 3,3V, zum Test.
Habe mit dem I"C-Scanner die Adresse 0x76 herausgefunden, da ich den Sensor im I2C Modus betreibe.
Nun habe ich mir mal die Libs und Header dazu angesehen, dort steht die Adresse 0x77. Gut er kann auch auf 0x76 umschalten durch Beschalten eines Pin an LOW.
Aber wie ich es auch halte , es wird nur Müll angezeigt... ?
Hat jemand Erfahrungen damit ? Bei mir sollen die BME280 später zusammen mit ESP8266 Modulen (Standallone) als externe Gartensensoren wirken.
Hat wer bitte vielleicht einen Tip/Hinweis für mich ??????
Mit besten Grüssen und Dank
Gerhard
Nachtrag : Schaltung BM280 PCB (https://ae01.alicdn.com/kf/HTB1uO_.JVXXXXc9XpXXq6xXFXXXQ/120336020/HTB1uO_.JVXXXXc9XpXXq6xXFXXXQ.jpg)
oberallgeier
14.11.2016, 11:42
.. Sensor .. Habe mit dem I"C-Scanner die Adresse 0x76 herausgefunden.. Libs und Header dazu .. steht die Adresse 0x77 .. Tip/Hinweis für mich ??? ..
Hallo Gerhard! Kleiner Tipp: I²C Sensoren werden ja (üblicherweise/immer) als Sklaven behandelt. Aber egal wie - die SCHREIBAdresse ist IMMER gerade, die LESEAdresse immer ungerade.
Siehe Beispiel, z.B. in meiner i2cmaster.h
..
#include <avr/io.h>
/** defines the data direction (reading from I2C device) in i2c_start(),i2c_rep_start() */
#define I2C_READ 1
/** defines the data direction (writing to I2C device) in i2c_start(),i2c_rep_start() */
#define I2C_WRITE 0
..
Und daher heissen bei mir z.B. die Schreib-/Lesebefehle:
..
if(!(i2c_start(SLAVE_MoCo+I2C_WRITE))) //Slave bereit zum schreiben?
..
i2cdmy = i2c_start(SLAVE_MoCo+I2C_READ); // <<<### Lesen beginnen
..
.. und damit kann ich brav nur EINE einzige I²C-Adresse je Bauteil verwenden - die wird durch die Schreib-/Lesezusätze beim Lesen bzw. Schreiben immer angepasst *gg*.
Hallo Gerhard,
ich habe eine Wetterstation mit einem China-BME280 schon mal gebaut: hier mein Blogeintrag mit Quellcodes (https://www.roboternetz.de/community/entries/353-Wetterstation) dazu.
Die I2C Adresse meines China-Moduls war auch 0x76. Ich habe die beschriebene Änderung auf 0x77 durch die SDO Pinbeschaltung nicht probiert, aber in deinem Schaltbild ist SDO gar nicht beschaltet. Lässt du den Pin frei?
Bei mir stellte sich heraus, dass kein BME280 sondern ein BMP280 auf der China-Platine verbaut war, ob wohl ich einen BME280 bestellt hatte. Das spielte in meinem Fall aber keine große Rolle.
Bei I2C Zugriff auf den BMP280 wird die Adresse nach links geshiftet und das Bit0 für Lesen/Schreiben entspr. gesetzt. Das ist glaub ich üblich bei I2C, aber schau mal nach, ob deine AVR Software das so macht. Nicht dass die 0xEC als Adresse erwartet.
Gruß
witkatz
oderlachs
14.11.2016, 12:11
Hallo Ihr Beiden !!
Vielen Dank für schnelle Antworten.
Witkatz: SDO ist auf der Lpl mittels 10k auf GND gezogen damit ..das sagt das Datenblatt:
The 7-bit device address is 111011x. The 6 MSB bits are fixed. The last bit is changeable by
SDO value and can be changed during operation. Connecting SDO to GND results in slave
address 1110110 (0x76); connection it to V DDIO results in slave address 1110111 (0x77), which
is the same as BMP280’s I2C address. The SDO pin cannot be left floating; if left floating, the
I2C address will be undefined.
The I2C interface uses the following pins:
SCK: serial clock (SCL)
SDI: data (SDA)
SDO: Slave address LSB (GND = ‘0’, V DDIO = ‘1’)
CSB must be connected to V DDIO to select I2C interface. SDI is bi-directional with open drain to
GND: it must be externally connected to V DDIO via a pull up resistor. Refer to chapter 7 for
connection instructions.
Habe SDO nun mit AtmegaPin verbunden und auf HIGH gelegt.....
Aber so ist es immer mit den Beispielen aus dem Web....das letzte Detail warum dort geht ist meist verborgen, gerade bei den Arduino Lib's sind so viel Verschiedenheiten.
An und für sich schreibe ich ja vieles selber, dann weiss ich was ich mache(oder auch nicht... ;) ).
Zu Zeit habe ich wegen der Jahreszeit sehr mit den Fingergelenken Probleme, so das mir Vorgefertigtes schon mal ganz gelegen kommt..
Ich werde mal beide Vorschläge von Euch betrachten.....bestimmt gibt es auch ein Lösung für mich..
Gruss und Dank
Gerhard
Bei I2C Zugriff auf den BMP280 wird die Adresse nach links geshiftet und das Bit0 für Lesen/Schreiben entspr. gesetzt. Das ist glaub ich üblich bei I2C ...
So steht es in der I2C Spezifikation. Da wird das erste Byte der Übertragung auch nicht Adresse sondern Adressbyte genannt. Ist aber wohl für so manchen Library-Schreiber zu kompliziert.
MfG Klebwax
oderlachs
15.11.2016, 09:45
Danke Klebwax auch für Deine Infos.
Ich bin momentan etwas in Zeitnot...da muss Hobby warten, aber icvh habe mir mal jetzt die Datenblätter zum durchlesen geladen...mal sehen was ich ich herausfinde, wenn ich damit die Lib's vergleiche
Gerhard
Nachtrag :
Habe wegen Regen heute doch noch weitermachen können. habe wenigstens da ich schon mit der I2C Verbindung experimentierte, meinen DS75 Temp Sensor sauber einlesen können.
Da war ähnliches Problem, es lag an der I2C Adresse, die komischerweise nicht mal in meinem Datenblatt zu finden war :(
Der dem BMP280 ähnliche Sensor, der BMP085 läuft einigermaßen bei mir, außer noch komische Werte bei Druck und Höhe , aber ich denke das ist ein Formelfehler.
Da muss ich nochmals die Lib's und Datenblätter zum 280 studieren...
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.