nach ewigem Lesen hier in Forum, habe ich mir überlegt mal einen eingen Tröt zu erstellen. Erstmal Danke an alle für die vielen Information die ich aus dem Forum verwenden konnte.
Geschichte:
Vor ca 2 Jahre hat mich wieder die Modellbahn gepackt (als Kind viel mit der M-Gleis Anlage meines Vaters gespielt) und nun baue ich nach ca einem Jahre Teppigbahning endlich eine Feste Anlage. Der Raum ist ca 15m². Anlage wird in U Form gebaut (nicht ganz). Gebaut wird ein Kopfbahnhof (6 Gleise) mit S-Bahn Tiefbahnhof. 2 gleisige Hauptstecke und BW mit Schiebebühne.
Nun zu eingedlichen Thema die Gleisbesetztmeldung.
Nach langen suchen und vergleichen der Verschiedenen GBM (bzw. Rückmelde) Module diverser Hersteller. Hab ich mich dazu entschlossen meine GBM selbst zu bauen. JA ich weiß mann erfindet das Rad mit jedesmal neu. Aber der Spass und die Erkenntnisse waren es wert.
Folgende Pflichten mussten erfüllt werden.
1. Rückmeldung an RocRail ... per Ethernet 2. Möglichst geringer Digital Strom verbrauch. Da geht noch mehr 3. Einfach aufzubauen bzw. Selbst zu Löten. Troz SMD Bauteile 4. Keine Bus Verkabelung.. sprich möglichst wenig Kabel. 5. Geringe Kosten für 16 Melder.
Der Microcontroller ESP8266 verbindet sich zum AccessPoint. Und sendet bei veränderungen der Sensor eingänge die Information per UDP Packet an RocRail. (Broadcast).
Die Schaltung verfügt über entsprechen Puffer Elkos die das eingangs Signal puffert ca 100ms. Und es somit nicht zum flackern der Sensoren kommt.
Erst in Betriebnahme.
Hierzu muss die entsprechende Firmware auf das ESP8266 Module geladen werden. Die erfolgt initial per UART. Dannach ist es möglich den ESP8266 per OTA (Over the Air) upzudaten.
Nach vielen Test sind das ergebnis sehr gut. Sehr zügige Rückmeldung an RocRail. Keinerler Fehlmeldungen usw.
Läuft....
Akutelle sind bei mir 4 Platinen verbaut mit insgesamt 52 von max 64 Eingängen.
Werde die Tage noch mein USB2CAN Adapter auf Teensy 3.6 Basis vorstellen.
Wer Fragen hat immer her damit. Nachbau ist natürlich gewünscht ( da bin ich über die eigenen Erfahrungen sehr neugierig.)
Ich kann das jetzt nicht ganz erkennen, aber wie gehen denn jetzt deine S1 bis S16 mit den SchottkyDioden zusammen? Das ist da sehr eng.
Ich hätte das wirklich nicht per WLAN angeschlossen, weil da sowieso Strom hin muss, also kann auch nen Kabel dran... Weiterhin hätten zum entprellen eigentlich auch "billige" Kondensatoren gereicht, statt den doch recht preishungrigen Tantals. Oder hast du da andere Erfahrungen gemacht?
Bist du sicher, dass die Dioden genügend groß Dimensioniert sind? Die sollten 3, eher 4 A vertragen können (Kurzschluss ist auch Betriebsfall).
Da ich zwar auch eigentlich nur eine Rückmeldung brauche, aber 1. Funk nicht für mich in Frage kommt und 2. auch ohne PC was angezeigt werden muss, komm ich um LocoNet nicht drumrum!
Die Dioden an S1-S16 sogenanter Dioden Trick.... wenigstens eine halbwelle auf der isolierten Schienen Seite. Über Jumper J1
Die Tantals.....Was mann nicht alles so zuhause rumfliegen hat. klar 10µF Elko geht auch... Kondensatoren hmm nicht versucht, solle aber auch funktionieren.
Die Dioden sind 2A..... da nur eine MS2 vorhanden ist.. z.zt ausreichend. Klar bei größeren Anlagen bzw Stärkerer Strom Versorgung. ggf. größer Dimensionieren. Das Lötpad ist auch etwas zu klein.
Funk bzw WLAN war für mich klar da ich, geplanter Endausbau 10x16 Eingänge ,nicht verkabeln wollte. So kann ich sehr kurze Kabel von dem Gleis zum Melder legen und gut. Strom 5V und Bahnstrom sind eh überall notwendig..
Hallo EnterTain, gibts auch einen richtigen Namen? Deine Platinenpreise sind für die Qualität erstaunlich. Nennst du den Lieferanten? Interessantes Konzept. Gruß Volker
Zitat Die Dioden an S1-S16 sogenanter Dioden Trick.... wenigstens eine halbwelle auf der isolierten Schienen Seite. Über Jumper J1
Die Tantals.....Was mann nicht alles so zuhause rumfliegen hat. klar 10µF Elko geht auch... Kondensatoren hmm nicht versucht, solle aber auch funktionieren.
Die Dioden sind 2A..... da nur eine MS2 vorhanden ist.. z.zt ausreichend. Klar bei größeren Anlagen bzw Stärkerer Strom Versorgung. ggf. größer Dimensionieren. Das Lötpad ist auch etwas zu klein.
Funk bzw WLAN war für mich klar da ich, geplanter Endausbau 10x16 Eingänge ,nicht verkabeln wollte. So kann ich sehr kurze Kabel von dem Gleis zum Melder legen und gut. Strom 5V und Bahnstrom sind eh überall notwendig..
Diodentrick ist klar, aber wo geht beispielsweise dein S1 hin, das ja aus der Mitte kommt, da ist kein Knoten und es steht halb in der Zenderdiode.
Ja, gut, wenn die sowieso da sind hätte ich die Tantals auch genommen, kommt ja nicht drum.
Ich würde trotzdem kein Funk nehmen, der Kollege sagt immer "Solls funktionieren, nimm nen Kabel", dem kann ich aus meiner Erfahrung nur zustimmen.
Der Microcontroller ESP8266 verbindet sich zum AccessPoint. Und sendet bei veränderungen der Sensor eingänge die Information per UDP Packet an RocRail. (Broadcast).
Hm - und was schickst Du genau an RocRail? XML, CAN-Pakete?
Zitat Werde die Tage noch mein USB2CAN Adapter auf Teensy 3.6 Basis vorstellen.
Tolles Projekt. Auch ich baue meine Elektronik komplett selber. Ich ordere meine Platinen in China, Route diese mit Sprint Layout
Habe mal ne Frage zum MCP 23017 ich verwende diese auch in diversen Schaltungen, bisher aber nur als Ausgabeerweiterung
Ich habe ihn mal versucht, als Eingabe zu verwenden hatte da aber etwas Probleme mit den Registern. ich meine das man die Register 0x18 und 0x19 auslesen muss um diese als Eingang zu verwenden.
Kannst du mir dazu etwas sagen, bzw auch welche Adresse abgefragt werden muss in der Regel ja 0x20 (0x40) für out und ox21 (0x41) für in wenn alle Adresspins Low sind.
Gerne auch per PN
Gruss Patrick
Irgendwo im Ruhrgebiet
- Moderner Hauptstreckenverkehr für Nah/Güterverkehr - Industrieanbindung - SpDrS60-Stellwerk
sorry für die späte Antwort... Italien hat gerufen.. der ESP8266 schickt Packet per UDP an RocRail... das schöne daran ist das diese 1:1 den CAN messages enstspricht. Wie z.b eine L88s message..
ich verwende hier die MCP23017 Library von Adafruit (ja ich weiß langweilig) ..... Aber wenn es Lib gibt dann verwende ich sie auch gerne.. Das mit dem Rad und so...
Wenn ich mit das DB anschaue. Sind folgende Schritte notwendig. (Ich gehe mal von der Default MCP23017 ID aus. 0x20. A0-2 nach GND)
1. Festlegen ob eingang oder Ausgang.
ID REGISTER VALUE 0x20 0x00 0xFF um alle Port auf Bank A als Eingang zu definieren. 0 Ausgang 1 Eingang 0x20 0x01 0xFF um alle Port auf Bank B als Eingang zu definieren. 0 Ausgang 1 Eingang
2. Zum Auslesen der Eingänge.
0x20 0x12 für Bank A 0x20 0x13 für Bank B
Ich teste das heute Abend nochmal. Habe ich gerade auf die schnelle zusammen gesucht.
ich verwende hier die MCP23017 Library von Adafruit (ja ich weiß langweilig) ..... Aber wenn es Lib gibt dann verwende ich sie auch gerne.. Das mit dem Rad und so...
Wenn ich mit das DB anschaue. Sind folgende Schritte notwendig. (Ich gehe mal von der Default MCP23017 ID aus. 0x20. A0-2 nach GND)
1. Festlegen ob eingang oder Ausgang.
ID REGISTER VALUE 0x20 0x00 0xFF um alle Port auf Bank A als Eingang zu definieren. 0 Ausgang 1 Eingang 0x20 0x01 0xFF um alle Port auf Bank B als Eingang zu definieren. 0 Ausgang 1 Eingang
2. Zum Auslesen der Eingänge.
0x20 0x12 für Bank A 0x20 0x13 für Bank B
Ich teste das heute Abend nochmal. Habe ich gerade auf die schnelle zusammen gesucht.
Hallo
ok..das ist soweit verständlich und auch schon von der Ausgabe bekannt (hier ist ox14 und ox15)
Hatte diese beiden Bänke auch schon Probiert konnte aber nix vom MCP lesen. kannst du evlt mal kurz zeigen wie du das genau auswertest, Erfahrungen habe ich schon mit dem PCF 8574...aber dieser hier scheint etwas anders zu arbeiten
Danke und Gruss Bin gespannt
Patrick
Irgendwo im Ruhrgebiet
- Moderner Hauptstreckenverkehr für Nah/Güterverkehr - Industrieanbindung - SpDrS60-Stellwerk
void setup() { Wire.begin(); Serial.begin(115200); Wire.beginTransmission(0x20); Wire.write(0x00); // IODIRA register Wire.write(0xFF); // set all of port A to inputs Wire.endTransmission(); Wire.beginTransmission(0x20); Wire.write(0x06); // Internal Pullup Wire.write(0xFF); // enable Pullups on all Ports A Wire.endTransmission();
}
void loop() { // put your main code here, to run repeatedly: Wire.beginTransmission(0x20); Wire.write(0x13); // address PORT B Wire.endTransmission(); Wire.requestFrom(0x20, 1); // request one byte of data byte input=Wire.read(); // store incoming byte into "input" Serial.println(input); delay(1000); }
Ich lese die input ein und vergleich mit den vorwert.. Wenn änderungen dann wird diese per UDP ausgesendet. Ein lösung mit den Interrupt Pins der MCP habe ich auch versucht aber hier habe ich das Problem wenn änderungen auf mehere Ports geschehen das die nicht sauber von der Interrupt Routine verarbeitet werden. Aus diesem Grund simples polling so schnell wie möglich.
ich bin nicht wirklich gut im erklären...sorry. Aber das write auf 0x13 wird benötigt um die Bank anzugeben die gelesen werden soll. Ja korrekt mit read wird die Bank ausgelesen welches in die variable input geschrieben wird. Hier wird ein byte zurück geleifert. z.b eine 255 wenn alle eingänge geschaltet sind und z.b eine 1 wenn nur Port 1 der Bank geschaltet ist.
ich bin nicht wirklich gut im erklären...sorry. Aber das write auf 0x13 wird benötigt um die Bank anzugeben die gelesen werden soll. Ja korrekt mit read wird die Bank ausgelesen welches in die variable input geschrieben wird. Hier wird ein byte zurück geleifert. z.b eine 255 wenn alle eingänge geschaltet sind und z.b eine 1 wenn nur Port 1 der Bank geschaltet ist.
Grüße Tain
Hallo
ok..danke..ich werde das mal testen das würde mir wirklich viel erleichtern wenn ich den so nutzen könnte. Ich will eigentlich immer nur ganze Bytes übertragen von einem mcp zu einem anderen über ca 10 - 15 m über einen verstärker.
dank dir erstmal. ich werde das mal testen und mich bei Gelegenheit nochmal bei dir melden
Gruss Patrick
Irgendwo im Ruhrgebiet
- Moderner Hauptstreckenverkehr für Nah/Güterverkehr - Industrieanbindung - SpDrS60-Stellwerk
Was ist eigentlich der Unterschied zwischen einem Gleisbesetztmelder und einem Rückmelder??
Hallo,
im Prinzip: ein Rückmelder meldet einen Zustand (Stromkreis offen oder geschlossen) an die Zentrale. Ein Gleisbesetztmelder (Stromfühler) prüft, ob auf dem Gleis ein Strom fließt, und zeigt das an, indem er einen Stromkreis schließt oder öffnet, was der Rückmelder wiederum an die Zentrale melden kann. Oft werden beide Funktionen in einem Gerät vereinigt.
Freundliche Grüße Erich
„Es hat nie einen Mann gegeben, der für die Behandlung von Einzelheiten so begabt gewesen wäre. Wenn er sich mit den kleinsten Dingen abgab, so tat er das in der Überzeugung, daß ihre Vielheit die großen zuwege bringt.“ Friedrich II. über Fr. Wilhelm I.