Moin, ich möchte gerne beim einem STM32F103 Controller nutzen um hiermit über den I2C-Bus mehrere Geräte zu betrieben. Voraussetzung ist, dass der I2C1 als Master und der I2C2 als Slave deklariert wird. Das liegt daran, dass der Controller selbst als Slave in einem Bus angeschlossen ist und auf Befehle von einem Master wartet. Bei einem Befehl soll dann über den anderen I2C-Bus der Controller als Master arbeiten und mehrere Sensoren ansprechen, dazu gehört auch ein BME680. Die Beiden I2C-Busse liegen an den Pins vom STM32 wie folgt an: SDA1 -> PB7 SCL1 -> PB6 SDA2 -> PB11 SCL2 ->PB10 Das Problem ist, dass keine der Vorhanden Libary’s im Zusammenhang mit I2C2 und dem BME680 funktioniert! 1.Möglichkeit mit „TwoWire“ (TwoWire myWire1 (1, I2C_FAST_MODE);) Fehlermeldung: Der Code hängt sich bei der Initialisierung vom BME auf 2.Möglichkeit mit „Wire“ und „Wire1“ (#include <Wire_slave.h>) Fehlermeldung: Der Code hängt sich bei der Initialisierung vom BME auf Der Code selbst funktioniert fehlerfrei. Das heißt, wenn ich nur einen der jeweiligen I2C-Kanäle nutze kann ich den Sensor ansprechen und auslesen. Nur die Kombination aus beiden I2C-Kanälen funktioniert der Code nicht. Als Libary’s nutze ich die „Adafruit_BME680“. Eine weitere wäre die „BME680 von SV-Zahnshin“. Diese funktioniert aber von Grund auf nicht! Hat jemand vielleicht eine Idee oder Tipp wie es möglich ist beim STM32 beide I2C-Kanäle zu nutzen (den einen als Slave, den Anderen als Master) und dabei einen BME680 an zu sprechen??? Ich würde schon fast darauf tippen, dass auch der BME280 oder BMP280 nicht geht. Master --- BUS ----><--(Slave)###STM32F103###(Master)-->BME680...
Da das alles Open-Source ist, hast hier eine gute Gelegenheit, die Bibliotheken zu verbessern. Und wenn du möchtest, kannst du den geänderten Code wieder veröffentlichen. Diese Projekte beruhen auf gegenseitigem Geben und Nehmen.
:
Bearbeitet durch User
Die üblichen I²C Libs unterstützen oft nur den Betrieb als Master. Als Slave müsste man irgendwo die I²C Adresse einstellen können, das sehe ich im geposteten Code überhaupt nicht. Was ist der Master? Wenn ein µC als I²C Slave benutzt wird, müsste der Master üblicherweise Clock Stretching unterstützen. Dabei fällt einiges - IIRC der RPi - raus.
Sorry für die späte Rückmeldung Ich habe jetzt viele Sachen ausprobiert. Leider bisher nicht ganz zum Erfolg. Mit der Libary "#include <Wire_slave.h>" ist es mir möglich die Komponenten so anzusprechen, dass ich einen Funktionierenden Slave & Master-Bus am STM habe. Auch weitere I2C Sensoren kann ich als Master ansprechen und als Slave die Daten weitergeben. Es funktioniert nur der BME680 nicht! Mir ist es bisher nicht gelungen die Libary so anzupassen, dass diese nicht mehr über <Wire.h> sondern über <Wire_slave.h> läuft. Als Libary für den BME nutze ich die "Adafruit_BME680.h"
:
Bearbeitet durch User
ich möchte gerne: --> Adafruit_BME680(TwoWire *theWire = &Wire); mit der <SoftwareWire.h> nutzen Eine Veränderung von Adafruit_BME680(SoftwareWire *theWire = &Wire); ist nicht erlaubt. Weiß wer wo die "TwoWire*" definiert ist um diese dirch die SoftwareWire zu tauschen
:
Bearbeitet durch User
S. M. schrieb: > Weiß wer wo die "TwoWire*" definiert ist um diese > dirch die SoftwareWire zu tauschen Rechts drauf klicken, "Gehe zu Definition", und schon ist das richtige File offen. Leider sieht die Adafruit-Library den Austausch nicht wirklich vor.
:
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.