SX-Decoder mit Betriebsparameter

Neu überarbeitet am 24. Jan. 2009. Neues PC-Programm, neue Decodersoftware.


Jeder Teilnehmer an einem Bussystem braucht zumindest einen Betriebsparameter,
seine Busadresse, wenn er "ansprechbar" sein soll. Ansonsten ist er auf das "Mithören " beschränkt.

Diese Adresse muss bekannt sein, d.h. im Zweifelsfall ermittelbar. Für die D&H Lokdecoder wurde
das Problem so gelöst, dass sie bei geeigneter Inbetriebnahme ohne Aufforderung ihre Kenndaten
aussenden. Ob sich dafür ein Systemteilnehmer interessiert, sprich die Daten empfängt und
auswertet, das ist dem Decoder zunächst egal. Mit dieser Methode ist sichergestellt, dass ein "unbekanntes"
Wesen zu identifizieren ist.
Gleichzeitig wurde den Decodern eine Eigenschaft mitgegeben, die es ermöglicht, den Decoder in
eine Betriebsart zu versetzen in der er Daten aufnehmen und abspeichern kann.
Dieser Automatismus hat aber seinen "Preis", denn er funktioniert nur dann, wenn nur ein einziger
Decoder "auf dem Bus" ist. Wenn mehrere gleichzeitig sprechen hat man mit dem Zuhören nichts als
Schwierigkeiten. Deswegen gibt es aber das Programmiergleis und die Programmierfunktion, die
nur hier und mit einem Decoder funktioniert, der Systembus bleibt dabei aus dem Spiel.


Funktions-Decoder

der ersten Generation hatten zur Einstellung der Adresse eine Hardwarelösung, DIL-Schalter oder Federhaken.
Zusätzliche Parameter gab es nicht.

Meine Servodecoder sind auch hardwareprogrammiert, denn die Daten sind im Programm des
Mikroprozessor festgelegt. Dies ist nicht besonders "elegant", benötigt aber keinerlei Hardware. Ein daraus
resultierender weiterer Nachteil ist, dass die die Parameter bisher nicht auslesbar sind.

Die Voraussetzungen für eine "intelligentere" Lösung ist am SX-Bus gegeben, denn er ist bidirektional, also
sind die Busteilnehmer dialogfähig, sofern Datenfelder und Adressraum zur Verfügung stehen. Dies ist aber
im SX-System nicht ausreichend vorgesehen.

Vereinbart sind Systemkanäle, von Adresse 104 bis 111, die aber mit Funktionen der Zentrale und der
Programmierung von Lok-Decodern vorbelegt sind oder für die Parameterübergabe nach DCC reserviert
bleiben sollen.

Unter der Voraussetzung, dass nur SX-Bus Komponenten geplant sind, kann man natürlich weitere Adressen
zu privaten Systemadressen erklären und Dialoge zur Parameterübergabe definieren.

Die Dialogeröffnung ist damit aber noch nicht ohne weiteres möglich. Das ist der Grund für die "Programmiertaste"
an allen mir bekannten Decodern. Mit diesem Signal wird der Programmier-Mode im Prozessor aktiviert und
ggf. auch beendet.
Als Alternative bleibt nur eine "Kommandoadresse" die von allen Busteilnehmern immer mitgelesen wird.
Das setzt aber die Kenntnis der Adresse voraus, von der man aber nicht in jedem Fall ausgehen kann, und die
dann auch nur an einen Teilnehmer vergeben sein darf. Eine unerwünschte Einschränkung.

Die Datenfelder:

Flexibel einsetzbare Decoder benötigen nicht nur ein Adresse, sondern auch Parameter. Die Servodecoder
brauchen die Stellpositionen und evt. die Stellgeschwindigkeit pro Kanal. Für den Programmiervorgang kann
man einen Adressraum auf dem SX-Bus reservieren. Uwe Magnus wählt in seinen Selbstbauprojekten die
Adresse 0 für die Decoderadresse und aufsteigende Adressen für das "Kommandobyte" und die Parameter.
Das ist kein Problem, wenn diese unteren Adressen frei sind oder aber für Lokdecoder verwendet werden und
die Gleisspannung beim Programmieren ausgeschaltet bleibt.

Die Eingabe von Zahlenwerten ohne geeignete Software auf dem PC kann ein "mühsames" Geschäft sein,
wegen der Binärdarstellung z.B. auf dem Trix Control Handy. Decoderangepasste Software kann natürlich
wesentlich eleganter und weniger fehlerträchtig gestaltet werden durch Einbau von Plausibilitätsprüfungen.

In jedem Fall scheint es sinnvoll zu sein, dass der Decoder beim Aufruf der Programmierfunktion die aktuellen
Daten auf die vereinbarten Adressen legt und bis zum Ende die "online" Busdaten als Parameter verwendet.
Das erleichtert den Test und reduziert die Schreibvorgänge auf dem EEPROM.


Der Decoder W_deco4_para:

Für den 4-Kanal Servodecoder habe ich eine Softwareversion programmiert die das Verändern der
Betriebsparameter über den SX-Bus ermöglicht.

