Alternative Ansteuerung für KS-Signal ("led_signal_007") ?

Link zum Projekt: http://www.digital-bahn.de/bau_led/led.htm
Antworten
Christoph Stadter
Beiträge: 7
Registriert: Di 3. Mär 2015, 19:44
Alternative Ansteuerung für KS-Signal ("led_signal_007") ?

Beitrag von Christoph Stadter » Sa 7. Mär 2015, 23:41

Hallo in die Runde,

eine kurze Vorstellung: Ich habe mich wegen der u.g. Frage neu hier angemeldet, bin im FREMO aktiv und habe diverse LED-Decoder schon erfolgreich in Wattenscheider-Signalschächten untergebracht, weil sie dort so wunderbar hineinpassen.

Umprogrammiert habe ich die Decoder-PICs noch nie, aber ich kenne jemanden, der damit Erfahrung hat und mir helfen würde. Zunächst möchte ich hier aber klären, ob es für mein aktuelles Problem hier überhaupt Chancen zu einer erfolgreichen Umprogrammierung gäbe.

Mein Problem konkret:
Eine Reihe Ks-Signale möchte ich (vorbildwidrig) mit einem DrS2-Stelltisch von Erbert in der Loconet-Version ansteuern. Über diesen Tisch will ich hier nicht allzu viele Worte verlieren, sondern nur die für mein Problem entscheidenden Faktoren aufzählen:

- Die Ansteuerungssoftware ist relativ starr, d.h. ich kann sie in ihrer Logik nicht beeinflussen.
- Einem Hauptsignal wird eine Magnetartikeladresse zugeordnet, wobei dann rot automatisch "Halt" und grün automatisch "Fahrt" ist.
- Einem Ersatzsignal wird eine andere Adresse zugeordnet, wobei dann "rot" automatisch "Ersatzsignal aus" und "grün" automatisch "Ersatzsignal ein" ist.
- Einem Rangiersignal wird eine andere Adresse zugeordnet, wobei dann "rot" automatisch "Rangiersignal aus" und "grün" automatisch "Rangiersignal ein" ist.
- Der Haltfall der drei Begriffe (Haupt-, Ersatz-, Rangiersignal) wird mit derselben Tastenkombination ("Haltgruppentaste") erzeugt, wobei das System leider nicht alle drei Adressen auf "rot" setzt, sondern nur jene, die vorher auf "grün" standen.

Hier zeigt sich bereits der Widerspruch zur Software des LED-Decoders. Dieser kennt in der Variante "led_signal_007" nur einen zentralen Haltbefehl, beispielsweise "Adr. 1 rot". Einen separaten Befehl "Ersatzsignal aus" oder "Rangiersignal aus" gibt es nicht, hier müsste derselbe Befehl "1 rot" erfolgen - tut es der Erbert-Logik zufolge aber nicht.

Grundsätzlich finde ich die Funktionsweise des LED-Decoders toll, denn gerade bei Ks-Mehrabschnittssignalen macht sie einem das Leben extrem einfach. Eine modulare Ansteuerung jedes einzelnen Signallämpchens mit einer eigenen Digitaladresse, wie sie Erbert offenbar unterstellt, fände ich um ein Vielfaches komplexer. Der Ansatz "1 Adressbefehl = 1 kompletter Signalbegriff" soll bei mir also bestehen bleiben.

ABER: Gäbe es eine durch Umprogrammierung einfach zu erstellende Lösung, um dem zentralen Haltbegriff "Hp0" (standardmäßig ADR 1) mehrere Magnetartikeladressen zuzuordnen, also z.B. 1 rot, 2 rot und 3 rot?
Dann hätte ich voraussichtlich mein Problem gelöst: Egal ob die Erbert-Logik sagt "Hauptsignal Halt", "Rangiersignal aus" oder "Ersatzsignal aus", der LED-Decoder würde immer dasselbe tun und nur noch die rote Lampe leuchten lassen, was in allen drei Fällen korrekt wäre. Die restlichen Funktionen des LED-Decoders würde ich so belassen und könnte sie weiterhin in ihrer vollen Bequemlichkeit nutzen.

