www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 2 I²C Master miteinander kommunizieren lassen


Autor: N8Surfer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Tilo L. (katagia)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Afaik geht das nicht.

Ich arbeite im Moment mit einem aduc. Der kann am selben
Port gleichzeitig Master und Slave.

Autor: Rahul, der Trollige (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Theoretisch müssten beide als Slaves arbeiten.
Wenn dann einer von beiden Sende will, schaltet er halt auf dem 
Master-Modus um. Wenn er dann fertig ist, wird er wieder zum Slave.
Ob das funktioniert, weiß ich nicht. Wurde AFAIK aber schon vor einiger 
Zeit hier mal diskutiert...

Autor: N8Surfer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das von slave in master und zurück wechseln ist kein problem und 
funktioniert.
das problem ist nur, dass ich definitiv in beiden fällen master sein 
muss, und dann in slave gehe.
sonst wird das ganze drumherum durcheinander gebracht.

trotzdem danke

Autor: ich&er (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das letzte verwirrt mich...
"...dass ich definitiv in beiden fällen master sein
muss, und dann in slave gehe..."

zwei master an sich sind auf dem bus ja erstmal kein problem - siehe 
i²c-specs. und jetzt soll ein master irgendwann slave werden, oder wie 
genau !? kopfkratz

Autor: N8Surfer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habe zwei master auf dem bus, und die müssen standartmäßig master 
sein.
jetzt soll master1 dem master2 einen befehl schicken, und master2 soll 
daraufhin was machen.

was nicht geht ist, dass beide standartmäßig als slave konf. sind, das 
würde von der anwendung her net gehen.

Autor: ich&er (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mal ne ganz dumme idee...
master1 -> slave <- master2

master1 schickt was an den slave, und master2 holt sich das vom slave 
ab...ist dann halt ne timing-geschichte, master2 müsste pollen, ab slave 
was vom master1 für ihn hat...

für den fall, dass die master-slave-umschaltung nicht möglich sein 
sollte...

Autor: Rahul, der Trollige (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>was nicht geht ist, dass beide standartmäßig als slave konf. sind, das
>würde von der anwendung her net gehen.

Warum nicht?

Autor: ich&er (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...weil einer master sein muss? denke ich zumindest mal..

Autor: Rahul, der Trollige (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>...weil einer master sein muss? denke ich zumindest mal..

Du kannst einen I²C-Bus auch nur aus Sklaven aufbauen. Da passiert dann 
zwar nichts, aber es ist ein I²C-Bus...

Autor: N8Surfer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
eigentlich sollte da nur ein master sein, und den anderen wollte ich 
über den i2c switch pca9543 vom hauptbus entkoppeln.

der pca muss aber auf dem upstream einen master haben, deswegen etz zwei 
master.

und deswegen kann ich master2 nicht standartmäßig nicht als slave konf. 
denn dann würde er nix mehr empfangen.

Autor: ich&er (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
was spricht denn aus deiner sicht gegen die oben angeführte idee, die 
daten über einen slave durchzureichen?

Autor: N8Surfer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
naja, das ist relativ einfach, des ist ein weiterer mc dafür, dass ich 1 
byte von master1 zu master2 senden will.
das bedeutet:
1mc mehr mit rundumbauten, mehr leiterplattenplatz, und ganz ehrlich, 
sehr unsaubere lösung.

Autor: ich&er (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nö...nimmst nen i2c-eprom oder noch einfacher nen i2c-expander (8bit 
oder 16bit) als slave...damit kann man zu mindest eine art "code-wort" 
übertragen bzw zwischenspeichern...

Autor: Thorsten Eggert (eggert)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann man nicht einfach die Master mit nem zweiten I2C interface 
ausstatten das dann halt Slave ist? Oder ist das total abwegig?

Autor: N8Surfer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jo, des wäre schon, suche auch schon lange nach nem mc mit 2 twi modulen 
:D

Autor: Rahul, der Trollige (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die eigentliche Funktion dieser Schaltung muß ich nicht verstehen, oder?
Wieso wird der eine Master entkoppelt?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: nicht der Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Manfred (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Bernhard S. (bernhard)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Wenn ich es richtig verstanden habe, dann soll nur ein einziges Byte 
zwischen den 2 Master ausgetauscht werden?

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

Das wäreen  nur ein paar Zeilen Programm-Code in diesem Deponie-Slave ;)

Bernhard

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Bernhard S. (bernhard)
Datum:

Bewertung
0 lesenswert
nicht 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




Autor: Manfred (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Bernhard Schulz

macht keinen Sinn, da der Master nicht ununterbrochen sendet, sonst 
wären mehrere Master quatsch. Also gibt es auch Pausen und in diesen 
Pausen ist er Slave.

Gruß

Manfred

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sollte ATMega heissen...

Autor: Rahul, der Trollige (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn die Schnittstelle im Controller sich an die Norm hält, sollte es 
einfach so gehen. Man muß sich dann "nur noch" um die Fehlererkennung 
kümmern.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.