Forum: Mikrocontroller und Digitale Elektronik I2C-Bus Therotisch verkürzen


von Joachim S. (gandalph0365)


Lesenswert?

Hallo Gemeinde,

Bin neu hier und möchte all Rolladen-Taster in meinem Haus per I2C-I/O 
Expander abfragen.
Nun habe ich das Problem Ich habe eine Sternverkabelung (Twisted-Pair 
CAT5)
zu jedem Taster.
Aber wenn ich daraus einen BUS generiere werde ich mit dem 2ten Taster 
über die Maximaler Länge die ein Bus selbst mit Bus-Extender werden 
kann.
So denn nun meine Überlegung.
And der Zentralen Stelle wo mein Bananapi sitzt Installiere ich einen 
Bus-Extender an diesem würde ich einen (für jeden Taster) Optokoppler 
Baustein welcher SDA und SCL nur in dem Moment (gesteuert von Python 
Progam) den BUS für den einen Taster freigibt). In der Unterputzdose 
möchte ich eine kleine Platine mit Bus-Extender (2ter Baustein) folgend 
von I/O Expander den Status der Taster abfrägt?

Wäre solch eine Lösung denkbar?
Andere Lösung ich sende per Cat5 Kabel 24V (habe eine Zentrale 
Versorgung)
an die Taster und müsste dann am Zentralen Knotenpunkt per Optokoppler 
und und Kondensator (zum Entprellen) die 24V auf die Eingänge eines 
MCP23017 zu legen.
Dies sollte aber 24V=High geschehen.
Für Lösung 2 welchen Optokopler sollte ich dafür benutzen?
Zur Information
CAT-5 Kabel laufen nicht koplett Zentral zusammen, habe 2 UP 
Klemmenkästen.
(Pro Etage)

Im Voraus schon mal DANKE.

von Bernhard L. (bernhard_r84)


Lesenswert?

I2C ist für die Kommunikation von Bausteinen INNERHALB eines Gerätes 
gedacht und für Deine Anwendung absolut nicht geeignet.

Schau mal nach RS485 oder CAN

von Florian (Gast)


Lesenswert?

Hallo,

für Deine Anwendung ist I2C nicht geeignet! Ich würde Dir den RS485 ans 
Herz legen. Er ist leicht zu beherrschen und Du kannst Dein eigenes 
Protokoll darauf laufen lassen.

Sonst schau mal beim Elektor unter "Elektorbus" nach. Ich denke das 
könnte Dir weiterhelfen.

Gruß
Florian

von Th. B. (thbaum)


Lesenswert?

wenn es unbedingt I²C sein soll dann könnte ein PCA9515 (100m bei 
400khz) das Problem lösen.
Sollte Übertragungsgeschwindigkeit keine Rolle spielen einfach die 
Frequenz herabsetzen.

von Klaus R. (klara)


Lesenswert?

Joachim Scheffel schrieb:

> Bin neu hier und möchte all Rolladen-Taster in meinem Haus per I2C-I/O
> Expander abfragen.
> Nun habe ich das Problem Ich habe eine Sternverkabelung (Twisted-Pair
> CAT5)
> zu jedem Taster.
> Aber wenn ich daraus einen BUS generiere werde ich mit dem 2ten Taster
> über die Maximaler Länge die ein Bus selbst mit Bus-Extender werden
> kann.

Kannst Du denn mit Deinem Bananapi die Taktrate des I2C-Bus setzen? Der 
Bus muss ja für die Abfrage eines Tasters nicht mit 100 KHz oder gar 400 
KHz laufen. Generell kann man sagen, eine Halbierung der Taktrate bringt 
die doppelte Weite. Ein Expander wie der PCF8574 ist zu dem ziemlich 
unkritisch.
http://www.nxp.com/documents/data_sheet/PCF8574.pdf
Ich habe bei mir dazu schon vor über 10 Jahren Tests durchgeführt. Über 
eine Kabelrolle mit 2x2x0,6mm Telefonleitung (Vollader) konnte ich 100m 
mit 100KHz und 5,0V zuverlässig arbeiten. Ein DS1631 ist da wesentlich 
anspruchsvoller.
Man kann auch Bus-Multiplexer einsetzen. Damit kannst Du Deinen Stern 
entkoppeln. Das habe ich bei mir auch gemacht.
http://www.nxp.com/documents/data_sheet/PCA9547.pdf

Wie sieht es mit 1-Wire aus? Wenn 1-Wire nicht direkt vom Bananapi 
unterstützt wird, dann gibt es doch bestimmt etwas zum Einbinden. Dieser 
Bus kann noch grössere Längen überbrücken.

mfg klaus

von Joachim S. (gandalph0365)


Lesenswert?

Vielen Dank für die schnellen Antworten,

@Florian
Warum ist das dafür nicht geignet?
Ich habe schon ein paar Gehversuche mit I/O expander gemacht.
Gibt es solche Bausteine für den RS485 ebenfalls?
@ Klaus
Expander schaut echt gut aus.
Kann ich dann evtl. nach dem Expander immer den gleichen Baustein mit 
der gleichen Addresierug benutzen und "mein Zimmer" ist durch den Bus 
(0-7) definiert?
Könnte also immer nur eine Funktion aufrufen und die Werte in einem 
Entsprechenden Array ablegen?
Wie ist das mit Zeitkritischen I/O bzw. wie stark belastet das Polling 
den Bananapi?
Und so wie das Aussieht maacht der Multiplexer genau das was ich mit nem 
Optokopler vorhatte??

