LGB 55045 Busprotokoll


Port- Einstellungen:
Das kleine LGB 55045- Programmiergerät kommuniziert mit dem PC über 9600 Baud, 8 Bits, ein Stoppbit, kein Parity Bit. Dabei werden RTS- und CTS- Leitungen auch benutzt.

Initialisierung:
Beim Aufrufen von Programmierung ....Decoder im LGB- MZS- Programm erfolgt eine Initialisierung, ohne die der 55045 nicht zum arbeiten zu bewegen ist, und die ist extra kompliziert, damit auch keiner dahinterkommt:
Der PC sendet "16" (alles dezimal hier) und ein "Zufallsbyte", jedes mal ein anderes. 55045 antwortet mit "17" und einer Folge von zwei Bytes, die von dem "Zufallsbyte" abhängen (ich habe da einiges herausgefunden), darauf sendet der PC ein weiteres Byte, das auch wieder vom ersten "Zufallsbyte" abhängt, dann noch zweimal "18". Der 55045 sendet dann "19", "17", "2", "21", "6", "192" und "211".
In meinem Programm verzichte ich auf die doofen Zufallszahlen und sende immer nur ein und diselbe der möglichen Kombinationen, das geht auch. Der Ablauf ist so:
- RTS setzen
- senden von "16" und "134" (134 ist so eine "Zufallszahl")
- warten ob innerhalb von 100 Millisekunden der LGB 55045 mit "17", "235" und "250" antwortet
("235" und "250" sind die Antworten auf die "Zufallszahl" 134)
- wiederholen von "16" und "134" falls noch keine Antwort da ist (max. 2 mal)
- wenn die Antwort da ist, senden von "150", "18" und "18" ("150" gehört zu der 134)
Der LGB 55045 sendet dann den ganzen Rest und ist initialisiert.
Die Bedeutung der ganzen Bytes kenne ich leider nicht. Wer mehr Ahnung hat: Mailen!

CV- Variable schreiben:
Das PC- Programm sendet "130", CV-Nr, CV-Wert und eine Checksumme. Die Checksumme ist immer ein XOR der vorherigen Bytes. Beispiel:
- "130", "1", "3", "128" setzt CV 1 auf 3, Checksumme ist 128.
Die Antwort vom LGB 55045 ist:
- "152", CV-Nr, "1", Checksumme (wieder XOR der vorherigen Bytes): wenn der Schreibvorgang erfolgreich war
- "152", CV-Nr, "0", Checksumme: wenn nicht

CV- Variable auslesen:
Da benutzt das LGB- MSZ- Programm verschiedene Möglichkeiten:
- "131", CV-Nr, "0", Checksumme (wieder XOR der vorherigen Bytes) oder
- "140", CV-Nr, "0", Checksumme
Die Methode "131" benutzt das LGB- MSZ- Programm z.B. zum Auslesen von CV 1, hat den Nachteil: bei fehlender Bestätigung vom Decoder hängt sich der 55045 auf, Käse!
Ich benutze die Methode "140", die benutzt das LGB- MSZ- Programm z.B. für CV 29 und bewirkt ein bitweises Auslesen. Bei fehlender Bestätigung vom Decoder liest der 55045 hier immer 255, auch nicht perfekt, aber schon besser.
Es gibt möglicherweise noch andere Lesemethoden, ich war bisher zu faul da weiter zu forschen.

Sonst noch:
Interessant wäre eine Möglichkeit zum Ausprobieren der Decoder. Das LGB- MZS- Programm weigert sich leider, eine Lok normal zu steuern, wenn der 55045 statt einer richtigen Zentrale angeschlossen ist. Ich hätte sonst das Protokoll studiert und mal probiert, ob der 55045 auch so etwas kann.

Der LGB 55045 bietet sicher noch viele Möglichkeiten, die ich leider nicht kenne. Wenn da jemand etwas herausfindet: Mailen!