Voraussetzung ist eine "Programmiertaste" die am PORT  B , PB7 angeschlossen ist (nach GND-Potential).
PORT B, PB6 ist ein Ausgang, der eine LED ansteuern könnte als Signal "Programmierung in Betrieb"

Verwendet werden die SX-Adressen 0 bis 5 zur Parameterübergabe,
Sie sollten freigehalten werden.


Programmier Ablaufsteuerung:

Für die Programmierung wird die Adresse K001 verwendet. Die Idee ist auf dem "Befehlskanal"
im oberen Halbbyte die Befehlsnummer ( neudeutsch CmdID) und im unteren eine Wertkennung
(ParaID) zu übertragen. D.h. 15 Befehle und 15 Werte können bearbeitet werden.

Bei der Dialogabwicklung ist das Zeitverhalten auf dem SX-Bus und in der Zentrale zu beachten
und die Tatsache, dass die Zentrale mit dem Interface ein passiver Partner ist. Auskunft gibt sie
nur auf Anfrage per Leseauftrag, Aktionen erfolgen nur auf Schreibbefehl. Übertragen wir stets
nur ein Byte. Die Zentrale sendet zum Zeitpunkt des Leseauftrages den aktuellen Inhalt des Bus-
Abbildes im Speicher. Daraus folgt, dass eine aktuelle Decoderinformation erst nach Ablauf der
Zykluszeiten auf dem SX-Bus und in der Zentrale richtig weitergegeben werden können.
Ebenso werden Befehle vom Steuerprogramm erst Zyklen später vom Decoder erkannt, weil ja
die Zentrale zuerst den Befehl auf den Bus legen muss, von dem der Decoder dann liest. Die
Bitsynchronität hilft nur dann, wenn die Zentrale im Synchronteil geschrieben hat bevor der Decoder
liest.

Die Kennung für das PC-Programm, "Decoder im Programmiermode" verwende ich Bit 5 (32, 0x20)
im Zustandskanal der Zentrale K106, d.h. mit Betätigung der Programmiertaste schreibt der Decoder
"rücksichstslos" dieses Bit in der Zentrale, unter der Annahme der Modellbauer weiß was er tut.

Auch im Programmiermode sind die Steuerbits der Basisadresse wirksam, und die "vor Ort" Kontrolle
ist möglich.
Die Eingabe der Programmierdaten mit einem Handsteuergerät ist zwar möglich, aber sehr fehler-
trächtig. Das PC-Programmier-Programm hilft weiter:



Mit diesem Hilfsmittel klappt die Programmierung wesentlich "eleganter". Das Programm ist mit C# geschrieben,
muss installiert werden und benötigt MS .NET2 oder höher.

Nach dem Start listet DecoProg die verfügbaren COM-Schnittstellen auf. Default sind COM1 und 9600Bd gewählt.
Click in die Listenfelder ändert die Auswahl.
Mit "StartLesen" wird die Verbindung zur Zentrale getestet und Bit 5 im Zustandskanal106 auf "32" geprüft.
Wenn diese Voraussetzung erfüllt ist, wird der Decoder aufgefordert seine Basisdaten, Adresse, Halbkanal und
Servogeschwidigkeitswert zu senden. Die entsprechenden Felder in Decoprog werden gefüllt.
Ab sofort sind Bitstellen der Adresse bidirektional wirksam. Die Servonummer ist nicht vorbesetzt, erst nach
Click in der Gruppe "Servonummer" werden die Positionen vom Decoder abgerufen und die "Schieber" getellt.
Änderungen sind "sofort" nach der SX-Gedenkpause wirksam, ebenso die Wahl Fahrzeit und Halbkanal.

Zum Adresswechsel ist die neue Nummer einzugeben und wird nach Rückfrage gesendet und wirksam.

Der "heisse" Button ist das Speichern im EEPROM. Der Decoder startet daraufhin mit neuen Werten,
der Programmiermode ist verlassen.

Mit "Stoplesen" führt DecoProg einen Reset durch.

Servo-Unarten und Erkenntnisse daraus:

Meine Tests habe ich mit "Billig"-Servos ES05 und ES30 gemacht und festgestellt dass die Stromimpulse
beachtliche Größen annehmen (können) die einen 1A-7805-TO220 überfordern.



Gemessen habe ich an 0.8 Ohm vor dem 5Volt Regler. Schon 1 Servo bringt es auf knapp 1A Spitze.
Bei zwei Servos gibt es dann dies Zufälligkeit mit addiertem Spitzenwert:



Vielleicht hilft dieses Wissen dem geneigten Hobbyelektroniker beim Schaltungsentwurf.
Ich gebe dazu keine Empfehlung (mehr)!

Decoder-Software:

Die Kommentare sollten für das Verständnis ausreichen. Die Takt-Interrupt Routine habe ich
um die Geschwindigkeitssteuerung für die Servos erweitert. Für das Abspeichern der
Bitstellen werden ca. 80 Byte verwendet um ausreichend Lebensdauer zu erreichen.

Das AVR Servo-Decoder-Programm für einen ATtiny2313 gibt's hier:  w_deco4_para.asm
Die PC Software, gerne auch mit C# Quelle für VS 2005 auf Anfrage per email.

Winfried Steinhart, im Januar 2009