Also, würde ich diese Änderung durch PIC-Programmierung umsetzen können?
Vielen Dank für jegliche Antworten und Lösungsvorschläge!

... fragt der auf diesem Feld noch unerfahrene
Christoph

PhiMas
Beiträge: 23
Registriert: Sa 16. Apr 2011, 13:55
Re: Alternative Ansteuerung für KS-Signal ("led_signal_007")

Beitrag von PhiMas » Mi 11. Mär 2015, 04:12

Hi Christoph,

ich würde sagen, das ist möglich. Man kann auf 8 Adressen pro Signal erweitern und man braucht die in der Software angebotenen ja nie wirklich alle gleichzeitig.

Trotzdem fände ich es unelegant, den Decoder für das Stellwerk büßen zu lassen. Darum hier mal folgender Gegenvorschlag:

Wir lassen das Signal wie es ist und verlegen den Adressraum der Signale in den Bereich über 2000. Man kann im Twincenter Fahrstraßen definieren, die mit Weichenbefehlen >2000 ausgelöst werden. Dort könntest du jeweils den einzigen Haltbefehl ablegen.

Eine zweite Möglichkeit ist, dies einen Arduino am loconet machen zu lassen. Da wäre dann auch die Adresse komplett beliebig. Logik auf loconet mit Arduino zu lösen ist was tolles.

Viele Grüße, Philipp

Christoph Stadter
Beiträge: 7
Registriert: Di 3. Mär 2015, 19:44
Re: Alternative Ansteuerung für KS-Signal ("led_signal_007")

Beitrag von Christoph Stadter » Mi 11. Mär 2015, 23:22

Hallo Philipp,

danke für die Antwort!

Ich halte auch die Decoderlogik in diesem Fall für intelligenter als die Stellpultlogik, aber zunächst sind ja beider gleichermaßen "schuld" an der Misere: Sie passen halt einfach nicht zusammen.

Meine Ks- Signale können Zs3, Zs7 und Sh1. Zs1 und Ke (ADR 4 und 7) brauche ich eigentlich nicht, ADR 8 wäre dann auch noch frei. Diese könnte ich also auf dieselbe Funktion wie ADR 1 setzen?
Die Vorsignaladressen müsste ich dann natürlich auch parallel anpassen, da alle Hauptsignale ja auf dieselbe Weise schalten sollen.

Nachteil: Die Signale könnten technisch natürlich Zs1 und Ke auch anzeigen (die beiden weißen Lampen sind an Bord), wenn ich diese also irgendwann mal an anderer Stelle einsetzen will, wären diese Funktionen weg. Wobei Zs7 ja meistens reicht...

Die Idee mit der Fahrstraßennutzung im TwinCenter stößt mich etwas ab. Per se funktioniert das Erbert-Pult ja auch ohne Digitalzentrale, doch zur Umsetzung der Loconet-Befehle auf DCC-Signal (welches die LED-Decoder ja benötigen) hängt das TwinCenter immer dran. Ein Nachteil wäre allerdings, dass ich dann z.B. im Falle eines Ausfalls nicht einfach eine andere Digitalzentrale verwenden könnte, sondern immer die vorprogrammierte nehmen muss. Daher wäre mir eine fest im Stellpult bzw. im Decoder integrierte und damit autarke Lösung schon noch lieber.

Das wäre dann also die Arduino-Version. Und du würdest mir einen passenden Sketch schreiben? ;-)
In Arduino will ich mich auch einarbeiten, aber die Loconet-Einbindung war bislang nicht das Niveau, das ich anstrebte...

Beste Grüße
Christoph

PhiMas
Beiträge: 23
Registriert: Sa 16. Apr 2011, 13:55
Re: Alternative Ansteuerung für KS-Signal ("led_signal_007")

Beitrag von PhiMas » Mi 11. Mär 2015, 23:41

Hi Christoph,

diese noch relativ simple Problemstellung ist der perfekte Einstieg in Loconet auf Arduino.

