2 I²C Master miteinander kommunizieren lassen

Gast #483618
Lesenswert?

Hi,

ist es möglich dass ich einem Master Befehle mit einem anderen Master 
schicke?
wenn ja, wie stellt man das an?

reagiert er automatisch wenn ich ne slave adresse eintrage und twea 
enable?
oder beisst sich das dann mit was anderem?

grüßle

Flo
#483729
Lesenswert?

Jungs, lest doch einfach mal die I2C-Beschreibung durch.

Klar kann I2C Multimaster.

Ein Multimaster ist immer auch Slave.

Nur, wenn man Start sendet und der Bus frei ist, geht er in den 
Master-Mode.

Er muß allerdings damit rechnen, daß er die Arbitration verliert und 
dann eben nochmal versuchen zu senden.

Ist also ein bissel Software-Schreiberei.


Peter
Gast #483755
Lesenswert?

und wenn du einfach eine zusätzliche Leitung (IO-Port) zwischen den 
beiden Mastern ziehst und so z.B. ein MC dem anderen MC mitteilen kann, 
dass er afaik jetzt Slave zu sein hat (du ihn dann kurzfristig in den 
Slave-Mode versetzt)??
Wenn du bei beiden MCs den externen Interruptpin benutzt, dann 
funktioniert das sogar Interruptgesteuert.

ein wenig Hardwareaufwand für einfachere Software .. oder sonst halt wie 
Peter schon geschrieben hat: mehr Softwareaufwand, aber dafür weniger 
Hardwareaufwand
Gast #483783
Lesenswert?

Hallo,

wo ist das Problem. Dein Mikrocontroller hat eine Adresse am I²C-Bus. 
Zuersteinmal sind beide Slave. Will nun der MC1 dem MC2 Daten senden, 
dann lauscht er am Bus, ob dieser frei ist. Falls ja sendet er die 
Startbedingung und die Adresse von MC2. Mc2 bestätigt, MC1 sendet Daten 
und die Stoppbedungung und geht anschließend in den Ruhezustand, wird 
wieder Slave. Nun kann MC2 eine Startbedingung senden usw..
Falls es mal mehr als zwei Master sein Sollten, mußt du überwachen, ob 
das was du sendest auch das ist was du senden möchtest. Könnten ja zwei 
Master gleichzeitig senden wollen.

Gruß

Manfred
#483848
Lesenswert?

Bernhard Schulz wrote:

> Und wenn dieses eine Byte in einem anderen Slave zwischendeponiert wird?


Und was soll das bringen ?

Es können trotzdem beide Master gleichzeitig zugreifen und dann einer 
die Arbitration verlieren.

Der Softwareaufwand ergibt sich nicht so sehr aus der Slave-Funktion 
(das sind sie automatisch in den Pausen), sondern in der 
Kollisionsbehandlung.


Peter
#484258
Lesenswert?

Peter Dannegger wrote:
> Bernhard Schulz wrote:
>
>> Und wenn dieses eine Byte in einem anderen Slave zwischendeponiert wird?
>
>
> Und was soll das bringen ?
>

Hätte nach meiner Meinung folgenden Vorteil:

Die Master müssen nicht in den Slave-Modus geschaltet werden, sie 
bleiben als Master starr im System.

Die Sendekollisionen müssen so oder so behandelt werden, denn es soll ja 
ein Multimastersystem sein, gel?

Bernhard



Gast #484418
Lesenswert?

Also zumindest bei den ARMegas gibt es 2 Möglichkeiten.
1. Man kann das TWI als Multimaster programmiern, dann reagiert er auch 
auf die programmierte Slave Adresse.
2. Man enabled General Call (Adr. 0), zumindest könnte man so den Master 
benachrichtigen das er irgendwo was abholen soll.

Ich habe den gleichen Anwendungsfall: Ein ATMega128 als Multimaster, ein 
ATMega32 als Slave und 2 ATTinys als Master die Daten an den Multimaster 
schicken.

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