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.
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
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
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.
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
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
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
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
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!?
Hallo, man fragt nicht mehr periodisch ab, sondern wartet auf einen Interrupt und fragt dann alle Zustände ab. mfg klaus
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.