Das Thema hat dann mit dem Led-Dekoder nichts mehr zu tun. Ich überlasse Sven die Entscheidung, ob ich das weiter hier im Forum behandeln soll. Vielleicht interessiert es ja noch andere.

Gruß, Philipp

PS: Danke für die Erweiterung der 2x Vorsignal Variante. Die brauche ich gerade zufällig.

Christoph Stadter
Beiträge: 7
Registriert: Di 3. Mär 2015, 19:44
Re: Alternative Ansteuerung für KS-Signal ("led_signal_007")

Beitrag von Christoph Stadter » So 22. Mär 2015, 11:34

Hallo Philipp,

dann nochmal ein (verspäteter) Dank für deinen Rat!
Das klingt natürlich verlockend, wenn auch für dieses Forum wenig sinnstiftend: Ich lasse die Decodersoftware unangetastet und lerne mich hier gar nicht erst ein, stattdessen lerne ich ein wenig Fingerfertigkeit mit Arduino - damit wollte ich mich nämlich sowieso beschäftigen...

Den Rest dann per E-Mail!

Beste Grüße
Christoph Stadter

PhiMas
Beiträge: 23
Registriert: Sa 16. Apr 2011, 13:55
Re: Alternative Ansteuerung für KS-Signal ("led_signal_007")

Beitrag von PhiMas » Mi 25. Mär 2015, 00:53

Hi,

ich bin ja gerade nicht Zuhause, aber eine generelle Anleitung, wie man seine Decoder-Hex selbst macht, könnte ich auch mal hochladen. Muss ich aber erst mplab nochmal installieren und etwas testen. Es ist aber wirklich erschreckend einfach Dank der tabellenartigen Einträge in den Quelldateien. Mir fehlt nur oft die ruhe, es konzentriert hinzuschreiben.

Gruß, Philipp

PhiMas
Beiträge: 23
Registriert: Sa 16. Apr 2011, 13:55
Re: Alternative Ansteuerung für KS-Signal ("led_signal_007")

Beitrag von PhiMas » So 10. Mai 2015, 09:24

Moin

also, wie programmiert man Loconet auf Arduino? Das Beispiel bezieht sich auf einen Uno oder Nano mit Alex Shepherds MRRWA-Library, die einen Software-UART für Loconet benutzt:

http://www.mrrwa.org

Hier ein Beispielsketch mit viel Kommentar

Code: Alles auswählen

#include "LocoNet.h"   //Libraray einbinden

void setup()
{
  LocoNet.init(7);   //Loconet wird inititalisiert mit Pin 7 als Sendepin (Tx), Empfangspin ist immer Pin 8
}

void loop()
{  
  ReceiveLoconet();  //In jedem Loop nach neuen LN-Messages checken, die empfangen wurden
}

void ReceiveLoconet()
{
  uint8_t State;   //Variable für Weichenzustand, 0=abzweig/rot, 1=gerade/grün
  LnPacket = LocoNet.receive() ;
  if( LnPacket ) //wenn LN-Kommando empfangen wurde
  {
    if (LnPacket->srq.command == OPC_SW_REQ)   //wenn es ein Weichenkommando ist
    {
      uint16_t decAddress = (LnPacket->srq.sw1 | ( ( LnPacket->srq.sw2 & 0x0F ) << 7 )) ;   //Adresse in decAddress schreiben
      decAddress++; //Adresse um 1 erhöhen, weil im Code die erste Adresse 0 ist und nicht 1. Nur zur Erleichterung der Programmierung
      State = ((LnPacket->srq.sw2 & 0x20) >> 5) ; //Weichenzustand auslesen und in State schreiben
      if ((LnPacket->srq.sw2 & 0xD0) == 0x10) //nur Befehle mit ON beachten, OFF-Befehle werden für Signaldecoder nicht benötigt und hier ignoriert
      {
        ReceiveWeiche(decAddress, State); //Weichenadresse und Zustand als Parameter weitergeben
      }
    }
  }
}

