Schaltkreis zur Porterweiterung gesucht

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Vielleicht kann mir jemande helfen und hat bereits recherchiert. Ich benötige sehr sehr viele GPIOs für die Steuerung einer Modelleisenbahnanlage. Ich würde das gerne über I²C machen. Die üblichen Kandidaten wie der MCP23017 oder der PCF8574 helfen zwar etwas, aber da komme ich an die Grenze, da nur jeweils 8 Stück verschieden adressiert werden können. Ich bin für jede auch andere Idee zum Thema dankbar, denn ich brauche ca. 350 GPIOs. All zu teuer sollte es auch nicht werden, da es sich um ein Hobbyprojekt eines Freundes handelt. Ein anderes Bussystem wäre auch möglich, da ich auf nichts fixiert bin.

  • Hallo.

    ~350 GPIO's :lol: ... tüchtig.
    Aber Spass beiseite.
    Das meiste was ich bisher rausholte, waren 36 zus. "Gpio's".(rennt seit ~2 Jahren im 24/7 Modus perfekt.)
    Realisiert mit kaskatierbaren Schieberegistern.
    Das mag auf den ersten Blick als recht langsam erscheinen, ist es aber beileibe nicht.
    Zusammen mit der >pigpio< Lib ist es möglich, z.B. ein Bitmuster (Byte) auf die GPIO'S zu setzten, ohne einzelne GPIO's setzen/Löschen zu müssen.
    Dann shiften mit max, Freqenz, enablen und drausen ist es.
    Geht natürlich auch umgekehrt.

    Zitat


    gpioRead_Bits_0_31 Read all GPIO in bank 1
    gpioRead_Bits_32_53 Read all GPIO in bank 2

    gpioWrite_Bits_0_31_Clear Clear selected GPIO in bank 1
    gpioWrite_Bits_32_53_Clear Clear selected GPIO in bank 2

    gpioWrite_Bits_0_31_Set Set selected GPIO in bank 1
    gpioWrite_Bits_32_53_Set Set selected GPIO in bank 2

    Letztlich sind also beliebig viele GPIO's realisierbar.
    ...wäre evtl. eine Möglichkeit.

    gruß root

  • Im Hinterkopf habe ich einen Satz, der besagt I²C ist auf 127 begrenzt? Ist das Hinterkopfdenken aus den 90ern, als ich Wolfgang Back mit seinem Lallus das sagen gehört habe?

  • I2C hat eine maximale Kabellänge von glaub ich 10m, was aber auch auf die verwendeten Kabel, den jeweiligen IC und den Bus Speed ankommt. Zum Beispiel ist für viele Port Expander bereits bei 10m Schluss, aber zB unterstützt > dieser < bis zu 50m. Es gibt aber auch sog. "I2C Extender" wie zB > diesen <...
    Es können bis zu 112 I²C-Slave-Devices angesteuert werden, wie viele I/O's diese Devices dann bieten hat nichts mit dem Addressraum (112) zu tun. 112 deshalb weil 16 reserviert sind. Allerdings wird es schwieriger so viele IC's mit jeweils unterschiedlichen Adressen zu finden...
    Siehe dazu auch: http://www.raspberry-pi-geek.de/Magazin/2015/0…berry-Pi-Teil-1

    Ich würde aber eher den Weg über microController gehen... Letztlich können viele Aktionen vom µC selbst erledigt werden wie zB schalten von Ampeln, wo keine Kontrolle vom Steuercomputer von Nöten ist. Die µC kann man dann auch noch zusätzlich an den Steuercomputer anschließen und in den Sketches eine externe Kontrolle implizieren, aber zwingend erforderlich ist das denk ich eher nicht, es würde reichen wenn dieser einfach nur mitteilt "habe auf grün geschaltet". Denkbar wären auch einfach mehrere Arduino-Mega zentral platziert mit Ethernet Shield...


  • Im Hinterkopf habe ich einen Satz, der besagt I²C ist auf 127 begrenzt? Ist das Hinterkopfdenken aus den 90ern, als ich Wolfgang Back mit seinem Lallus das sagen gehört habe?

    nun ja nach der alten Norm, mit der I2C Erweiterung sind auch über 1000 möglich,

    selbst 127 reichen mal 8 Bit für über 1000 Ports wobei nicht alle I2C adressen nutzbar sind, mit PCF8574(A) nur 8 Steine (x8) -> 64 Ports.
    Evtl ist eine Mischung mit MCP möglich aber da müsste man die Adressen mal verifizieren, nicht das es da Überschneidungen gibt.


    I2C hat eine maximale Kabellänge von glaub ich 10m, was aber auch auf die verwendeten Kabel, den jeweiligen IC und den Bus Speed ankommt.

    und wegen dieser Unwägbarkeiten würde ich I2C auch nicht wählen


    Ich würde aber eher den Weg über microController gehen... Letztlich können viele Aktionen vom µC selbst erledigt werden wie zB schalten von Ampeln, wo keine Kontrolle vom Steuercomputer von Nöten ist.

    jain, mit den "Problemchen" das ein µC bei Änderung immer umprogrammiert werden will was ich persönlich als serviceunfreundlich empfinde.

    Also wenn µC würde ich viele kleine nehmen die an TxD lauschen, die einfach per Adresse im Klartext angesprochen werden, alle am Bus lauschen und sich nach Kommando rückmelden.

    Also Modul1 setze Port n für output oder Modul 1 wie steht Port n?
    alle anderen Module die nicht angesprochen werden schweigen für die Zeit X bis die Antwort übermittelt wurde. Dir RxD Leitung könnte sogar über Analogmultiplexer dann an RxD vom PI geschaltet werden.

    Die Leitungslänge ist dann bei langsamen Baudraten kein Problem und kann mit max3232 sogar zu größeren Entfernungen gewandelt werden.

    Oder man nimmt gleich die PI Lib die per Bitbanging ein Bit und ein Clock überträgt und arbeitet mit 2 Ports auf Schieberegister Latches, ser In par Out für Ausgänge.

    bei 100µs Reaktionszeit wären das für 1000 Ports 100ms für ein Setzen, das sollte bei einer Modellbahn doch locker reichen, jedenfalls für Weichen und Lichter.

    Schnellere Reaktionen können an anderen Ports per Interrupt erledigt werden.

    Für Inports gilt ähnliches, par In ser Out mit Latches

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Huch, da sind ja gleich ein paar Antworten zusammengekommen. 10 Meter für den I²C ist aber sportlich. Die Verkabelung ist auch schon vorgegeben, da die Anlage schon steht. Es ist eine, bei der alles manuell zu schalten ist. Da kommen pro Lampe in einem Haus tatsächlich 2 Kabel am Pult an, bei einer Weiche sind es z.B. 3 Kabel. Der I²C-Bus wird also nur wenige cm vom RasPi zur GPIO-Erweiterung gehen. Bei dem Projekt kommt es auch nicht auf Geschwindigkeit an, so dass ich mir die Sache mit den Schieberegistern mal ansehen werde.
    Automatisch zusammengefügt:
    Der CY8C9560A-24AXI ist sehr interessant. Muss mal überlegen, ob ich für den ein Breakout ätzen kann.

  • Moin Jörg,
    also ich würde da auch erst mal auf µC setzen. I2C ... naja ... ich bin mir da nicht sicher, ob das bei der Menge an Kabeln, die da vermutlich zusammenkommen, nicht einfach nur noch Matsch liefert ...
    µC deswegen, weil es sicher auch "priorisierte" Dinge gibt ... z.B. eine kritische Situation, in der zwei Loks drohen zusammenzustossen oder einfach nur ein umgekippter Waggon auf den Gleisen liegt.
    Das mit I2C abzubilden und auch entsprechend zeitnah mitzubekommen halte ich für sehr ehrgeizig.
    Wie jar auch andeutete wäre den µC wäre da eine Signalisierung per IRQ möglich.
    Deweiteren wäre zu überlegen, ob tatsächlich alle Situationen per I/O abgehandelt werden müssen.
    Es gibt sicherlich einige Fälle, in denen eine "einfache" Schaltungslogik ohne Intelligenz dahinter ausreicht (ich denke da z.B. an korrespndierende Signale, Weichen, ...).

    Jedenfalls ganz schön heftig ...
    Viel Erfolg jedenfalls,
    -ds-

  • Naja so heftig auch nicht. Wir haben mit dem MCP23017 ja schon angefangen, da funktioniert das bei den Eingängen mit Interrupts auch, aber wir brauchen kaum Eingänge. Uns gehen nun die Schaltausgänge aus, das ist das Problem. Jede Weiche braucht 2 GPIO's, jedes Haus und jede Straßenbeluchtung (da natürlich der ganze Straßenzug zusammen) soll einzeln Licht bekommen. Schranken sollen auf und zu gehen. Die Züge an sich sind bereits digital umgerüstet. Der Streckenplan liegt auf einem großen TV. Das war eigentlich der Hauptgrund einen RasPi zu benutzen. Jetzt sind wir gerade dabei die Schalter vom ehemaligen Pult auf ein Webinterface zu bringen, so dass man z.B. eine Weiche anklickt, die dann umschaltet. Eine eigene interne Logik wird gar nicht benötigt und ist auch nicht gewollt. Vielleicht später mal, dass Unsinn, der mit den Schaltern manuell passieren konnte verhindert wird. Wir wollen einfach nur das Schaltpult "modernisieren". Schlimmer als die Verkabelung jetzt ist, kann es nicht werden :s


  • jain, mit den "Problemchen" das ein µC bei Änderung immer umprogrammiert werden will was ich persönlich als serviceunfreundlich empfinde.

    Für mein RoPi Projekt habe ich einen Sketch im Einsatz wo man die Ports via UART programmieren kann ohne den Sketch neu flashen zu müssen ;) Die Abfrage erfolgt dann ebenfalls über UART.

    Hier der Haupteil: http://codepad.org/X1R85J2H
    Falls Interesse besteht poste ich auch gerne alles sowie eine Erklärung zuzüglich dem Python Gegenstück.

    Man kann ja µC via I2C an den Pi anbinden und die dann steuern - es muss nicht ein Mega sein, es würden auch die billigen Clone aus China reichen, Pro Mini o.ä.


  • Man kann ja µC via I2C an den Pi anbinden und die dann steuern - es muss nicht ein Mega sein, es würden auch die billigen Clone aus China reichen, Pro Mini o.ä.

    du hattest ja selber die Einschränkungen der I2C Länge eingebracht wenn dann bei 15m über eine Modellbauanlage würde ich es mit µC so machen:


    Also wenn µC würde ich viele kleine nehmen die an TxD lauschen, die einfach per Adresse im Klartext angesprochen werden, alle am Bus lauschen und sich nach Kommando rückmelden.

    Für TxD und RxD gelten die Längeneinschränkungen eher nicht und mit klaren Portanweisungen, Modul1 setze Port 15 ist es einmal programmiert kein Problem, Umkonfiguration der genutzten Ports ändert ja nix am Komando das der µC umprogrammiert werden muss, man sendet einfach Modul1 setze Port 14 wer umklemmt.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

    Einmal editiert, zuletzt von jar (6. März 2016 um 22:11)

  • [font="Times New Roman"]Hab auch schon mit CY8C9560A testen wollen.[/font]
    [font="Times New Roman"]Brauche auch ewig viele Ports. Momentan benutze ich den Mcp23017 0x20-0x27 und pcf8574a 0x36-0x3f und komme so auf 192 Ports. [/font]
    [font="Times New Roman"]Kannst du mir sagen welche Adressen der CY8C9560A belegt und ob die i2cset und i2cget Befehle auch dort funktionieren [/font]

    [font="Times New Roman"]Mfg [/font]

    Einmal editiert, zuletzt von gismo66de (28. Juni 2016 um 18:44)

  • mittlerweile lese ich mich ein bissl in CAN Bus ein, was im Auto schon hinreichend gut funktioniert sollte doch auch auf der Modelbauanlage.....

    3 Strippen + - Canbus und der kleine CanbusController an jeder Weiche oder jedem Signal.
    Die Chips gibt es ja nun in Serienstückzahlen billig, soweit ich bis jetzt weiss könnte das auch ein Atmel machen oder mit dem Canbus Chip interagieren.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

    Einmal editiert, zuletzt von jar (28. Juni 2016 um 12:48)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!