PX-Gleis-Decoder

Die Selectrix Gleisspannung enthält die selbe Information wie die SX-Bus-Datenleitung.
D.h. alle Bit aller Adressen von 000 bis 111 können ausgelesen werden.
Die Decodierung ist natürlich in jedem Fahrzeugdecoder enthalten, einen Schaltplan
habe ich noch nicht gesehen. Aber "so" schwierig ist die Sache nicht. Schon vor mehr
als 10 Jahren habe ich  versucht einen Lokdecoder zu bauen und dabei diese Grund-
schaltung verwendet:



Der Bau auf einer Lochrasterplatine ist relativ einfach z.B. mit dieser Bauteilanordnung:



Der Test mit dem STK500 ist nicht ohne Weiteres machbar und birgt die Gefahr, ganz
leicht einen folgeschweren Kurzschluss zu verursachen. Der Grund ist der Potentialunterschied
der GND-Leitungen in der Zentrale bzw. dem Booster und im Gleisdecoder.
Die Gleise haben in der Zentrale entweder GND Potential oder +20Volt. Im Gleisdecoder ist GND
der "-" Ausgang des Brückengleichrichters und darf deshalb nicht mit GND der Zentrale
verbunden sein.

Die Doppelweggleichrichtung liefert das Taktsignal mit vollem Spannungshub der Zentrale zurück.
Die Entkopplungsdiode D7 zum Glättungselko C1 ist deshalb unverzichtbar.
Mit Einweggleichrichtung, D6, eines Gleisanschlusses erhält man das "Brutto"-Datensignal.

Takt und Daten werden mit den Spannungsteilern , R1 - R8 bzw. R3 - R9, auf TTL-Niveau
reduziert, die Zenerdioden D5 und D8 schützen die Eingänge des Tiny3213 vor Überspannung.

Zur Versorgung des Mikroprozessors reicht die Kombination R2, D9, C2, wenn nur geringe
Ströme bei Hi-Signal benötigt werden.

"Netto" - Datensignal erzeugen:

Nach Definition der Gleisspannung ist die Codierung mit Tripelbits realisiert wobei gleicher
Spannungspegel aufeinanderfolgender Impulse logisch "0" bedeuten und logisch HI durch
unterschiedliches Potential repräsentiert wird. Mit anderen Worten: Liefert die Exor Verknüpfung
aufeinanderfolgender Datenimpulse logisch "1" entspricht dies Datensignal "HI". Ist das
Verknüpfungsergebnis logisch "0" ist die Dateninformation "Lo".

Hier der Abschnitt des Decoder C-Programmes ( Compiler ICCV7AVR ) :


 

//**************************************************************
#pragma interrupt_handler int0_isr:iv_INT0
void int0_isr(void)
{
    sync = (sync << 1);    
// Schieberegister Daten

//**************************************************************
// Anders als beim SX Lesen muss das Datenbit vorher erzeugt werden !!!
// Daten-Bit Aufbereitung mit EXOR aus 2 aufeinanderfolgenden Bit's
// Das resultierende Datensignal wird auf PORTD PD6 (64) abgebildet
// und für die Abfrage beim Lesen verwendet.
// Auf PD 1 (2) wird das Eingangssignal abgebildet und für EOR benutzt.
// Erst danach auf neuen logischen Zustand geändert.

// PIND & 1 == Aktuell, PIND & 2 == Vorher !!!
// Gleiches Potential Neu und Alt bedeutet logisch LO als Datum !!!

    if ( ((PIND & 1) && !(PIND & 2)) || (!(PIND & 1) && (PIND & 2)) )
    {
        sync |= 1;
                // = Datenbit als Hi übernehmen
        PORTD |= 64;         
// PD 6 Datenbit zur Abfrage HI
    }
    else
                             // neues Bit ist Lo
        PORTD &= ~64;     
// PD 6 Datenbit zur Abfrage LO

    if (PIND & 1)             
// aktell Bit Hi
        PORTD |= 2;         
// abbilden auf Ausgang HI
    else
        PORTD &= ~2;     
// bzw. LO


 PORTD Pin PD6 ist das zurückgewonnene Datensignal und entspricht dem SX.Signal.
Deshalb sind alle folgenden Programmteile identisch zu den SX-Decodern und PD 6
wird als Dateneingang verwendet.


Anwendung:

In vielen Steuerungsfällen ist die Rückmeldung des Decoders nicht notwendig. Die
Schreibfunktion ist auf dem Gleissignal natürlich nicht vorhanden. Aber für Schaltfunktionen
in "fahrenden" Decodern, z.B. für die Innenbeleuchtung ist der Gleisdecoder praktisch,
wenn man ihn genügend klein baut !! Eine weitere Anwendung sind Weichensteuerungen
in einer Gartenbahn, wo man sicher auf die zusätzlichen Leitungen gerne verzichtet.
Die +20 Volt können zur Versorgung kleiner Verbraucher wie LED-Ketten verwendet
werden. Die Ausgänge steuern dann die notwendigen Schalttransistoren. Praktisch
sind für solche Zwecke FET's mit logic-Level Input wie der BSS138 (SMD).


Das Testprogramm

verwendet 1 Halbadresse zum Steuern von 4 Ausgängen. Im Decoder
ist eine Programmiertaste vorgesehen, um über das Gleissignal Adresse und Halbkanal
verändern zu können. Der Programmiermode wird durch Blinken der Ausgänge PB2, PB3
signalisiert. Die neue Adresse wird in Kanal 001 angegeben, die Übernahme erfolgt mit
gesetztem Bit 7in K01. Die Halbkanalinformation liest der Decoder von Adresse 002.
"0" bedeutet untere 4 Bit, "128" == Bit 7 setzt die oberen auf wirksam. Mit Bit 7 in K001
schreibt der Decoder die neuen Informationen, Adresse und Halbkanal, in sein EEPROM
und beendet den Programmiervorgang.

Hier die Dateien für den obligatorischen Selbstversuch:

gleis_deco.c        GLEIS_DECO.hex        GLEIS_DECO.eep

Winfried Steinhart, im Februar 2009