Forum: Mikrocontroller und Digitale Elektronik i2c & Arduino 2 Master


von Sebastian M. (meeresgott)


Lesenswert?

Hallo,

ich habe eine Uhr mit Hilfe eines Atmega328p und einem DS3231 (RTC) 
Modules gebaut. Die Kommunikation der beiden wird durch das 
I2C-Interface bewerkstelligt.

Seit dem ist ein wenig Zeit vergangen und die Anforderungen haben sich 
geändert sodass die Uhr Internet fähig sein muss. Dafür habe ich mir den 
ESP-12N ausgesucht. Leider ist sämtliche Hardware die zur Anzeige der 
Zeit verwendet wird auf 5V ausgelegt und ich kann den Atmega nicht 
einfach durch den ESP ersetzten sondern müsste die ganze "Treiber" stufe 
neu dimensionieren.

Die Internet-Schnittstelle wird eigentlich nur gebraucht um 
Steuersignale an die Uhr zu übermitteln.

Deshalb dachte ich mir, dass ich den ESP als Master verwende und den 
Atmega als Slave.

Das RX-TX Interface der beiden kann ich nicht verwenden, da dieses 
bereits verwendet wird ebenso wie das SPI.

Deshalb kam ich zu dem Schluss, dass ich die Kommunikation auch hier 
über I2C machen möchte nur habe ich jetzt ein Problem.

Der Atmega ist der Master von dem RTC-Slave und der ESP ist der Master 
vom Atmega Slave. Mir bekannt sind nur I2C Verwendungen mit einem Master 
und mehren Slaves.
Jetzt habe ich das Problem, dass ich eine Hierarchie habe und ich weiß 
nicht wie ich diese abbilden kann.

Hat jemand damit schon Erfahrungen gemacht ? Ist es überhaupt Möglich ? 
Oder kann ich einfach Munter alle Miteinander verbinden und die 
Kommunikation funktioniert weiter, da jedes Module schließlich über eine 
Adresse verfügt.
Falls das Klappt wie sieht das mit Kollisionen aus ?

Wenn der Atmega grade eine Request an das RTC-Module schickt während der 
ESP ein Steuersignal schickt ?

Leider habe ich nicht die Resourcen hier um eine kleine Testumgebung zu 
bauen. Deshalb wäre ich wie gesagt froh über eure Erfahrungen.

Viele Grüße

von Guest (Gast)


Lesenswert?

I2C kann man theoretisch mit mehreren Mastern betreiben. Die Master 
müssen den Multi Master Betrieb unterstützen und sowohl „Bus busy 
detection“ als auch Arbitrierung unterstützen. Da findet sich recht viel 
online ich meine da auch mal was für Arduino gesehen zu haben.

von Einer K. (Gast)


Lesenswert?

Die AVR Arduino Wire.h ist Multimaster fähig.
Von Hause aus.
Kann sowohl Slave, als auch Master Rolle spielen.

Über die ESP Variante kann ich nichts sagen, außer, dass sie nur den 
MasterMode kennt, und eine Software Implementierung ist.


Über einen Levelshifter, solltest du die Drei zusammenklemmen können.

von Frank K. (fchk)


Lesenswert?

Das einfachste ist, die RTC an separate Pins zu hängen. I2C lässt sich 
auch rein per Software machen, SPI auch. Man braucht also nicht 
unbedingt die Hardwareperipherie. SPI in Software ist einfacher als I2C 
in Software.

VOM DS3231 gibts auch eine SPI-Version, nämlich DS3234. Die hängst Du an 
freie Pins, und dann ist der Hardware-I2C frei für die Kommunikation zum 
ESP.

Wenn Du keine Pins mehr frei hast, nimm halt einen größeren AVR. 
Atmega644p und 1284 haben zwei UARTs, d.h. das wäre auch eine 
Möglichkeit.

Zum Umsetzen von 5V I2C auf 3.3V I2C nimmst Du z.B. einen PCA9306 oder 
einen PCA9517.

fchk

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.