Einfaches Drucktastenstellwerk auf Arduino-Basis mit Loconet-Schnittstelle - Entwicklungsstadium

#1 von Draisine , 18.04.2024 07:47

Ausgangspunkt meiner Arbeit waren Überlegungen zum Bau eines Weichenstellpults, das ich zur Steuerung der Weichen meines Betriebswerks nutzen wollte. Hier wird bis auf ein Ein-/Ausfahrsignal nur auf Sicht gefahren und die Weichen manuell gesteuert. Außerdem soll in einem späteren Ausbauschritt auch die Drehscheibe in das Stellpult mit einbezogen werden.

Die ersten Überlegungen zur Realisierung liegen schon einige Jahre zurück, kamen aber aufgrund mangelnder Zeit und anderer wichtigerer Tätigkeiten über einen einfachen Testaufbau nie hinaus, Allerdings war es mir bereits vor längerer Zeit schon möglich Fahrstraßen über die Auswahl von Weichen festzulegen, geplante Weichenstellbefehle über eine UNDO-Funktion rekursiv zurückzunehmen oder aber auch die gesamte Auswahl über einen weiteren Taster zu resetten. Die Auswahl selbst wird durch eine Quittiertatste bestätigt, die Weichen werden anschließend zeitversetzt über den DCC-Ausgang der Zentrale und passende Weichendecoder geschaltet. Die Übertragung vom Stellpult zur Multibus-Zentrale (hier: Yamorc 9401) erfolgt über eine Arduino/Loconet-Schnittstelle. Das Loconet-Shield entstand aus einem Nachbau eines einfachen aber voll funktionstüchtigen Loconet-Interfaces, das ich auf der Internetseite von Philipp Gahto gefunden habe (https://pgahtow.de/w/Loconet#/media/Date...t_Interface.png).
Die Kommunikationssoftware zum Loconet nutzt die Loconet-Bibliotheken (Loconet.h) von Alex Shepherd und Damian Philipp, ebenfalls im Internet frei verfügbar. Außerdem diverse andere Programmteile zum Lesen und Schreiben der Loconet OP-Codes (z. B. auch bei Philipp Gahtho und anderen).

An dieser Stelle nochmal ausdrücklich mein Dank an all die, die diese Informationen zur freien, privaten Nutzung zur Verfügung stellen.

Neben der anfänglichen, doch sehr rudimentären Testphase, bei der es u. a. auch darum ging wie ich die Tastenbefehle in den Arduino bekomme (Test mit Encoder, Multiplexer oder I2C-Bus) sowie die Möglichkeit wichtige Daten auch nicht flüchtig in ein Fram zu speichern, habe ich mir mittlerweile für meine im Arbeitszimmer befindliche Testanlage ein passendes Stellpult aufgebaut und bin aktuell dabei die gesamte Software neu zu schreiben. Wozu auch die Implementierung der von der Zentrale über Loconet gesendeten Weichen- und Belegtmeldungen auf dem Stellpult gehört. Das funktioniert mittlerweile einwandfrei. An den Eingaben zur Eingabe Weichenstellungsänderungen bin ich momentan mit Unterbrechungen dran. Erste Überlegungen zur Fahrstraßeneingabe mittels Start- und Zieltaster habe ich auch schon gemacht, die entsprechenden Taster sind auf dem Stellpult bereits vorgesehen. Die Realisierung ist allerdings ergebnisoffen und zeitlich unbestimmt.

Mein Stellpultaufbau hat kein reales Vorbild, ich habe es halt so gebaut wie ich mir eine vernünftige Steuerung vorstelle, der Einfachheit halber mit je zwei Tastern je Weiche (gerade/abzweigend) und jeweils aktueller Anzeige der Stellungsänderung. In einer späteren Version vielleicht nur noch mit einer Taste für die Weichenauswahl allgemein und einer Taste je Weiche zum wechselseitigen Umschalten. Damit könnte ich in etwa die Hälfte an Weichentastern einsparen und damit letztlich auch Eingängen an den I2C-Bausteinen, die ich zur Eingabe verwende. Eine Erweiterung mit Signaltasten und -anzeigern ist ebenfalls möglich, derzeit von mir allerdings nicht vorgesehen.

Bild entfernt (keine Rechte)

Zusammenfassend läßt sich folgendes festhalten:

Aktuell: realisiert bzw. noch in der Softwareentwicklung

    - Arduino Uno mit Loconet-Shield und Loconet-Bibliothek
    - Ein- und Ausgabe über I2C-Schnittstelle (hier: Marke Horter)
    - Speicherung der Weichenstellungen und div. anderer wichtiger Daten auf 8 kByte Fram SPI
    - Lesen der Weichen-und Belegtmelderangaben von der Zentrale und Ausgabe auf dem Stellpult
    - je zwei Drucktasten für Weichen (gerade/abzweigend) mit LED-Ausleuchtung der aktuellen Stellung und der ausgewählten Stellung (blinkend)
    - UNDO-Taste bei Weicheneingabe am Stellpult
    - Resett-Taste für Gesamtresett der Eingabe
    - Quittiertaste zum Auslösen der Weichenstellbefehle, Wenn man die Taste gedrückt hält kann man die Weichen auch einzeln schalten
    - Modusschalter für Eingabe Weichenauswahl oder Fahrstraßenauswahl


Zukünftig oder optional:
    -Vorbereitung Start- und Zieltaste für Fahrstraßen mit Belegtmelderabfragen und vereinfachter Ausleuchtung des Fahrwegs
    Hierzu hatte ich schon Tests mit Graphentheorien zur automatischen Ermittlung der kürzesten Verbindung von Start nach Ziel
    durchgeführt.
    - Speziell bin ich hierbei auf ein Verfahren nach Dijkstra gestoßen, das ich auch programmtechnisch bereits umgesetzt
    habe und das, basierend auf der eigegebenen Gleistopologie und Gewichtung der Zweigelemente, auch wunderbar funktioniert, allerdings auch nicht praxistaugliche Lösungen liefert. in der Art, daß zum Erreichen eines Zielgleises auch schon mal eine in Rückwärtsrichtung liegende Weiche genutzt wird. Das ist ggf. halt der kürzeste Weg.
    Möglicherweise kann ich das damit umgehen, daß ich zwei richtungsabhängige Topologien erstelle. Die ersten Überlegungen hierzu liegen vor, vorab muß ich allerdings wieder die Grundfunktionalitäten zum Laufen bringen.
    - Nebenbei stellt sich dabei allerdings auch die Frage, ob ich die gesamte Funktionalität überhaupt im Arbeitsspeicher des Arduino unterbringe oder ob ich ggf. noch einen weiteren Arduino verwenden muß oder ggf. auch das Fram zur Speicherung größerer Laufzeitvariablen und Strukturen mit einbeziehe. Von der Laufzeit her sollte das kein Problem sein, eher vom direkten Zugriff auf die Datenfelder. Aber sicherlich machbar. Die Definition der Gleistopologie benötigt halt schon etwas Platz, auch bei meiner kleinen Testanlage und trotz spezieller Verfahren zur Kompression der Topologiematrizen.
    - Anzeige der Fahrzeug-IDs über Railcom und OLED-Display (als allerletztes in weiter Ferne)


Hier ein Video zur Demonstration der Rückmeldungen

https://youtu.be/CH62CX3IRik

Die Frage, die sich nebenbei stellt ist, ob dieser ganze "Quatsch" überhaupt Sinn ergibt, gibt es doch fertige Modellbahnsteuerungen, die das alles bereits drin haben und noch einiges mehr. Ein bißchen Interesse an der Materie und der Aha-Effekt wenn es denn funktioniert spielt bei mir halt auch eine wichtige Rolle. Eigentlich die wichtigste überhaupt, das berühmte Erfolgserlebnis. Und da ich fast lieber baue als zu fahren, paßt das auch.

Mit meiner kurzen Beschreibung wollte ich hier jetzt keine (1:1)-Bauanleitung liefern, Details kann man aber dennoch erfragen. Ich wollte nur zeigen, welche komplexe Funktionen mit relativ kleinem Geld und hardwaremäßig einfach zu realisieren sind. Auch für Anlagen, die größer als meine Testanlage sind und wo die analoge Realisierung mit Diodenmatrix und ggf. Relaistechnik doch erheblich mehr Verdrahtungsaufwand bedeuten. Von Weichen- und Belegtmelder-Rückmeldungen mal ganz zu schweigen, die bekomme ich als Abfallprodukt so nebenbei gratis mit dazu. Der wesentliche Aufwand steckt in der Entwicklung der Software. Zumindest für mich.

Wer Interesse hat kann mich gerne fragen. Aber bitte beachten, ich bin kein Informatiker und auch kein Computerfreak. Vieles was ich mache basiert auf dem Try- und Error-Prinzip. Einige Kenntnisse der Programmiersprache c (nicht C++) sind vorhanden. Für das was ich mache reichen die aus.

Wer Fragen oder noch weitere Ideen hat, nur zu. Aktuell kämpfe ich beispielsweise mit dem Problem bei der Weichenauswahl (Eingabe der umzusteuernden Weichen am Stellpult) die zugehörigen Weichenabgänge vor Quittierung blinken zu lassen, ohne durch hierzu oft verwendete "delays" den gesamten Programmablauf innerhalb der Schleife zu behindern. Ein programmtechnisches Problem für das ich sicherlich auch eine Lösung finden werde. Etwa durch zyklisches Schreiben und Löschen der Ausgabepuffer der I2C-Bausteine, wobei die betreffenden Bits der Weichen-LED in der Schleife gesetzt und anschließend wieder gelöscht werden. Verzögerung möglicherweise durch Abfragen der aktuellen Programmlaufzeit.

Grüße Thomas


Die Sucht nach Bahn/Modellbahn hat mich nie losgelassen, ich habe sie aber auch nie richtig ausgelebt. Nun erfülle ich mir all die Wünsche der letzten Jahrzehnte.


semisweet und JörgBehrens haben sich bedankt!
Draisine  
Draisine
InterRegio (IR)
Beiträge: 180
Registriert am: 16.01.2019
Ort: Südhessen
Gleise Roco Line + geoLine + Piko + LGB, Fahrzeuge: alles mögliche
Spurweite H0, G
Steuerung Digikeijs DR5000 + Upgrade YD9401, MD-Zentrale, Bausteine Digikeijs + YAMORC, ESU
Stromart DC, Digital

zuletzt bearbeitet 18.04.2024 | Top

RE: Einfaches Drucktastenstellwerk auf Arduino-Basis mit Loconet-Schnittstelle - Entwicklungsstadium

#2 von madas , 18.04.2024 08:41

Schau Dir mal diese Decoder von Möllehem an. Damit lässt sich auf Loconet Basis ganz gut ein Stellpult bauen. :)
Fahrstraßenstellung über 2 Taster inklusive.