LN_STATUS setWeiche(uint16_t decAddress, uint8_t State, uint8_t Output = 1)  //Diese Funktion sendet einen Weichenbefehl mit decAddress, ON-Bit ist optional.
{
  lnMsg SendPacket ;
  
  decAddress--;  //Adresse wieder um 1 runterzählen, vgl. Empfangsroutine
  
  SendPacket.data[0] = OPC_SW_REQ ;
  SendPacket.data[1] = decAddress & 0x7F ;
  SendPacket.data[2] = ((decAddress >> 7) & 0x0F) ;
  
  if( Output )
    SendPacket.data[2] |= OPC_SW_REQ_OUT ;
  
  if( State )
    SendPacket.data[2] |= OPC_SW_REQ_DIR ;

  if (decAddress < 2048)
  {
    return LocoNet.send( &SendPacket ) ;
  }
}

void ReceiveWeiche(uint16_t decAddress, uint8_t State)
{
  // Irgendwas tun, Beispiel
  switch(decAddress)
  case 14: Beispielprozedur1(); //Tu was bei Weiche 14
  break;
  case 26: if (State==0) {Beispielprozedur2();} //Tu was, wenn Weiche 26 auf Abzweig gestellt wird
  break;
}
Dies schon mal als Rahmenwerk, um Weichenbefehle zu empfangen und zu senden. Dazwischen kann man jetzt jede Logik realisieren, die man braucht. Einen Beispielcode dafür gibt es nach der nächsten Maus.

Viele Grüße,
Philipp
Zuletzt geändert von PhiMas am Fr 15. Mai 2015, 15:00, insgesamt 1-mal geändert.

Christoph Stadter
Beiträge: 7
Registriert: Di 3. Mär 2015, 19:44
Re: Alternative Ansteuerung für KS-Signal ("led_signal_007")

Beitrag von Christoph Stadter » Do 14. Mai 2015, 23:18

Hallo Philipp,

im Detail verstehe ich zwar noch nicht alles, aber der Rahmen dessen, was du dort notiert hast, wird mir klar. Danke auf jeden Fall für die Unterstützung!
Da klebe ich also mit der Nase am Bildschirm und warte auf die Maus ;-) .

Immerhin liegen die Arduinos jetzt auch vor, d.h. ich könnte mich theoretisch ransetzen - aber mit Module lackieren, Gleisbau und Treffenvorbereitung bin ich auch gerade gut ausgelastet...

Ciao
Christoph

PhiMas
Beiträge: 23
Registriert: Sa 16. Apr 2011, 13:55
Re: Alternative Ansteuerung für KS-Signal ("led_signal_007")

Beitrag von PhiMas » Fr 15. Mai 2015, 14:55

Christoph Stadter hat geschrieben:aber mit Module lackieren, Gleisbau und Treffenvorbereitung bin ich auch gerade gut ausgelastet...
Was für eine inakzeptable Ausrede ;P

Deine Funktion zur Auslösung von Hp0 könnte z.B. so aussehen:

Code: Alles auswählen

void ReceiveWeiche(uint16_t decAddress, uint8_t State)
{
  switch(decAddress)
    case 102:
    case 103:
    case 104:  //Wenn Weichenbefehl mit Adresse 101, 102 oder 103 empfangen wird (Das sind die für Zs1, Sh1, usw. zurücknehmen)
    if (State == 0) //und der Zustand "Abzweig" ist
    {
      setWeiche(101, 0); //Sende Weichenbefehl an Adresse 101 mit Zustand Abzweig (Das ist Hp0)
    }
    break;

    case 252:
    case 279:
    case 284:  //Dasselbe mit ganz anderen Adressen
    if (State == 0)
    {
      setWeiche(141, 0);
    }
    break;
}

harterhund
Beiträge: 14
Registriert: So 18. Jan 2015, 20:38
Re: Alternative Ansteuerung für KS-Signal ("led_signal_007")

Beitrag von harterhund » Sa 23. Mai 2015, 20:44

Hallo zusammen,

Benutze den Hex-Mani und setze 2 Ausgänge auf die selbe Adresse oder alle und fertig :-)

MfG Frank


Antworten