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
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.
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.
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.
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.
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.
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.
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.
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
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.
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
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.
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 ?
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.
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.
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.
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.