Senden von I2C zuverlässig über Cat5-Kabel

8

Ich denke darüber nach, ein Hausautomationssystem um meinen Raspberry Pi herum zu implementieren, aber ich fand den Preis und den Platzbedarf für das Einsetzen eines Pi an jeder Stelle, an der eine Steuerung zu viel erforderlich ist, aber die für dieses Design erforderlichen Cat5e-Kabel sind bereits während der Renovierung installiert. Ich habe einige PCF8574, PCF8591 und SSRs herumliegen. Ist es also möglich, sie mit Cat5e-Kabeln zu betreiben?

Alle meine Cat5e-Kabel sind bereits mit der Pinbelegung TIA / EIA 568B verdrahtet. Sie sind Teil meiner strukturellen Verkabelung und nicht abgeschirmt, daher ist eine höhere Netzspannung erforderlich. Ich denke, Strom- und I2C-Leitungen über das Kabel mit dieser Pinbelegung zu senden:

Pin 1 (Pair 1): SCL+
Pin 2 (Pair 1): SCL-
Pin 3 (Pair 2): SDA+
Pin 4 (Pair 3): +12V
Pin 5 (Pair 3): +12V
Pin 6 (Pair 2): SDA-
Pin 7 (Pair 4): GND
Pin 8 (Pair 4): GND

Die Power-Pin-Anordnung entspricht der 100BASE-TX-PoE-Verkabelung, sodass auch die Nennleistung gleich ist. In 1000BASE-T, für das Cat5e erforderlich ist, wird eine bidirektionale Differenzsignalisierung verwendet.

Die ursprünglichen I2C-SCL- und SDA-Leitungen werden bei TTL-Pegeln in zwei bidirektionale Differentialpaare abgeleitet (der Open-Drain wird nicht auf dem Draht gehalten, sondern in der von mir entworfenen Leitungsabschluss- / Pegelverschiebungsvorrichtung wiederhergestellt).

Irgendein Vorschlag dazu? Welchen Chip sollte ich auch verwenden, um I2C-Leitungen in die Differenzsignalisierung umzuwandeln? Bitte schlagen Sie mir Chips mit DIP-Durchgangslochoption vor. Ich weiß nicht, wie ich mit SMT umgehen soll.

BEARBEITEN

Ich fand diesen Chip, SN65LBC180, ist es eine gute Wahl? Wie verdrahtet man es zu einer bidirektionalen Einheit? Wie kann man den Pegel verschieben (es ist ein BiCMOS-Teil, der einen TTL-Pegel benötigt, aber Pi mit 3,3 V CMOS-Pegel fährt) und ihn Open-Drain-kompatibel machen?

BEARBEITEN 2

Die Kommentatoren schlugen RS-485 vor, was mir akzeptabel erschien, aber dennoch müssen die beiden Differentialpaare bidirektional und nur zwei bidirektionale Differentialpaare sein. Ich verwende vorhandene Ethernet-Kabel neu.

BEARBEITEN 3

Da es jemand angesprochen hat, kann ich CAN nicht verwenden. Es gibt keine Möglichkeit, CAN auf RPi anzupassen, ohne etwas zu opfern (SPI wird von einem Touchscreen belegt, also kein SPI-CAN-Konverter).

Ich bin mir der Einschränkung von I2C PHY bewusst, daher versuche ich im Wesentlichen, 1000BASE-T PHY daran anzupassen - bidirektionale Differenzsignalisierung für SCL- und SDA-Signale, aber zusätzlich wird das I2C-Protokoll ausgeführt.

BEARBEITEN 4

Ein neuer Chip kam zu mir: NXP P82B96, der I2C in 4 unidirektionale Leitungen aufteilt, die wiederum durch Optoisolation (nur Pi-Seite) in SN65LBC180 eingespeist werden können, um eine 8-polige Ferngesprächssignalisierung zu bilden. Jetzt muss ich nur noch herausfinden, wie ich Strom über das Kabel bekomme oder wie ich feststelle, ob der Bus sendet, und die Paare bidirektional machen.