Gruß und danke an alle

von Klaus R. (klara)


Lesenswert?

Joachim Scheffel schrieb:

> Kann ich dann evtl. nach dem Expander immer den gleichen Baustein mit
> der gleichen Addresierug benutzen und "mein Zimmer" ist durch den Bus
> (0-7) definiert?
Es ist dann immer nur ein Segment aktiv.

> Könnte also immer nur eine Funktion aufrufen und die Werte in einem
> Entsprechenden Array ablegen?
Wenn die Adresse des I2C-Bausteins in jedem Segment gleich ist, dann 
kann man nur mit der Anwahl des Segments arbeiten.

> Wie ist das mit Zeitkritischen I/O bzw. wie stark belastet das Polling
> den Bananapi?
Polling ist eigentlich nicht so elegant. Es gibt auch Interrupts bei 
I2C. Damit habe ich jedoch noch nicht gearbeitet.

Was ist zeitkritisch? Wenn nach einer Betätigung eines Tasters die 
Reaktion innerhalb 500ms erfolgt, dürfte das schon in Ordnung sein. Es 
müsste also alle 500ms nachgeschaut werden. Bus setzen und Port abfragen 
erfordert jeweils 8 Bit, also 16 Bit. Bei einer Taktrate von 100KHz 
hätten wird dann 0,16ms. Für 8 Segmente wären das 1,28ms. Dies ist rein 
netto gerechnet. Schlag mal 30%-50% für brutto drauf.

mfg klaus

von Joachim S. (gandalph0365)


Lesenswert?

Ich habe ja schon einige tolle Vorschläge hier gefunden.
dafür möchte ich mich bedanken!

Ich habe jetzt schon ein bischen hier im Forum gesucht. Aber ich habe 
leider keinen Beitrag gefunden wo die Interruptsteuerung erklärt wird.
Wie bekommt der Master (mein BananaPi) mit, dass ich von einem Taster 
den Eingang abrufen muss?
Oder kannt ich mit dem Interrupt ausgang einen Eingang am Bananapi 
belegen.
Und wenn der High ist dann Polling des jeweiligen Bausteins.
Aber sind +5V genug für eine 20m lange Leitunng zum Knotenpunkt?

Viele Grüße
und schon mal ein Dank im Vorraus

von Michael L. (michaelx)


Lesenswert?

Joachim Scheffel schrieb:
> Wie bekommt der Master (mein BananaPi) mit, dass ich von einem Taster
> den Eingang abrufen muss?
> Oder kannt ich mit dem Interrupt ausgang einen Eingang am Bananapi
> belegen.
> Und wenn der High ist dann Polling des jeweiligen Bausteins.

Nicht ganz.

Die Interrupt-Signale sollten genau so funktionieren, wie SCL und SDA. 
Beim MCP23016 weiß ich z.B. dass der Interrupt-Ausgang L-aktiv und Open 
Drain ist. D.h. du musst das Signal genau so mit einem Pullpu-Widerstand 
versehen, und du kannst ggf. auch mehrere Chips zusammen an eine 
Interrupt-Leitung anschließen. Aber dann muss die SW alle Bausteine 
abfragen, die an dieser Leitung hängen, um heraus zu finden, welcher 
Chip den Interrupt ausgelöst hat.

> Aber sind +5V genug für eine 20m lange Leitunng zum Knotenpunkt?

Das ist das gleiche Problem wie generell beim I2C, das musst du 
ausprobieren. Der Bus war ursprünglich nicht für solche Entfernungen 
vorgesehen, aber man kann es durchaus machen. Prinzipiell dürfte die 
Interrupt-Leitung weniger zeitkritisch sein als SDA und SCL.

Jetzt alles klar!?

von Klaus R. (klara)


Lesenswert?

Hallo,
man fragt nicht mehr periodisch ab, sondern wartet auf einen Interrupt 
und fragt dann alle Zustände ab.
mfg klaus

von Hm. (Gast)


Lesenswert?

Schau dir doch mal diese neuen ESP8266 WLAN zu UART Module an.

Die kosten, wenn du mehrere kaufst, nur 3-4€ inkl. Versand und sind 
sicherlich einfacher/flexibler und schneller installiert als irgendeine 
I2C Hausverkabelung.

von Joachim S. (gandalph0365)


Lesenswert?

Gibt es für diese Module eine Doku, Besipiele etc?

von adf (Gast)


Lesenswert?

Bernhard L. R. schrieb:
> I2C ist für die Kommunikation von Bausteinen INNERHALB eines Gerätes
> gedacht und für Deine Anwendung absolut nicht geeignet.


Richtig. I2C ist noch nicht einmal differentiell, geschweige denn
eine Fehlererkennung.


> Schau mal nach RS485 oder CAN


Zum Beispiel.

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.