Forum: Mikrocontroller und Digitale Elektronik I2C Bus und mehrere Controller


von Bismar (Gast)


Lesenswert?

Hallo,

kann ich mehrere Controller am einen I2C Bus anschließen. Die dann für 
sich alleine die einzelne Bus Komponenten ansprechen. Oder kann ich nur 
einen anschließen. Da war doch noch was mit Mastercontroller und Slave?

MfG
Bismar

von Helge A. (besupreme)


Lesenswert?

Das soll theoretisch wohl gehen. Ich hab aber noch nie einen 
Multimaster-I2C gesehen.

Hier steht bissel was. http://www.mikrocontroller.net/articles/I2C

von florian2840 (Gast)


Lesenswert?

Ja ist generell möglich. Du kannst einen Master mit ganz vielen Slaves 
haben. Aber auch mehrere Master und Slaves am selben Bus.

von PittyJ (Gast)


Lesenswert?

Ich bezweifel, dass mehrere Master gut sind und richtig gehen.
Wie funktioniert da die Synchronisation, wenn 2 Master gleichzeitig den 
Bus benutzen möchten? Wie geht da eine Kollisionserkennung?
AFAIK gibt es da nichts.

von Georg G. (df2au)


Lesenswert?

PittyJ schrieb:
> Wie geht da eine Kollisionserkennung?

SDA und SCL überwachen. Wenn ich die Leitung loslasse und sie geht nicht 
auf High, ist jemand anderes im Spiel und es gab eine Kollision.

Also muss ich warten (Zufallszeit). Wenn ich dann den Bus als frei 
erkenne (für x-ms keine Aktivität), versuche ich mein Glück erneut.

Das Ganze funktioniert dann natürlich nicht mehr mit den Standard 
Treiber. Das wird eine reine Bitbangerei.

von Klaus R. (klara)


Lesenswert?

Bismar schrieb:
> kann ich mehrere Controller am einen I2C Bus anschließen. Die dann für
> sich alleine die einzelne Bus Komponenten ansprechen.

Das sieht danach aus als ob Dein Konzept nicht optimal ist. Du solltest 
mal schildern was Du eigentlich machen willst.
Gruss Klaus.

von PittyJ (Gast)


Lesenswert?

Georg G. schrieb:
> PittyJ schrieb:
>> Wie geht da eine Kollisionserkennung?
>
> SDA und SCL überwachen. Wenn ich die Leitung loslasse und sie geht nicht
> auf High, ist jemand anderes im Spiel und es gab eine Kollision.
>
> Also muss ich warten (Zufallszeit). Wenn ich dann den Bus als frei
> erkenne (für x-ms keine Aktivität), versuche ich mein Glück erneut.
>
> Das Ganze funktioniert dann natürlich nicht mehr mit den Standard
> Treiber. Das wird eine reine Bitbangerei.

Das bedeutet, dass ich SDA und SCL resamplen muss, und mit dem 
gewünschtem Resultat vergleichen muss. Ähnlich wie damals das 
BNC-Ethernet.
Also noch mal 2 GPIO-Eingänge zum Überwachen.
Nee, dann muss nicht sein, das führt doch nur zu Problemen.

von Fabian O. (xfr)


Lesenswert?

Zumindest die I2C-Controller der Atmel-Mikrocontroller sind 
Multimaster-tauglich. Man bekommt im Statusregister z.B. mitgeteilt, 
wenn es zu einem Konflikt kam ("Arbitration Lost"). Das muss man nicht 
von Hand ermitteln.

von c-hater (Gast)


Lesenswert?

PittyJ schrieb:

> Ich bezweifel, dass mehrere Master gut sind und richtig gehen.
> Wie funktioniert da die Synchronisation, wenn 2 Master gleichzeitig den
> Bus benutzen möchten? Wie geht da eine Kollisionserkennung?

Man macht sich zunutze, daß es sich um einen Bus vom OpenDrain-Typ 
handelt.

> AFAIK gibt es da nichts.

Doch. Bei den AVR der Mega-Klasse z.B. ist die Kollisionserkennung 
bereits in die Hardware eingebaut. Natürlich muß man sie auch benutzen 
und das Verhalten modifizieren, von alleine läuft nur die 
Kollisionserkennung, nicht aber die Bereinigung der Situation.

von c-hater (Gast)


Lesenswert?

Georg G. schrieb:

> Das Ganze funktioniert dann natürlich nicht mehr mit den Standard
> Treiber. Das wird eine reine Bitbangerei.

Nicht unbedingt. ATMegas z.B. haben die Kollisionserkennung bereits in 
Hardware eingebaut.

von Peter D. (peda)


Lesenswert?

PittyJ schrieb:
> Ich bezweifel, dass mehrere Master gut sind und richtig gehen.
> Wie funktioniert da die Synchronisation, wenn 2 Master gleichzeitig den
> Bus benutzen möchten? Wie geht da eine Kollisionserkennung?
> AFAIK gibt es da nichts.

Na dann lies einfach mal die I2C-Spezifikation.
Multimaster ist natürlich möglich.
Oder wozu denkst Du, ist die SCL-Synchronisation und die 
Arbitration-Lost-Erkennung sonst gedacht?

Mit den 8051 von Philips hat das auch super gut funktioniert, leider hat 
die NXP aber alle eingestampft.

Atmel hat versucht, das zu kopieren, aber leider mehrere Bugs eingebaut:
http://www.robotroom.com/Atmel-AVR-TWI-I2C-Multi-Master-Problem.html

von Peter D. (peda)


Lesenswert?

Georg G. schrieb:
> Also muss ich warten (Zufallszeit).

