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
Das soll theoretisch wohl gehen. Ich hab aber noch nie einen Multimaster-I2C gesehen. Hier steht bissel was. http://www.mikrocontroller.net/articles/I2C
Ja ist generell möglich. Du kannst einen Master mit ganz vielen Slaves haben. Aber auch mehrere Master und Slaves am selben Bus.
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.
:
Bearbeitet durch User
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.