BEARBEITEN 5

Aufgrund der Vorschläge für Antworten denke ich, dass ich die Pinbelegung der Stromversorgung ein wenig ändern muss:

Pin 1 (Pair 1): SCL+
Pin 2 (Pair 1): SCL-
Pin 3 (Pair 2): SDA+
Pin 4 (Pair 3): +5V
Pin 5 (Pair 3): GND
Pin 6 (Pair 2): SDA-
Pin 7 (Pair 4): GND
Pin 8 (Pair 4): +12V

Die differentielle I2C-Signalisierungsspannung beträgt TTL. Die + 5V über Paar 3 kommen vom Pi, ungepuffert, aber verschmolzen. Die + 12V über Paar 4 sind möglicherweise nicht vorhanden und werden nur zum Ansteuern einiger Hochleistungsgeräte verwendet. Bei Bedarf kann das Gerät eine eigene Stromversorgung verwenden und beide Schienen nicht angeschlossen lassen oder eine eigene höhere Spannung liefern, jedoch die 5-V-Schiene verwenden.

VERGISS DAS

Pinbelegung ist immer noch mein ursprüngliches Design, das 802.1af-kompatibel ist.

Maxthon Chan
quelle
4
Warum nicht RS-485? Es ist ein industrieller, zuverlässiger Standard.
Kamil
Pi hat kein RS485 und ich möchte die Schnittstellenschaltung so einfach wie möglich. Außerdem benötige ich PCF8574, das nach meinen Experimenten mein SSR zuverlässig mit 5 V Versorgungsspannung betreiben kann.
Maxthon Chan
Während RS-485 selbst bidirektional ist, ist es auf der Single-Ended-Seite nicht bidirektional.
Ignacio Vazquez-Abrams
5
Wenn Sie so fest entschlossen sind, das zu tun, was Sie ursprünglich gesagt haben, warum sind Sie dann überhaupt hierher gekommen und haben danach gefragt?
Matt Young
2
@maxthonchan Cat5-Ethernet-Drähte können 360 mA bei 50 V sicher verarbeiten ( en.wikipedia.org/wiki/Power_over_Ethernet#Power_capacity_limits ). Sie können leicht Halbleiterrelais erhalten, die auf der Eingangsseite <10 mA bei 3-32 V ziehen, also gut innerhalb der sicheren Spezifikationen.
Grant

Antworten:

18

Der Versuch, mit IIC zu tun, ist eine schlechte Idee. IIC ist wirklich für die Kommunikation zwischen Chips auf einer einzelnen Karte gedacht. Da der maximal erforderliche Strom zum Abziehen einer Leitung begrenzt ist, haben die Leitungen eine relativ hohe Impedanz (einige kΩ). Dies bedeutet, dass sie leicht Geräusche aufnehmen können, was ein ernstes Problem ist, wenn sie in ungeschirmten Kabeln in den Wänden verlegt werden, möglicherweise direkt neben den Wechselstromkabeln.

Ich würde dafür CAN verwenden. CAN verwendet ein einzelnes Twisted Pair, das an einem Punkt mit nur 60 Ω zusammengezogen wird, und das Signal ist differentiell. Dies bedeutet, dass der größte Teil des unvermeidlichen Gleichtaktrauschens, das aufgrund der kapazitiven Kopplung aufgenommen wird, von den Empfängern gelöscht werden kann. CAN mit 500 kbit / s kann etwas von der Größe eines normalen Hauses abdecken.

Viele Mikrocontroller sind heute mit integriertem CAN erhältlich. Normalerweise benötigen Sie einen separaten physischen Tranceiver-Chip (wie den üblichen MCP2551), aber die untersten Schichten des Protokolls sind in Silizium im CAN-Peripheriegerät implementiert. Die Firmware interagiert mit dem CAN-Bus auf der Ebene des Sendens und Empfangens vollständiger Pakete. Die Erkennung und Wiederholung von Kollisionen, die Generierung von Prüfsummen, Details der Buspaketsignalisierung, die Validierung der empfangenen Prüfsumme und die Anpassung der Taktdrift werden für Sie erledigt.

Verlieben Sie sich nicht in RS-485. Das ist ein Relikt aus einer vergangenen Zeit. Es verwendet auch ein einzelnes Differenzsignal wie CAN, hat also auch eine gute Störfestigkeit. Normalerweise verlieben sich die Leute jedoch in RS-485, weil es "einfacher" aussieht. Dies liegt nur daran, dass sie nicht das gesamte System betrachten. Erstens ist es elektrisch nicht weniger komplex. Sie benötigen noch eine Art Transciever, um das Differenzsignal anzutreiben und zu empfangen. Ob Sie einen RS-485-Transceiver an den UART des Mikrocontrollers oder einen MCP2551 an das CAN-Peripheriegerät angeschlossen haben, ist im Hinblick auf Kosten und Hardwarekomplexität ziemlich irrelevant. Der große Unterschied besteht darin, dass RS-485 Sie auf der Rohbyte-Ebene (über den UART) belässt. Dies bedeutet, dass Sie zur Implementierung eines aussagekräftigen und robusten Systems ein eigenes Protokoll für die Kollisionserkennung erstellen müssen. Entscheiden, wie mit Wiederholungsversuchen, Paketierung, Generierung und Überprüfung von Prüfsummen, Flusskontrolle usw. umgegangen werden soll. Sie können eine einzelne Master-Architektur verwenden, aber die richtigen Details zu finden ist viel schwieriger, als die Leute denken, die nicht alle sorgfältig analysiert haben. Mit CAN senden und empfangen Sie einfach Pakete, und die Hardware kümmert sich um die Details.

Olin Lathrop
quelle
Ich habe kein CAN in RPi eingebaut, ich habe keine CAN-Schnittstelle, ich kann sie mir nicht leisten und ich kann sie nicht in bestehende Gehäuse einbauen. Also keine Dose. Ich konvertiere IIC hin und her zur Differenzsignalisierung, um genau diese Gefahr von Übersprechen und Widerstand zu vermeiden. Das Konvertierungs- und IIC-Gerät teilen sich eine einzige Karte.
Maxthon Chan
@Max: Ein Mikrocontroller mit CAN ist billiger, kleiner und benötigt weniger Strom als ein RPi. Wenn diese Knoten meistens Sensoren und dergleichen sind, ist ein RPi sowieso übertrieben.
Olin Lathrop
uCs verfügen nicht über ausreichende Rechenleistung, um die andere Seite des Systems auszuführen. Obwohl ich auf dem System einen Touchscreen habe, der nur zum Überschreiben von Notfällen dient, werden alle Befehle über das Heimnetzwerk über HTTP (mit einer ziemlich ausgefallenen AJAX-gesteuerten Benutzeroberfläche) an den Pi gesendet, und Pi übernimmt die gesamte Authentifizierung und andere Dinge.
Maxthon Chan
3
@MaxthonChan Sie können billige Controller-ICs erhalten, die CAN in SPI und / oder I2C konvertieren, um eine Schnittstelle mit Ihrem RasPI herzustellen. Beispiel von Microchip .
Peter
Wenn dies Ihr Vorschlag ist, sagen Sie mir bitte, wie ich meine SSR fahren kann. Derzeit habe ich eine Empfangskarte mit dem Diff-Schnittstellen-Chip, eine 7805 und eine PCF8574, und sie treibt bis zu 8 SSRs an. (und normalerweise habe ich zwei oder drei)
Maxthon Chan
7

I2C ist nicht der richtige Weg. CAN-Tranciever kosten jeweils einen Dollar, und Sie können sie als Uart-Trancieves verwenden und Ihr eigenes Protokoll schreiben, sodass Sie kein Dosen-kompatibles Mikro benötigen. Sie möchten nicht den gesamten Dosenstapel verwenden.

Ich fühle mich immer ein wenig unwohl, wenn ich sehe, dass Cat5-Leiter parallel laufen, um mehr Strom zu erhalten. Es nervt mich, denn wenn ein Leiter bricht, führt der andere den vollen Systemstrom. Die aktuellen Cat5-Bewertungen sind sehr konservativ, so dass die Wahrscheinlichkeit eines Feuers ziemlich gering ist, aber ich mag die Möglichkeit einfach nicht.

Der sichere Weg, dies zu tun, besteht darin, eine Polyfuse auf beiden Stromschienen zu haben und die Erdung an der Versorgung zu verbinden und jedes Gerät an einen und nur einen Satz Strom / Masse anzuschließen. Auf diese Weise verlieren die Geräte, die diese Leitung verwenden, die Stromversorgung, wenn ein Kabel ausfällt, anstatt dass eine Leitung gezwungen ist, die Leistung von zwei zu übertragen.

Viele Leute mögen es, aus EMI-Gründen Strom und Masse in beide Twisted Pair zu stecken, anstatt ein Power-Paar und ein Ground-Paar zu haben. Wenn Sie zwei Strom / Masse-Paare haben, ist die Stromleitung näher an der Erde und die Felder werden gelöscht, wodurch alle von den Stromleitungen übertragenen oder empfangenen Funkwellen reduziert werden. Unnötig, aber schön, wenn viel elektrisches Rauschen herumschwirrt.

12 V sind meiner Meinung nach zu niedrig für die Stromverteilung, wenn 24 V noch einigermaßen sicher und viel effizienter sind.

EternityForest
quelle
Meine Lösung basiert irgendwie darauf. Ich verwende den NXP-Splitter-Chip, um den I2C-Bus in ein Paar Tx / Rx (sowohl SDA als auch SCL) aufzuteilen und sie als UART unter Verwendung von CAN-Schnittstellen-Chips zu multiplexen. Dadurch habe ich zwei verdrillte Paare mit I2C-SDA- und SCL-Leitungen, die mit den Cat5e TIA / EIA568B-Pins 1/2 und 3/6 verbunden sind.
Maxthon Chan
Das sollte auch funktionieren. Das einzige Problem ist, dass Sie Ihren NXP-Chip, zwei Dosen-Tranciever und Ihren eigentlichen i2c-E / A-Chip benötigen. Das sind fünf Chips pro Board, und zuletzt habe ich überprüft, ob der NXP-Chip teurer ist als bei atmega328, aber das könnte sich geändert haben. Es wird funktionieren und die Programmierung wird einfach sein, weil es i2c ist, aber die Verwendung von UART über CAN ist billiger für ein bisschen mehr Arbeit.
EternityForest
Die Pi-seitige Schnittstellenkarte verfügt über 7 Chips - NXP I2C-Puffer / Splitter, zwei CAN PHY und vier Optoisolatoren. Die Geräteseite ist ein 4-Chip-Modul - NXP I2C-Puffer / Splitter, zwei CAN PHY und der PCF8574 / 8591.
Maxthon Chan
Ich habe einen 4-Kanal-Optokoppler gefunden, der die Pi-seitige Schaltung auf ein 4-Chip-Modul reduziert.
Maxthon Chan
Ich habe die Power-Pins überarbeitet und bleibe bei meinem ursprünglichen Design, indem ich ein Power-Paar und ein Ground-Paar verwende. Das ist kompatibel mit 802.3af, obwohl ich die Signalpins für SCL und SDA neu definiert habe.
Maxthon Chan
3

Wenn die Automatisierung einfach Dinge rund um das Haus ein- und ausschaltet, würde ich dies vereinfachen, indem ich:

  • Halten Sie alle "Gehirne" an einem Ort. Verwenden Sie bei Bedarf I2C-E / A-Expander, aber behalten Sie sie alle mit dem Himbeer-Pi bei. Sie benötigen auch geeignete Hardware, um sicherzustellen, dass Sie nicht versuchen, zu viel Strom von den GPIO-Pins des Pi zu erhalten.
  • Verwenden Sie die Ethernet-Kabel, um einfach Relais anzusteuern. Sie können Ihre eigene Platine bauen oder an der Schalttafel montierbare 120 / 240V-Halbleiterrelais erwerben, die in einem Schaltkasten montiert werden. Die Drähte in Cat5-Ethernet-Kabeln können bis zu 50 V bei jeweils 320 mA verarbeiten, was mehr als genug ist, um ein Relais anzusteuern. Tatsächlich könnten Sie 7 Relais über ein einziges Kabel (plus einen Draht für Masse) ansteuern. Oder lassen Sie ein Kabel für einen 12-V-Ausgang aus, damit Sie auch einen manuellen Schalter installieren können. Wenn es sich um sehr lange Läufe handelt, müssen Sie möglicherweise den Spannungsabfall berücksichtigen, aber Sie können Relais erhalten, die bei 3-32 V schalten. 12V sollten auch bei Spannungsabfall mehr als ausreichend sein.
  • Sie sollten auch die örtlichen Bauvorschriften konsultieren, um Ratschläge zum Mischen von Hoch- und Niederspannungskabeln in derselben Box zu erhalten.
  • Einfache Umschaltungen können auch über die Ethernet-Kabel erfolgen, wiederum bis zu 7 pro Kabel, und einfach an die Eingänge des Pi angeschlossen werden. Ein Spannungsabfall kann bei sehr langen Kabeln ein Problem darstellen.
  • Möglicherweise möchten Sie auch Optoisolatoren verwenden, um den Pi vor Beschädigung zu schützen.
  • Verwenden Sie für die wenigen Geräte, die mehr als ein Relais benötigen (z. B. ein Bedienfeld), die Ethernet-Kabel als tatsächliches Ethernet. Es sollte keine großen Kosten verursachen, wenn es nicht viele dieser Geräte gibt. Sie könnten entweder ein anderer Pi oder ein Mikrocontroller mit Ethernet sein.
Gewähren
quelle
Ich bin mir nicht ganz sicher, welche Bedürfnisse meine Endbenutzer haben werden. Sie ist launisch und ändert ihre Meinung sehr schnell. Ich muss schnell genug reagieren können. Aus diesem Grund wird eine Art Basisprotokoll (hier I2C) über das Kabel verwendet.
Maxthon Chan
2

schematisch

simulieren Sie diese Schaltung - Schema erstellt mit CircuitLab

EUREKA! Herausgefunden! (ungetestet, werde es dieses Wochenende testen)

Die Schnittstellenchips sind NXP P82B96 I2C-Puffer / Splitter und 2 TI SN65HVD251P-CAN-Bus-Schnittstellenchips. Im Wesentlichen verwende ich I2C auf CAN PHY.

P82B96 versteht das I2C-Protokoll und übernimmt für mich die Busarbitrierung und gibt mir separate Tx- und Rx-Pins, die miteinander verbunden werden können. Ich speise diese in den CAN-Transceiver SN65HVD251P ein und er gibt mir das bidirektionale Differentialpaar zum Senden über Drähte.

Die Stromversorgungsstifte werden direkt von der 5-V-Schiene meines Pi gepuffert. (Ich werde für eine Weile keine 12V Signalspannung und Stromversorgung verwenden)

Maxthon Chan
quelle
Tut mir leid aber nein. Auf diese Weise können Sie zwei I2C-Einheiten in einiger Entfernung voneinander anschließen. Sie können nicht mehr als 2 verbinden.
WhatRoughBeast
@WhatRoughBeast Ich habe das in der NXP-Dokumentation nachgeschlagen und es heißt, dass dies eine praktikable Lösung ist (und sie hat irgendwie ihren Weg in ihren AN gefunden), aber für mich ist ein Punkt-zu-Punkt in Ordnung, da mein Design selbst nach einer fragt Paar Umrechnungseinheiten pro Cat5e-Segment.
Maxthon Chan
CAN ist wie i2c verkabelt oder bidirektional. Ich sehe keinen Grund, dass dies nicht mit so vielen Geräten im Bus funktionieren sollte, wie Sie möchten. Ich habe die App gesehen, die er nicht erwähnt. Es scheint einen Bus zu beschreiben, keinen Punkt zu Punkt.
EternityForest
@WhatRoughBeast - CAN ist Multidrop, ich habe mir nicht genau angesehen, was das OP tut, aber es sollte theoretisch möglich sein.
Connor Wolf
1

Unabhängig von den Vorzügen von IIC auf Chipebene wird Ihre vorgeschlagene Implementierung sehr schwierig sein. Das Problem ist die Busarbitrierung. Obwohl mehrere Einheiten beispielsweise mit RS485 parallel geschaltet werden können, lautet die große Frage:

Woher weiß eine Einheit, ob sie die Kontrolle über den Bus übernehmen kann, um Daten zu senden?

In IIC mit offenen Drain-Signalleitungen ist die bidirektionale Übertragung einfach - bei dreistufigen Bussen müssen Sie jedoch sicherstellen, dass jeweils nur eine Einheit versucht, den Bus zu fahren. Das wird schwierig. Sie können dies tun, insbesondere wenn Sie einen einzelnen Master einrichten und verlangen, dass alle Slaves strenge zeitliche Einschränkungen beim Senden von Daten haben und dass sie nur Daten senden, wenn dies vom Master angefordert wird. Dies erfordert jedoch erhebliche Anstrengungen von Ihrer Seite beim Entwerfen des Masters Schnittstellenkarten für den Master und die Slaves.

Bei physischen Treibern / Empfängern reicht RS485 aus, und es stehen viele Schnittstellenchips zur Verfügung. Nur Google.

WhatRoughBeast
quelle
1

Ich weiß nicht, ob Sie an einer vorgefertigten Lösung interessiert sind, anstatt eine eigene Schaltung zu bauen, aber ich dachte, ich möchte darauf hinweisen, dass Pololu diese I²C Long Distance Differential Extender- Boards von SJTbits verkauft, die ziemlich genau zu funktionieren scheinen Nach was suchst du. (Vollständige Offenlegung: Ich arbeite für Pololu.)

Selbst wenn Sie es nicht direkt verwenden möchten, kann Ihnen ein Blick auf die verwendete Schaltung einige Ideen geben. Sie können den Schaltplan im Datenblatt sehen. Es verwendet einen NXP PCA9600D-Puffer, einen TI AM26LS31CDR-Differenzleitungstreiber und einen TI AM26LS32ACDR-Differenzleitungsempfänger.

kwc
quelle
Das funktioniert bei mir nicht. Ich muss sowohl das Bussignal als auch die Stromversorgung über die Kabel senden.
Maxthon Chan
1

Ich weiß, dass dies ein bisschen alt ist und irgendwo in den Antworten eine Lösung gefunden worden zu sein scheint, aber ich hatte diesen Vorschlag zu bieten. Es gibt Geräte wie das PCA9614 / 5/6 von NXP, die ich derzeit als Lösung für einen robusteren I2C-Langstreckenbus (PCA9614 2-Kanal-Mehrpunkt-Fast-Mode-Plus-Differential-I2C-Bus-Puffer) betrachte . Im Wesentlichen ist es wahr, dass es etwas anderes als echtes I2C wird, aber am Ende des Busses ist es für die Geräte unsichtbar. Diese spezielle Familie übersetzt die Signale in 2 bidirektionale Differentialpaare, und es gibt auch ähnliche Geräte, wie sie bereits in den Kommentaren erwähnt wurden, die sich in 4 unidirektionale Differentialpaare übersetzen lassen. Wenn Sie in nur 2 Paare übersetzen, können Sie ein CAT-Kabel verwenden und haben dennoch 2 Paare für Strom / Masse.

John Lewis
quelle
0

Daumen hoch! Ich versuche gerade, so ziemlich das gleiche Problem zu lösen. Ich versuche auch, I2C über cat5 für die Heimautomation mit meiner benutzerdefinierten Pinbelegung zu verwenden. Der Grund sind die Kosten, ich möchte, dass es sehr kostengünstig ist und I2C-Komponenten immer noch mindestens fünfmal billiger sind als selbst attiny13 uC (AFAIU uC ist für CAN und RS485 erforderlich).

1) Derzeit bin ich gerade in einem Testprozess für den ersten Teil eines Systems und jetzt bin ich mit einem 15 m langen Kabel mit 5 V und direkter SCL- und SDA-Verbindung erfolgreich! Ich benutze PCF8574 und 2 Relais, um meine Raumbeleuchtung auszulösen. Pinbelegung ist