Nö, nach der Stop-Erkennung kann jeder Master sofort versuchen, ein 
Start zu senden und der mit den meisten 0-Bits am Anfang der Adresse 
gewinnt die Arbitration. Alle anderen warten einfach auf das nächste 
Stop.
Und das Warten geschieht voll automatisch, ein gesetztes Startbit wartet 
erst auf die Stop-Erkennung.

Georg G. schrieb:
> Das Ganze funktioniert dann natürlich nicht mehr mit den Standard
> Treiber. Das wird eine reine Bitbangerei.

Das ist Quatsch.
Mit Bit-Banging ist Multimaster nicht möglich, nur mit Hardware-I2C.

: Bearbeitet durch User
von Bismar (Gast)


Lesenswert?

Hallo,

Es geht darum das mehrere Controller ihr eigenes Programm abarbeiten.
Es gibt aber I2C Peripherien wo jeder Controller mal nachfragen will was 
habt ihr für Daten oder wie sind eure Ausgänge geschaltet.
Warte mal in meinen Programm muss der Ausgang aber nun eingeschaltet 
werden sagt ein Controller.

Ich setze mir ja auch z.B. nicht 10 (übertrieben) Uhrzeit/DCF Chips 
auf'n Board mit 10 Antennen.
Oder nachfragen nach einen EEprom Chip, welche Daten jetzt in dir sind. 
Was hat der andere Controller in dir reingeschrieben.

MfG
Bismar

von Cyblord -. (cyblord)


Lesenswert?

Bismar schrieb:
> Hallo,
>
> Es geht darum das mehrere Controller ihr eigenes Programm abarbeiten.
> Es gibt aber I2C Peripherien wo jeder Controller mal nachfragen will was
> habt ihr für Daten oder wie sind eure Ausgänge geschaltet.
> Warte mal in meinen Programm muss der Ausgang aber nun eingeschaltet
> werden sagt ein Controller.
>
> Ich setze mir ja auch z.B. nicht 10 (übertrieben) Uhrzeit/DCF Chips
> auf'n Board mit 10 Antennen.
> Oder nachfragen nach einen EEprom Chip, welche Daten jetzt in dir sind.
> Was hat der andere Controller in dir reingeschrieben.

Was redest du da für wirres Zeug? Wurde jetzt alles haarklein erklärt 
wie Multimaster I2C geht.

von Bismar (Gast)


Lesenswert?

Stell dir eine Straße vor an der mehrere Parkplätze abgehen.
Am Anfang und Ende ist ein Parkwächter. Die benutzen die Parkplätze 
gemeinsam !!
Du kommst mit deinem Auto und möchtest einen Parkplatz haben.
Da muss doch dein Parkplatzwächter erst mal nachfragen wo noch einer 
frei ist. Was hat sein Kollege am anderen Ende der Straße schon besetzt.
Bevor er zum Kollegen am anderen Ende der Straße geht und sich mit einer 
anderen Sprache ( Damit meine ich ein anderes Bussystem)erkundigt wo ist 
noch was frei ist (Wobei er erst wieder nachschauen muss !!), da schaue 
ich doch selber nach...


ICH BAUE NICHT FÜR JEDEN PARKPLATZWÄCHTER EINE EIGENE STRAßE MIT 
PARKPLATZ

Hast du das jetzt besser verstanden Cyblord ?

von c-hater (Gast)


Lesenswert?

Peter Dannegger schrieb:

> Mit Bit-Banging ist Multimaster nicht möglich, nur mit Hardware-I2C.

Das ist Quatsch. Natürlich geht das auch mit Bitbanging.

Es funktioniert nur nicht mit so hohen Bustakten, wie sie mit 
Hardwareunterstützung möglich sind. Aber 100kHz z.B. sind noch recht 
problemlos beherrschbar.

von Cyblord -. (cyblord)


Lesenswert?

Bismar schrieb:
>
>
> ICH BAUE NICHT FÜR JEDEN PARKPLATZWÄCHTER EINE EIGENE STRAßE MIT
> PARKPLATZ
>
> Hast du das jetzt besser verstanden Cyblord ?

Ich hab dein Problem schon von Anfang an verstanden, aber deine 
Ausführungen zuletzt sind einfach nur wirr. Evt. kannst du das ganze 
noch mit Handpuppen nachspielen? Schick mal den youtube link.

von Klaus R. (klara)


Lesenswert?

Bismar schrieb:
> Stell dir eine Straße vor an der mehrere Parkplätze abgehen.
> Am Anfang und Ende ist ein Parkwächter. Die benutzen die Parkplätze
> gemeinsam !!
> Du kommst mit deinem Auto und möchtest einen Parkplatz haben.
> Da muss doch dein Parkplatzwächter erst mal nachfragen wo noch einer
> frei ist. Was hat sein Kollege am anderen Ende der Straße schon besetzt.
> Bevor er zum Kollegen am anderen Ende der Straße geht und sich mit einer
> anderen Sprache ( Damit meine ich ein anderes Bussystem)erkundigt wo ist
> noch was frei ist (Wobei er erst wieder nachschauen muss !!), da schaue
> ich doch selber nach...

Rede doch mal Klartext. Ich glaube hier im Forum sind einige Experten 
die dann damit etwas anfangen können.
Klaus.

von Sebastian (Gast)


Lesenswert?

Hör auf Peter Dannegger.

Es geht, aber bei AVR ATMega solltest du es vermeiden.

Ich habs versucht. Meine Motivation für Mult-Master war: Ich wollte 
einzelne Platinen (mit je einem ATMega) vom Bus abstecken können, und 
das System sollte weiter funktionieren. Habs aufgegeben und lebe jetzt 
damit, dass der Master am Bus bleiben muss.

Wenn du die oben genannte Anforderung nicht hast, geht es auch mit einem 
einzigen Master - der kann Nachrichten von einem Slave zum anderen 
weiterleiten.

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.