http://www.mollehem.se/index.php/en/cont...ldecoder-detail


JörgBehrens und Draisine haben sich bedankt!
madas  
madas
S-Bahn (S)
Beiträge: 18
Registriert am: 27.10.2022


RE: Einfaches Drucktastenstellwerk auf Arduino-Basis mit Loconet-Schnittstelle - Entwicklungsstadium

#3 von Draisine , 18.04.2024 09:12

Ja, wahrscheinlich geht das auch. Sollte, da kommerziell. Preislich mit ca. 31 Euro (360 schwedische kr) interessant, wenn man was schlüsselfertiges sucht. Die Parametrierung der Grundeinstellungen ist halt deutlich professioneller als bei mir. Bei mir wird das ganze in der Setup-Routine bzw. auch im Programmkopf "hart verdrahtet", da ich mir eine externe Parametrierfunktionalität erspart habe. Könnte ich aber auch noch ergänzen, etwa durch einen Parametriermodus und drücken der entsprechenden Tasten und anschließendem Zuordnen zu den Strukturen/Feldern und Abspeichern der Werte im Fram. Ist mir momentan aber zuviel Aufwand und sprengt vermutlich auch die Fähigkeiten meines Uno.
Ich hatte vor ca. 6 Jahren damit begonnen, als ich mich erstmalig mit dem Arduino und Loconet beschäftigt habe. Damals hatte ich nur I/O-Bausteine zum Selbstbau auf Loconet-Basis gefunden. Und natürlich die kommerziellen Produkte von Digitrax, Uhlenbrock und einige kleinere Anbieter. Das war mir alles zu teuer, außerdem bestand der Reiz sich mit dem Arduino und Loconet selbst zu beschäftigen. Der Weg zum Stellpult war das Ziel, nicht das Stellpult an sich. Der praktische Nutzen ergab sich später.