1
2 INT
3 +5V
4 SCL
5 SDA
6 GND
7
8

2) Ich verstehe, dass es nicht mehr ein paar Relais oder zusätzliche 10 Meter geben wird ... Ein Spannungsabfall ist signifikant (von 5,5 auf 4,7). Für das Spannungsabfallproblem werde ich stattdessen 12 V an eine Leitung anschließen und 5-V-Spannungsregler auf den Platinen hinzufügen, um die Feinspannung unabhängig vom gesamten Leitungsabfall überall zu halten. Ich werde in den zukünftigen Leitungen sowieso zusätzliche Netzteile anschließen.

3) Das Signal selbst kann mit P82B96 oder billigem P82B715 verbessert werden, ohne auf Differenzleitungen aufgeteilt zu werden. Ein NXP selbst verwendet Cat5 in einigen Präsentationen, aber ich kann ihre Pinbelegung nicht finden. Ein wichtiger Teil hierbei ist, dass sie eindeutig Signalleitungen in verschiedenen Paaren verwenden ... z. B. ist ein Paar GND + SDA, das andere ist VCC + SCL.

4) Ein weiterer interessanter Punkt - dieser Puffer kann einfach eine Amplitude auf 12 V erhöhen, um den Rauschwiderstand zu erhöhen. Also werde ich wahrscheinlich auch versuchen, 12V auf eine Signalleitung zu legen, und das sollte es ermöglichen, Klimmzüge direkt von 12V-Kabeln zu ziehen ... Aber das wird mich zwingen, so etwas wie P82B96 auf jedes Gerät zu legen.

