i2c & Arduino 2 Master

OP #6024098
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
Gast #6024109
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.
Gast #6024119
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.
#6024677
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren