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