Du bist da nicht allein. Viele Arduino-Einsteiger suchen erstmal vermeintlich 'einfache' Lösungen für ihre eben nicht so einfachen ersten Projekte.
Aber wenn es über die einfachsten Aufgaben in den Beispielen (Led blinken lassen ) hinausgeht, muss man sich halt tiefer 'hineinknien' und das kostet eben doch etwas mehr Mühe und Lernen als man anfangs denkt.
Dabei helfen wir dann aber durchaus gerne .
Die Mega2560 haben vier UARTs, man kann also Serial1 mit Serial1 verbinden. Das erscheint mir einfacher, als mit dem I²C-Bus zu jonglieren.
Nicht nur C++ sondern auch der Umgang mit den Aktiven des Forums will gelernt sein. Du bist nicht der Erste, bei dem sich das erst noch zurechtruckeln muß. Nimm Dir Zeit, die Beiträge zu lesen, um ggf. Rückfragen stellen zu können.
Bei I2C sind die einzelnen Transaktionen vom Protokoll/Hardware eindeutig getrennt.
Für all das brauchts per UART ein eigenes Protokoll, einen Parser und einen Generator.
Moin,
Ich hatte mal für eine modellbau bahnhofssteuerung beides (uart master/slave und i2c port expander) kombiniert und kam auf grob
160 Digitalausgaenge (Relais) und ca 100 Digitaleingaenge. Vllt reicht dir das von dem Master mit i2c und mit den 8 (über lötbrücken) adressierbaren pcf8575 mit denen je 16 io's möglich sind kommst du ja auf locker auf 54+8×16 > 182 io's. Wäre meiner Meinung nach das einfachste. Anregungen für programm code zur Ansteuerung der port expander mit i2c Kommunikation kannst dir gerne hier abgucken:
Nach dem Datenblatt vom Signal sind eh alle LED so wie es gebraucht wird angeschlossen. 4015.pdf (999,8 KB)
10 mA / LED passt auch, so kann Rangierfahrt auf ein Pin. Und das ganze Signal wird über 3 Pixel gesteuert.
Und von Signal zu Signal braucht es nur 3 Leitungen. Und nur einen am Mega oder UNO.
Und für so eine Baureihe 1969 z.B.
Blocksignal----- 1 Pixel
Ausfahrsignal- 3 Pixel
Einfahrsignal-- 1 Pixel
Vorsignal ------- 2 Pixel
Da dann eine Lib zu erstellt mit den Ab ; Umblend und Pausen-Zeiten.
Ich finde deine Gedanken toll. Habe mir zum probieren mal ein Zenerpaket 2811 in der Bucht bestellt.
@martin-lo Das finde ich eine super Idee, aber nur für Selbstbausignale anwendbar, oder?
Allgemein zu den Port Expandern:
Ich habe hier also eine kleine Zusatzplatine, an die ich Taster und/oder LEDs anschließen kann. Der Sinn dahinter ist, dass man mehr Sachen anschließen kann, als ich Arudino PINS benötige. Also z.B. 16 LEDs anschließen, benötige aber nur 8 PINS am Arduino.
Verstehe ich das so richtig?
@MicroBahner In Post #23 hast du den Link zu dem fertigen DCC-Sketch geteilt. Ich hatte bis jetzt leider noch keine Zeit es im Detail durchzulesen, ich benötige aber dennoch eine DCC-Zentrale oder ?
Diese schickt dann ein DCC Signal an kleine, verteilte Arduinos, an denen dann wiederrum die Signale angeschlossen sind?
Von einem befreundeten Modellbahnkollegen habe ich in der Zwischenzeit eine andere Idee erhalten, die ich euch kurz vorstellen möchte. Ich weiß aber selbst nicht ob das eine schlaue Idee ist.
Es werden 2 Arduinos "in Reihe geschaltet". An dem ersten Arduino sind die Taster angeschlossen. Wenn bestimmte Taster gedrückt werden, schaltet das Arduino einen bestimmten Ausgang auf HIGH. Also z.B. Taster 2 und 8 gedrückt -> Setze PIN 23 auf HIGH)
Diese Ausgangs-PINS des 1.Arduinos sind als Eingänge am zweiten Arduino angeschlossen. Hier ist das Spiel im Prinzip das gleiche: Je nach Eingang werden an bestimmten Signalen bestimmte Signalbilder geschaltet.
Auch den Kabelsalat im Stellpult würde das verringern, da ich Arudino1 direkt unter die Anlage montieren würde.
Diese Möglichkeit funktioniert (meines Wissens nach) nur, wenn es die Möglichkeit gibt, über einen Arduino-PIN mehrere Informationen zu schicken (ich meine eine Art Bitcode-Folge, diese Informationen könnten dann in Arudino2 wieder "auseinandergepflügt" werden)
Könnte man hierfür evtl die Analogausgänge des Arduios nutzen?
Das ist in etwa das, was UART und I2C tun.
Auch DCC.. obwohl ich davon KA habe.
Warum sollte man das Rad neu erfinden?
Wenn doch die alten seit (über?) 1/2 Jahrhundert rund laufen.
Ja, im Prinzip schon. Das könnte aber auch ein Arduino im Stellpult übernehmen, der je nach gedrücktem Taster ein entsprechendes DCC-Signal erzeugt. Das wird dann eben nicht über die Schienen, sondern über 2 Drähte an die verteilten Arduinos übertragen.
Sowas ähnliches, nur kleiner und für ein paar Weichen hatte ich für einen Moba-Kollegen schon mal gemacht. Müsste vermutlich nur entsprechend erweitert werden.
Wenn man die im Schaltbild noch freien IOs mit verwendet, könnte man eine 8x8Matrix aufbauen, mit der Du 64 Taster verwalten kannst. Da reicht dann immer noch ein classic Mini/Nano. Sind es nur Taster und es werden nie mehr als 2 gleichzeitig gedrückt, kannst Du auch auf die Dioden verzichten.
Der Abstand DO zu DIN darf aber nicht zu groß werden.
Ja auch. Mit vier SPI-Pins kannst Du beispielsweise acht MCP23S17 mit je 16 IOs ansprechen.
Allerdings können die Portexpander auch andere elektrische Eigenschaften gegenüber den Arduino-Pins haben, beispielsweise mehr Strom liefern oder nur bei der Veränderung an einem Eingang den Arduino benachrichtigen.
Jetzt verstehe ich das, vielen Dank.
Ich habe gerade nochmal nachgezählt, Stand jetzt benötige ich 41 Taster für die Steuerung, würde dann wahrscheinlich trotzden gleich auf 7x8=56 oder sogar gleich 8x8=64 mögliche Taster aufstocken (mir fällt ja immer noch was ein... )
Ich habe zwar nur Taster zum ansteuern und in den meisten Fällen werde ich auch nur 2 gleichzeitig drücken (1 Fahrstraße über Start/Ziel stellen), da das mit den Dioden aber ein einmaliger Verdrahtungsaufwand wäre, würde ich sie mit einbauen.
Ich habe dann sozusagen nur 2 Kabel, die vom Stellpult unter die Anlage zu kleineren Arduinos führen würde.
Für die LEDs brauche ich 58 Anschlüsse an einem Arduino, hier würde ein MEGA unter der Anlage reichen (evtl. würde ich trotzdem 2 oder 3 kleinere Arduinos nehmen)
Das einzige "Problem", welches bei dieser Möglichkeit besteht, ist die Stellungsrückmeldung im Stellpult für die Signale.
Hier möchte ich pro Signal eine DUO-LED rot/grün nehmen, welche bei HP0 rot, und bei allen anderen Signalbildern (HP1, HP2, Sh1) grün ist. Für Zs-Signale gäbe es eine extra LED.
Kurze Signalkunde:
HP0: Halt -> 2 rote LEDs leuchten
HP1: Freie Fahrt -> 1 grüne LED leuchtet
HP2: Freie Fahrt mit Geschwindigkeitsbegrenzung -> 1 grüne + 1 gelbe LED leuchten
Ich möchte zwar Signale einer anderen Firma verbauen, der elektrische Aufbau der Signal ist aber prinzipiell der gleiche. Die Signale kann ich selbst konfigurieren, d.h. es würden bei allen Signalen noch Sh-Signale dazukommen, bei manchen auch noch Zs-Signale
(das dürfte aber kein Problem sein)
Was meinst du damit?
Also werden mehrere SIgnale "in Reihe" geschaltet?
Könnte ich /Macht es Sinn die beiden Varianten DCC und NEOs zu kombinieren?
Ja wozu mache ich deine Arbeit? Du stellst ein Signal (Kaufsignal) als Bild ein
Diese Doku 4015 PDF. gibt Auskunft was und wie dieses Signal angeschlossen wird.
Wenn ich z.B 64 LED an einem UNO schalten will. würde ich das mit 4 Portexpander realiesieren. PCF 8575 oder MCP 23017 würde dann nemen. Dafür brauch man am den I²C bus des Arduino. SDA SCL Leitungen. Kaufst Du entsprechend Module sind die Pullup für SDA SCL schon vorhanden.
Ein PCF 8575 hat 16 IO PINs ergo brauchst Du 4 dieser Bausteine.
Auf der Hardware legst Du die Adressen fest.
Diese 4 unterschiedliche Adressen (0x20----0x23) werden im Im Sketch übernommen und angesprochen. Dann kannst Du so 64 LED mit nur 2 Leutungen des Arduino ansteuern.
Feine sache oder. Jetzt zum Haken der Angelegenheit. die SDA und SCL Leitungen sollten nicht länger als 40 cm sein. für längere Abstände brauchst Du entsprechende Teiberbausteine und geschirmte Leitungen.
Möchtest Du z.b die LED dimmen nimmst Du 4 PCA9685 Bausteine ... (diese Module (werden meistens als Servomodule verkauft)
Für 64 Taster.... würde ich 1 PCF8575 und die Lib von Rob Tillaat verwenden. gukst du hier GitHub - RobTillaart/I2CKeyPad8x8: Arduino library for 8x8 or smaller KeyPad connected to an I2C PCF8575.
Damit wären dann immer noch nur die beiden I²C Leitungen im gebrauch
Die bekommen dann nur 1 neue Adresse im Sketch (0x24)
Da zum Thema Port Expander . und auch grade für den Einsteiger. schau mal hier: https://wolles-elektronikkiste.de/
Ja so mein Gedanke. Über Ergebnisse wie weit das tatsächlich geht musst Du wohl 1-2 Wochen warten müssen. Die WS2811 habe ich erst heute bestellt aber ich bin da guter Dinge. Der Einwand von @agmue ist soweit berechtigt, da es zu Fremdeinstahlung kommen kann. Da wird dann wohl ein geschirmtes Kabel verwendet werden müssen. Sowas ergibt sich aber, wenn man die Hardware aufbaut und testet.
Da fließt nur 1 µA Strom, der leicht von elektromagnetischen Feldern gestört werden kann. Auf einer Modellbahnanlage ist das recht wahrscheinlich. Je länger das Kabel, desto höher die Wahrscheinlichkeit.
Daher hatte ich CAN-Bus oder RS485 mit Differenzsignalen und verdrillten Kabeln vorgeschlagen, weil sich da die Störungen im Idealfall zu Null addieren. CAN-Bus hat noch eine Prüfsumme zur Überprüfung der Gültigkeit eingebaut.
Für Dich sind die von Dir aufgeführten Argumente zutreffend, aber der Einstieg erscheint mir bei einem Protokoll, welches ich mitlesen kann, irgendwie einfacher.
Ein I²C-Bus, der zwei µCs verband, konnte ich zum Blockieren bringen, was mir mit Portexpandern und dergleichen noch nie passiert ist. Daher habe ich da eher ein ungutes Gefühl. Das könnte meiner Dummheit geschuldet sein, allerdings möchte ich es dann doch lieber dem I²C-Bus in die Schuhe schieben, der kann sich nicht wehren.
Sind das nicht glasklare Belege?
Eventuell schmelzen sie aber auch dahin wie Eis in der Sonne
Angenommen mir fällt ein Apfel auf dem Kopf, würde ich dann allen empfehlen, nur noch Pflaumenbäume zu pflanzen?
All die schönen Apfelkuchen weltweit dafür opfern.....