Wie Sie vielleicht bemerkt haben, verwende ich auch eine separate Interrupt-Leitung ... Der Master befindet sich derzeit auf einer mit dem PC verbundenen Arduino-Karte. Die primäre Master-Software befindet sich ohnehin auf einem 24x7-PC, sodass Arduino nur das Signal übersetzt und Interrupts verarbeitet. Ich kann eine spezifische Konfiguration für die Interrupt-Behandlung an Bord senden, z. B. für die bequeme Umschaltung des Schalters über Interrupt ... Dadurch kann ich Verzögerungen beim manuellen Umschalten des Lichts vergessen. Die Interrupt-Behandlung ist ein zusätzlicher Vorteil von i2c.

Meine Idee ist also, dass I2C einfach genug ist, um in <= 100 m Stadtwohnungsverkabelung eingesetzt zu werden. Anstatt zum Differenzsignal zu gehen, hoffe ich, dass ich stattdessen die zusätzliche Frequenz reduzieren kann.

Ich mag Ihre Idee, sowohl 5V als auch 12V zu setzen, da dies den Bedarf an Reglern reduziert und die Kosten senkt ... die ganze Idee des Mehrdrahtbusses, um die Kosten für Endpunkte zu senken, werde ich dies auch für eine neue Pinbelegung in Betracht ziehen :)

Dmitry Gusarov
quelle
1
Dies ist eher ein erweiterter Kommentar zur Frage als eine Antwort, da Ihre Situation nicht mit der des OP identisch ist: unterschiedliche Master-Hardware, unterschiedliches Signalisierungsschema. Aber es ist eng genug verwandt, dass ich es stehen lassen werde.
Dave Tweed