Mein Stellpult hat sich halt über die Jahre so entwickelt und funktioniert ja auch vom Prinzip her. Oder hat bislang funktioniert, was die Weichenauswahl anbelangt. Ich schreibe die Software halt mittlerweile komplett neu. Das wird aber wieder. Ich wollte auch nur zeigen was mit Arduino und Loconet geht. Gerade Loconet mit seiner weiten Verbreitung im Ami-Land und hießigen Modellbahn-Clubs bietet zahlreiche Möglichkeiten relativ einfach an Daten heranzukommen und sich bei Bedarf auch richtig auszutoben. Mein Stellpult ist nur ein kleines Beispiel.

Interessant ist bei den von Dir gelinkten Modulen wiederum die Begrenzung auf 64 Ein-/Ausgänge. Das sind Standardwerte von kaskadierten Encodern/Decodern, Multiplexern oder auch I2C-Modulen. Ich könnte meinen Aufbau theoretisch auf 4 x 64 Ein-/Ausgänge erweitern, wenn ich statt direkter Ansteuerung der LED über die Ausgänge der I2C-Module noch 3 x 8 oder 4 x 16 Decoder ansteuern würde. Dann halt nicht direkt, sondern über Binäradressen. Ob man das braucht? Ich momentan nicht.
Aber weiß ich das? Die Möglichkeit besteht jedenfalls.

