Hallo in die Runde!
Während Ihr hier eine Zentrale nach der anderen bastelt :-) habe ich versucht meine NANO-Variante samt Software zu verbessern. Aber soweit entfernt sind meine Gedanken auf jeden Fall nicht. Das Projekt hat ja eine Eigendynamik entwickelt ... Wahnsinn!!! Aber nun der Reihe nach.
Angespornt durch die vielen Mitbastler hatte ich meine etwas ins Stocken geratene Basteltätigkeit wieder aufgenommen :-) Begeistert vom RC-Auslesen meiner MEGA-Variante wuchs bei mir der Wunsch das bei meiner NANO-Variante auch umzusetzen. Ziel war insbesondere mit der mobilen Variante auf dem Basteltisch bevorzugt CVs schreiben und lesen zu können. Nebenher sollten einfache Funktionstests von Licht und Sound möglich sein. Ebenso sollte das LocoNet für das Dispatchen der Freds und Tests genutzt werden können.
Platz für die RC-Platine war noch ggf. zu Lasten einer großen Powerbank. Programmspeicher reicht. RAM ist ggf. etwas knapp, reicht aber. Ein schwieriges Problen stellte jedoch der Mangel an seriellen Schnittstellen dar. SoftSerial scheidet aus da Timer und Interupt mit dem LocoNet kollidieren. Als einzige Möglichkeit sah ich eine Mehrfachnutzung der einzigen HardwareSerial des NANO - umschaltbar für Wifi und RC über zwei Ausgabepins. Erste Versuche an der MEGA-Version waren viel versprechend. Gemeinsame Kommunikationsgeschwindigkeit muss dazu auf 250.000 BPS festgelegt werden. Der WLAN-Sketch wurde entsprechend erweitert, so dass auch diese Übertragungsrate erkannt wird. Der Logikbaustein wurde als 4x NAND + 2 Dioden zu einer Umschaltlogik erweitert. Wifi-Pakete nach der CV-Abfrage werden solange ignoriert bis die Antwort der Lok ausgelesen ist. Mit der Roco-App und RocRail funktioniert das problemlos.
Kurze Erklärung und Hinweis zum Verständnis 2018-10-27:
Der NANO hat nur einen einzigen HardwareSerial. Daher läuft RailCom und Wifi mit 250000 Baud (RailCom typisch) über einen Rx-Eingang des NANO! Bitte nur meinen ESP_V27 verwenden nur dieser kann 250000 Baud!
Es funktionierte anfänglich zwar im Prinzip, jedoch nicht sicher. Jede Menge falsche Werte zwischen den Richtigen. Verschiedene Softwareanpassungen wurden getestet. Unter Anderem sollten die Häufigkeit richtige von zufälligen falschen Werten unterscheiden können. An sich kein schlechter Gedanke jedoch anfangs wieder mit mäßigem Erfolg. Nach einer verordneten Motivations- und Sommerpause wurde dann, nicht zuletzt durch diesen Treat angespornt, die Arbeit wieder aufgenommen, der zu hohe Pull-Up-Widerstand (100k) auf der RC-Platine als mögliche Fehlerursache erkannt und gegen einen 10k ersetzt. Erfolg nach anfänglicher Euphorie jedoch immer noch bescheiden. Erst die Idee es mit der oben beschiebenen Softwareanpassung zu verknüpfen brachte den entscheidenden Erfolg. Noch ein paar keinere Softwareanpassungen und das RC-CV-Auslesen geht recht zügig und sicher. Zum Testen und Debuggen (eine serielle Debug-Schnittstelle ist nun beim besten Willen nicht mehr da :-) wurde ein kleines Display ergänzt. Dieses sollte nun auch noch reaktiviert werden und zur Anzeige der gerade erfolgten CV-Lese/Schreiboperation und ggf. mehr dienen (siehe Bild). Weitere Ideen, die Adresse über RailCom gleich auszulesen oder die einem FRED zugewiesene Adresse anzuzeigen, könnten folgen, werden aber erstmal von nachfolgender Software-/Speicherproblematik ausgebremst
Bei all den Versuchen war anfangs testweise das LocoNet deaktiviert worden. Der Versuch es wieder mit zu implementieren zeigte die ausgereizten Speichergrenzen (RAM). Es ging entweder LocoNet oder RailCom mit Display. Zwei NANOs zum umstecken schien als Lösung möglich jedoch sehr unkomfortabel. Gedanken ein anderes Bord zu nehmen wurden verworfen, da entweder immer noch zu groß und nicht pinkompatibel (Arduino Mega 2560 PRO MINI ) oder wegen eines inkompatiblen Prozessortyps (Arduino Micro mit ATmega 32U4) auch nicht wirklich eine schnelle Lösung. Blieben also nur Versuche die RAM-Nutzung zu verringern. Display-Texte und Die RailCom-Decodieung wurden als große Speicherfresser in das PROGMEM verlagert - Plötzlich wieder über 300 Byte frei ...
Jetzt geht zwar LocoNet, RailCom und Display. LocoNet und RailCom scheinen sich jedoch etwas zu behindern. Bei aktivem LocoNet geht RailCom, jedoch sehr langsam (also viele Fehlversuche). Möglicherweise ein Timerproblem oder gar noch eine Specherverletzung? Oder doch zu wenig RAM? Als Abhilfe kann über die Pseudo-Lok 9999 und die Funktion F9 das LocoNet online über die Z21-App abgeschaltet werden. Somit sind ersteinmal alle Anforderungen erfüllt an die kleine Testkiste erfüllt :-)
2018-10-14: Ist nicht mehr erforderlich. Wifi-Lesefunktion wird bei RC-Aktivität abgeschaltet.
Kleiner Exkurs noch zum Thema CV-Auslesen. Da ich wie andere auch Probleme mit dem CV-Lesen hatte habe ich einerseits eine kleine Verzögerung zur Verbesserung des Timings im DCCPacketScheduler eingebaut und andererseits die Referenzspannung (ARef) auf 1,1 V gesetzt. Der Mega unterstützt das von Haus (INTERNAL1V1) aus. Der Nano benötigt einen 62k-Widerstand zwischen 3,3V und dem Eingang AREF den ich gleich als SMD auf die Lochrasterplatine von unten an die benachbarten Pins gelötet habe und die Einstellung --> analogReference(EXTERNAL);
Mit dieser kleinen Hardwareergänzung lassen sich alle Arduinos, wie von PG ursprünglich wohl mal vorgesehen, mit einer Referenzspannung von 1,1 V und somit genauer betreiben.
Diese Anpassung zieht natürlich neben der CV-Auslesung Anpassungen hinsichtlich Kurzschlussstrom, Strom, Spannungs und Temperaturmessungen nach sich. Leztere habe ich mit einem auf 30k eingestelltem Poti an 5 V und einem 15 k-NTC parallel mit einem 10 k gen GND schaltungstechnisch realisiert: 5V - 30k - (temp) - (10k||Epcos-NTC-15k) - GND
Mit der einfachen Skalierung temp = (1023-temp) *100/1000; in Z21_LAN.h ergibt sich zwischen 0-80°C ein weitgehend linearer Verlauf.
Mit dieser Anpassung habe ich Testreihen mit über 10.000 fehlerfreien CV-Lesevorgängen erreicht. Durch dieses Thema hier bin ich auf die Zusatzbeschaltung mit 10k und 100nF (C4 und R17) gekommen. Allein der 10k-Widerstand reicht das Auslesen zuverlässiger mit meiner Softwareanpassung schneller zu machen. Pro CV brauche ich jetzt ca. 2 bis 4 Sekunden - und das ist doch super.
Den 62k-Widerstand und R17(10k) habe ich weiter vorn im NANO-Schaltplan ergänzt.
Im Übrigen, bei meinen Tests zeigte sich, wenn C8/R36 mit beschaltet wird ist auf jeden Fall auch C4 erforderlich. Also entweder nur R17 oder
C4+R17+C8+R36.
2018-10-21 Hinsichtlich verlorener UDP-Nachrichten beim CV-Auslesen:
RocRail wurde angepasst und versteht nun auch "unverlangt" oder zur Unzeit erhaltene CV-Rückmeldungen. Somit kann die Z21PG auch entsprechend agieren und ein "Read all" läuft durch. Ich habe das mein Z21PG-Programm soweit ergänzt, dass - falls nicht eine erneute CV-Abfrage erfolgt - der CV-Wert ein zweites mal nach 15s und nach weiteren 15s der Folgewert an RocRail etc. gesendet wird ("#define RCREADREPEAT").
Ergänzung 2018-10-27:
Ohne OLEDDISPLAY bitte folgende Zeile "#define OLEDDISPLAY" unbedingt auskommentieren, an der richtigen Stelle! - ggf. mehrfach ...
Es geht sonst NICHTS OHNE Display! OLEDDISPLAY verzögert übrigens das CV-Lesen (ca. 1,5 fach) und ggf. auch andere Funktionen.
Ich versuche immer mal den aktualisierten Code als zip hochzuladen. Die Änderungen können leicht im Vergleich, z. B. mit WinMerge, mit der PG-Version 4.80 vom 6.3.2018 nachvollzogen werden.
Vielleicht habe ich ja das Interesse geweckt die Softwareanpassungen mal auszutesten.
Viele Grüße
Uwe
Änderungen:
2018-10-12 Schaltplan NANO mit Anschlüssen OLED-Display, RC-Erweiterung ergäntzt
2018-10-14 Fehlerbereinigte Software hochgeladen, jetzt mit besser funktionierendem Display, Dispatch-Meldung, LN-Reglererkennung
Lokadresse wird jetzt sekündlich aus den RC-Daten ausgelesen und angezeigt (Das war der Plan von Anfang an :-))
2018-10-21 Zwei RC-Loks mit gleichen (ZIMO-)Decodern bringen über den Broadcast (Block A) abwechselnd die Adresse zur Anzeige. Ein Zimo und ein ESU-Decoder lassen (wie erwartet) das auslesen kollabieren. Es wird sogar eine Datagramm-Antwort (Block B) interpretiert. Hier muss ich wohl bei Gelegenheit die Interpretation untersuchen.
2018-10-30 überarbeiteter Softwarestand (Zimo und ESU-Decoder zeigen jetzt auch mehr oder weniger abwechselnd ihre Adresse), getestet auch auf MEGA, - kein kollabieren des RC
2018-12-16 überarbeiteter Softwarestand (LCD-Display, automatische Erkennung Display-Adresse)
2018-12-22 überarbeiteter Softwarestand (kombiniertes MEGA-ESP-Board, #define MEGAESP)
2019-02-02 überarbeiteter Softwarestand (Belegtmelder DR5088 mit RC Ch 1+2, allerhand Optimierungen, sauberes DCC-Signal)
2019-03-04 überarbeiteter Softwarestand (insbes. für NANO, Timing entspricht nun der MEGA-Version, verbessertes CV-Auslesen)
2019-03-09 überarbeiteter Softwarestand (LCD-Display erkennt auch I2C Adresse 0x3f, verbessertes CV-Auslesen- Optimierung oprimiert :-))
2019-09-27 KEINE verwendeten Änderungen !!! lediglich Lib SSD1306Ascii-master entsprechend Arbeitstand RC-Detector, Loconet RX über Transistor möglich (LN_SW_UART_RX_INVERTED in ln_config.h setzen)
2019-10-29 Funktion OPC_IMM_PACKET ergänzt, Ermöglicht das direkte Senden von DCC Paketen über das LocoNet, siehe auch
https://wiki.rocrail.net/doku.php?id=loconet:ln-pe-en
https://wiki.rocrail.net/doku.php?id=loconet:lnpe-parms-en
2020-05-04 Funktionen zum Lesen von LNSV (z. B. bei FREDis) über LNCV mittels neuer Roco-Z21-APP, boards.local.txt für mehr Flash (Nano m. ISP)
2022-04-24 RailCom angepasst, geeignet jetzt auch für ZIMO-MS-Decoder Version > 4.97, langsam aber sicher
Meine Z21PG-Bastelprojekte allgemein
Meine Z21-NANOESP Schaltung
Mein Spark-RC-Kanal-2-Detektor-Versuch inkl. Software
Mein 8-fach RC-Kanal-2-Detektor-Projekt inkl. Software
Dazu die Platine von Andreas
Software vom 2018-10-10 fehlerhaft, gelöscht! (12 Downloads)
Software vom 2018-10-14 gelöscht! (20 Downloads)
Software vom 2018-10-30 gelöscht! (10 Downloads)
Software vom 2018-12-16 gelöscht! (14 Downloads)
Software vom 2018-12-22 nur noch informativ
Software vom 2019-02-02 nur noch informativ, überarbeitet und in Kürze gelöscht!
Software vom 2019-03-04 durch Version vom 2019-03-09 ersetzt, gelöscht! (4 Downloads)
Software vom 2019-03-09 durch praktisch unveränderte Version vom 2019-09-27 ersetzt, gelöscht! (30 Downloads)
Software vom 2019-09-27 durch geringfügig veränderte Version vom 2019-10-29 ersetzt, gelöscht! (9 Downloads)
Software vom 2019-10-29 durch unveränderte Version vom 2020-02-01 ersetzt (Lib SoftWire.h fehlte), gelöscht! (26 Downloads)
Software vom 2020-02-01 durch erweiterte Version vom 2020-05-04 ersetzt (LNCV2SV.h, boards.local.txt), gelöscht! (18 Downloads)
Software vom 2020-05-04 durch angepasste Version vom 2022-04-24 ersetzt (Z21_RailCom.h) (Upload am 2022-05-13)
PS: Software für NANO und MEGA geeignet! Erkennung automatisch.