Grüße Thomas


Die Sucht nach Bahn/Modellbahn hat mich nie losgelassen, ich habe sie aber auch nie richtig ausgelebt. Nun erfülle ich mir all die Wünsche der letzten Jahrzehnte.


semisweet und JörgBehrens haben sich bedankt!
Draisine  
Draisine
InterRegio (IR)
Beiträge: 180
Registriert am: 16.01.2019
Ort: Südhessen
Gleise Roco Line + geoLine + Piko + LGB, Fahrzeuge: alles mögliche
Spurweite H0, G
Steuerung Digikeijs DR5000 + Upgrade YD9401, MD-Zentrale, Bausteine Digikeijs + YAMORC, ESU
Stromart DC, Digital

zuletzt bearbeitet 18.04.2024 | Top

RE: Einfaches Drucktastenstellwerk auf Arduino-Basis mit Loconet-Schnittstelle - Entwicklungsstadium

#4 von semisweet , 18.04.2024 16:36

Hallo Thomas,

schönes Projekt, das Du erstellt hast (noch am Erstellen bist).
Ich werde hier Mal dran bleiben, da ich Ähnliches vorhabe.
Frage: Wenn Du auf dem Stellpult eine Weiche umlegst, wird das per Loconet "gemeldet", sodaß dann Deine Zentrale und
ggfs. Steuersotware (Rocrail z.B.) das mitbekommen?
Das ist nähmlich das, was mich interessiert.
Ich habe vor, 2 Anlagenteile vor Ort mit Drucktastenstellwerk zu bedienen (BW und Zeche) und möchte erreichen, das Rocrail weiss, was ich da an Weichen lege, da Teilbereiche BW / Zeche auch Bestandteil von Zugfahrten sind, die über Rocrail gesteuert werden sollen.


Glück auf & liebe Grüße
Klaus-Peter

Mutta, hol mich vonne Zeche, ich kann dat Schwatte nich mehr sehen ......
Anlage in Bau: Essen-Hanielsberg Zeche Zollverein Schacht XIV (14) das Ruhrgebiet um 1960


 
semisweet
InterRegioExpress (IRE)
Beiträge: 313
Registriert am: 28.06.2013
Ort: Schwelm, südliches Ruhrgebiet
Gleise Tillig Elite Code83
Spurweite H0
Steuerung IB2 Neo, ARLoCo-Rückmelder + Arduino (Servo und Signale)
Stromart Digital


RE: Einfaches Drucktastenstellwerk auf Arduino-Basis mit Loconet-Schnittstelle - Entwicklungsstadium

#5 von Draisine , 19.04.2024 08:30

Zitat von semisweet im Beitrag #4
Hallo Thomas,

schönes Projekt, das Du erstellt hast (noch am Erstellen bist).
Ich werde hier Mal dran bleiben, da ich Ähnliches vorhabe.
Frage: Wenn Du auf dem Stellpult eine Weiche umlegst, wird das per Loconet "gemeldet", sodaß dann Deine Zentrale und
ggfs. Steuersotware (Rocrail z.B.) das mitbekommen?
Das ist nähmlich das, was mich interessiert.
Ich habe vor, 2 Anlagenteile vor Ort mit Drucktastenstellwerk zu bedienen (BW und Zeche) und möchte erreichen, das Rocrail weiss, was ich da an Weichen lege, da Teilbereiche BW / Zeche auch Bestandteil von Zugfahrten sind, die über Rocrail gesteuert werden sollen.


Hallo Klaus-Peter,
ja, das wird gemeldet.

In der Schleife (loop) frage ich u. a. den aktuellen Loconet-Status ab:

// LocoNet prüfen, ob externe LocoNet-Pakete gesendet werden
LnPacket = LocoNet.receive() ;

// Wenn die Pakete Switch-Message oder Sensormeldung sind,
// dann Call-back-Routine und Meldungen auslesen
A: if (!LocoNet.processSwitchSensorMessage(LnPacket));[/big]


Desweiteren frage ich Tasteneingaben des Stellpults ab:

// nModule_in I2C-Eingabemodule mit PCF8574, 8 bit einlesen
// Nr. 1 - 8*nModule_in der gedrückten Taste des Stellpults
B: Tasten_Nr = I2C_Taster_abfragen(I2C_IN_ADDR, nModule_in);


Wird eine Taste gedrückt und entspricht die Tastennummer einer Taste für Weichen, dann Aufruf Funktion Weichenauswahl

// Betriebsmodus 1: Weichenauswahl mit weiteren Weichetasten einlesen
// sofern Modus = 0 und aktuelle Taste eine Weichentaste ist
// ---------------------------------------------------------
C: if (Modus == 0 && Tasten_Nr > 0 && Tasten_Nr <= nWeichtast)
{
nAusw = Weichenauswahl (Tasten_Nr);


In der Funktion Weichenauswahl hatte ich bislang eine while-Schleife über die Quittiertaste (solange die nicht gedrückt ist),
um weitere Weichen für meine Auswahl anzugeben. Die habe ich nun rausgenommen, da ich ansonsten keine LN-Meldungen der Schleife loop mehr mitbekomme.
Stattdessen erfolgt die Weichenauswahl nun grundsätzlich über die Abfrage nach Punkt B in der Schleife loop.

In der Funktion nach Punkt C: ordne ich nun ausschließlich die ausgewählten Weichen einer Struktur Weichen zu. Diese enthält die Adresse und Richtung der ausgewählten Weichen, sowie die Anzahl der aktuell ausgewählten Weichen.
Außerdem gibt es einen Ausgabepuffer (Feld 1 - n) für die LED-Ausgabe an den Modulen (0 - n), der je nach ausgewählter Weiche aktualisiert und zum I2C-Ausgabemodul gesendet wird. Nun auch blinkend ein/aus der gesetzten Weiche(n). Der Puffer beginnt bewußt ab Indes 1. Index 0 enthält die Adresse zur Speicherung auf dem Fram.
Zum Einsatz kommen drei I2C-Eingabemodeule und vier Ausgabemodule zu je 8 Bit.

Bit setzen: I2C_OUT_LED[StP.ixMod_out[ix_SP]+1] = LED_setzen(I2C_OUT_LED[StP.ixMod_out[ix_SP]+1],Tasten_Nr,0);
Bit löschen: bitClear (I2C_OUT_LED[StP.ixMod_out[ix_SP]+1], StP.ixPin_out[ix_SP]);

blinken über Abfrage der Laufzeit:
static uint8_t ein;
unsigned long curtime = millis(); // Aktuelle Zeit wird in currentMillis gespeichert
if (curtime - prevtime >= interv) // Falls mehr als interv in ms vergangen sind
{
if (ein) // LED ist gesetzt, dann aus
{
bitClear (I2C_OUT_LED[StP.ixMod_out[ix_SP]+1], StP.ixPin_out[ix_SP]);
ein = 0;
}
else if (!ein) // LED ist nicht gesetzt, dann aus
{
I2C_OUT_LED[StP.ixMod_out[ix_SP]+1] = LED_setzen(I2C_OUT_LED[StP.ixMod_out[ix_SP]+1],Tasten_Nr,0);
ein = 1;
}
LED_Ausgabe(I2C_OUT_ADDR[StP.ixMod_out[ix_SP]],I2C_OUT_LED[StP.ixMod_out[ix_SP]+1]);
prevtime = curtime;
}


Das funktioniert nun schon mal.

Desweiteren in der Entwicklung:
Bei der Weichenauswahl, eine oder mehrere Weichen, die neben dem aktuellen Weichenschaltzustand blinkend dargestellt werden, kann ich Eingaben zurücknehmen (rekursives UNDO) oder auch alles resetten.

Oder quittieren, dabei werden dann die LN-Schaltbefehle der im Struct Weichen gespeicherten Weichen indirekt über verschiedene selbst erstellte Funktion generiert. Letztlich werden die Schaltbefehle über Op-Codes generiert.

Funktion aus Bibliotheksfunktion Loconet.h
D: void sendOPC_SW_REQ(int address, byte dir, byte on)
{
lnMsg SendPacket ;
}


Anschließend die Abfrage der Schaltbefehle zur Aktualisierung der LED-Ausgaben und zur Speicherung des aktuellen Zustands des Stellpults im Fram.

E: // **************************************************
// This call-back function is called from LocoNet.processSwitchSensorMessage
// for all Switch Request messages
// -----------------------------------------------------------------------
void notifySwitchRequest( uint16_t Address, uint8_t Output, uint8_t Direction ) {


Mit dem sendOPC_SW_REQ werden die Weichenstellbefehle an die Zentrale gesendet. Damit wird der Zustand in der Zentrale und ggf. auch in der angeschlossenen Modellbahnsoftware aktualisiert. Die Zentrale sendet dann die Rückmeldung über notifySwitchRequest, die ich, wie bereits gesagt nutze, um meine Stellwerkanzeigen zu aktualisieren.

Das ganze funktioniert für meinen Testaufbau hervorragend. Also schalten über Zentrale oder vom Stellpult generiert immer LN-Meldungen, die bei allen LN-Bausteinen über die Zentrale zur Verfügung stehen. Ob es bei größeren Aufbauten evtl. zu Timing-Problemen auf den LN-Bus kommen kann, kann ich nicht sagen. Das ist dann aber grundsätzlich so und hängt nicht unmittelbar mit meiner Applikation zusammen.

In der gleichen Weise wie ich die Schaltermeldungen abfrage, erfolgt dies auch bei den Sensoren über notifySensor. Man kann auch die Railcom-Adresse abfragen, derzeit bei mir allerdings noch nicht umgesetzt.

Das ist das schöne oder auch geniale am direktional aufgebauten LN-Bus, daß sämtliche Informationen bei allen LN-fähigen Geräten verfügbar sind.

Man könnte das ganze System auch als Stand-Alone-Lösung ohne Zentrale aufbauen, wenn man 1. eine separate Stromeinspeisung für LN vorsieht und 2. auch die Schaltdecoder in LN ausgeführt sind. Oder man eine separate Schnittstelle LN --> DCC vorsieht. Da ich eine Multibuszentrale nutze, ist das bei mir nicht nötig. Um digital fahren zu können benötige ich eh eine Zentrale. Weil nur schalten ergibt ja auch keinen Sinn. Höchstens bei Analogbetrieb.

Wenn ich das Teil fertig habe und es fehlerfrei läuft, wann das sein wird kann ich derzeit noch nicht sagen, gibt es genauere Informationen zur Hardware und zum Sketch.
Eigentlich ist nur noch die Routine zur Weichenauswahl zu schreiben. Jemand der in c oder c++ fit ist, schafft das möglicherweise in zwei Stunden. Ich eher in zwei Wochen. Danach ist Programmaufräumen und optimieren dran. Und testen und Bugs beseitigen. Dann sollte das aber schon mal praxistauglich laufen. Anschließend
kommen die Fahrstraßen dran. Zwischendurch nochmal ein paar Fliesen verlegt und die Decke in meinem Modelbahnraum abgehängt und ein Trockenestrich verlegt.
Vielleicht implemetiere ich aber auch noch die Drehscheibe. Das sollte allerdings kein Problem sein, läuft wie beim Schalten von einzelnen Weichen. Wahrscheinlich sehe ich dafür eine eigenen Microcontroller mit separater LN-Schnittstelle vor. Vielleicht beschäftige ich mich auch mal mit den ganz kleinen Controllern vom Typ attyni. Mal sehen wie die funktionieren und für was man die noch gebrauchen kann. Vielleicht für die Torsteuerung und das Licht meiner Lokschuppen. Vielleicht geht da auch was mit Sound.

Falls Du noch fragen hast, dann einfach melden. Meine Antwort kann allerdings etwas dauern, da ich neben Stellwerk und Forum und anderen Dingen bis ca. Ende des Jahres am Hausumbauen bin. Zwischendrin gibt es aber immer wieder ein wenig Zeit für wesentlichere Dinge.

Eine Sache noch:
bislang hatte ich die Taster und LED-Ausgaben in einer passenden Reihenfolge an den I2C-Modulen angeschlossen, so daß ich aus der Tasternnummer mir rückwärts die Weichenadresse, die Weichenstellung und die LED-Ausgabe ermitteln konnte. Ich habe das zwischenzeitlich dahingehend geändert, daß ich nun eine Referenztabelle führe (Strukt mit Feldern der Structelemente) bei der ich über den ausgelesenen Index (aus Tastennummer oder Adresse mit Richtung als Suchkriterium) die Zuordnung der Modulnummer der I2C-Module (ein/aus) und des jeweiligen Eingabepins (Taster) und Ausgabepins (LED) bestimme. Das ist fehlertoleranter und flexibler was den Hardware-Aufbau anbelangt, macht die Sache durch die geschachtelten Indizes allerdings wieder etwas komplizierter. Was ich auch leidvoll erfahren durfte.

Diese Referenztabelle ist global definiert und mit Werten zugewiesen. Außerdem speichere ich die im Fram ab, auch wenn das momentan nicht erforderlich ist. Wie ich das endgültig mache, etwa die Liste nur lokal verwende, weiß ich noch nicht. Das wird späteres Feintuning sein, je nachdem wie ich mit den 2 kByte RAM des Arduino klar komme. Die Fahrstraßen werden noch einiges an Ressourcen fressen. Beim Mega mit seinen 8 kByte RAM hätte man die Probleme wohl nicht. Gut, ich hatte mich aus preislichen Gründen und weil ich hiervon mehrere bereits hatte für den Uno entschieden. Raspberry wäre von der Leistungsfähigkeit und Datenspeichern her unschlagbar, hier weiß ich nur nicht, ob es passende Bibliotheken für LN gibt. Ich hatte bislang halt nur nach Arduino geschaut und dabei bleibe ich nun auch.

Grüße Thomas


Die Sucht nach Bahn/Modellbahn hat mich nie losgelassen, ich habe sie aber auch nie richtig ausgelebt. Nun erfülle ich mir all die Wünsche der letzten Jahrzehnte.


fbstr hat sich bedankt!
Draisine  
Draisine
InterRegio (IR)
Beiträge: 180
Registriert am: 16.01.2019
Ort: Südhessen
Gleise Roco Line + geoLine + Piko + LGB, Fahrzeuge: alles mögliche
Spurweite H0, G
Steuerung Digikeijs DR5000 + Upgrade YD9401, MD-Zentrale, Bausteine Digikeijs + YAMORC, ESU
Stromart DC, Digital

zuletzt bearbeitet 19.04.2024 | Top

Drucktastenstellwerk funktioniert

#6 von Draisine , 22.04.2024 16:20

Nachdem die Übertragung der extern erzeugten Belegtmelder und Weichenstellungen zur Anzeige auf dem Stellpult schon beim letzten mal funktioniert hat, habe ich nun die Routinen zur Weichenauswahl per Stellpult programmiert. Ging einfacher als ich anfänglich dachte. Nachstehend ein kleines Video mit Auswahl der Weichenstellungen.
Im ersten Schritt mit UNDO-Funktion, im zweiten Schritt mit Reset der Gesamteingabe und im dritten Schritt mit Quittierung, d. h. absenden der Weichenstellbefehle und Aktualisierung der Anzeige auf dem Stellpult.

Demnächst werde ich die Hardware etwas näher erläutern. Für die gezeigten Funktionen und die Größe des Testaufbaus ist der UNO vollkommen ausreichend. Mit etwas Optimierung des Programmcodes läßt sich vielleicht der Bedarf an Hauptspeicher sogar noch etwas verringern.

Bei Gelegenheit werde ich die Fahrstraßen angehen.

https://youtu.be/f8iZ8llcTLI

Grüße Thomas


Die Sucht nach Bahn/Modellbahn hat mich nie losgelassen, ich habe sie aber auch nie richtig ausgelebt. Nun erfülle ich mir all die Wünsche der letzten Jahrzehnte.


Draisine  
Draisine
InterRegio (IR)
Beiträge: 180
Registriert am: 16.01.2019
Ort: Südhessen
Gleise Roco Line + geoLine + Piko + LGB, Fahrzeuge: alles mögliche
Spurweite H0, G
Steuerung Digikeijs DR5000 + Upgrade YD9401, MD-Zentrale, Bausteine Digikeijs + YAMORC, ESU
Stromart DC, Digital

zuletzt bearbeitet 22.04.2024 | Top

Loconet Bereitschaftsstaus abfragen

#7 von Draisine , 23.04.2024 08:43

Eine Frage an die Fachleute, die sich mit Loconet, speziell den Funktionalitäten der Bibliothek Loconet.h auskennen.

Gibt es eine Funktion, vergleichbar dem Wire.available beim I2C-Bus, mit dem der Bereitschaftsstatus von Loconet geprüft werden kann?

Mir geht es darum, daß ich während der Programmlaufzeit den Bereitschaftsstatus von Loconet zyklisch abfragen und auf dem Stellpult anzeigen möchte (rote LED falls nicht verfügbar), um zu prüfen, ob überhaupt eine Loconet-Verbindung besteht. Die Abfrage nach Daten LocoNet.receive() liefert mir nur dann Informationen, wenn auch gerade Nachrichten gesendet werden. In der Bibliothek habe ich leider nichts passendes gefunden. Was u. U. aber auch an meinem beschränkten Verständnis zum dort verwendeten C++ liegen kann.

Grüße Thomas


Die Sucht nach Bahn/Modellbahn hat mich nie losgelassen, ich habe sie aber auch nie richtig ausgelebt. Nun erfülle ich mir all die Wünsche der letzten Jahrzehnte.


Draisine  
Draisine
InterRegio (IR)
Beiträge: 180
Registriert am: 16.01.2019
Ort: Südhessen
Gleise Roco Line + geoLine + Piko + LGB, Fahrzeuge: alles mögliche
Spurweite H0, G
Steuerung Digikeijs DR5000 + Upgrade YD9401, MD-Zentrale, Bausteine Digikeijs + YAMORC, ESU
Stromart DC, Digital

zuletzt bearbeitet 23.04.2024 | Top

   

alte Lok Dekoder
ESU 50708 und 50700 Innenbeleuchtung

  • Ähnliche Themen
    Antworten
    Zugriffe
    Letzter Beitrag
Xobor Einfach ein eigenes Forum erstellen
Datenschutz