SX-Bus Melde - Modul, Sparlösung unter 3 €.

Für die Rückmeldung von Bit-Informationen wird die Duplexfähigkeit des SX-Bus verwendet,
der dafür eine spezielle Datenleitung ZUR-Zentrale hat. Ich nenne sie deswegen "Schreibleitung".
Am DIN Stecker ist sie an Stift 5 gelegt.

Die "normale" Datenleitung, DIN Stecker Stift 4, bringt die Informationen VON der Zentrale und
ist meine "Leseleitung" die z.B. von den Weichendecodern ausgewertet wird.

Die Leseleitung hat in der Zentrale einen Ausgangswiderstand von 100 Ohm, während die
Schreibleitung über 470 Ohm angeschlossen ist. Die Schreibleitung ist in der Zentrale an
einen Analogkomparator angeschlossen, der den Schreibpegel mit 2,5 Volt vergleicht.

Schaltbildauszug Minizentrale:



Das Meldemodul ist mit der Schreibleitung über 100 Ohm verbunden.
Solange die Lese- und Schreibleitung den gleichen Logikpegel haben, Hi oder Lo, ist am Eingang
des Komparators der volle TTL-Pegelhub von ca. 5Volt vorhanden.
Bei inversen Zuständen der Schreib- und Leseleitung ergibt sich die Eingangsspannung des
Komparators aus dem Spannungsteiler 100 Ohm zu 470 Ohm und entspricht "beinahe" dem
Ausgang des Meldemoduls. Bei Melde "Hi" sind das 5 / (470+100) x 470 = 4,1 Volt,
bei Melde "Lo" 0,9 Volt, die der Komparator mit seiner Schwelle 2,5 Volt sicher unterscheiden kann.

Das Meldemodul "überschreibt" also die Datenleitung und die Zentrale kann das Bit im
Adress-Abbildspeicher entsprechend korrigieren, sodass im nächsten Zyklus wieder beide
Leitungen den gleichen Logikpegel haben.


Softwarekonzept:

Das ganze funktioniert natürlich nur, wenn die Zentrale und das Meldemodul bitsynchron arbeiten.
Deshalb kann die Schieberegistertechnik nicht angewendet werden, da ist die "Musik" ja schon
vorbei, sondern es muss die "Bitzählmethode" herhalten.
Innerhalb einer Synchrongruppe (Gruppenadresse) mit insgesamt 96 Bit Länge, hat jedes Datenbit
der Unteradressen seinen festen "Platz" innerhalb der 84 Datenbit.

Das Meldemodul arbeitet mit einer SX-Bus-Volladresse und "befummelt" alle 8 Bit. Zum Herstellen
der Bitsynchronität braucht man die Gruppenadresse, die Unteradresse und die Bitstellennummer
nach dem Sync-und Adressblock mit seinen 12 Bit.
Nur innerhalb der Laufzeit der 12 Bit der Unteradresse ist der Schreibausgang des Meldemoduls
aktiv und schreibt auch die Trennbits mit. In der übrigen Zeit ist der Pin des Schreibports auf
"Input" geschaltet und damit deaktiviert.

Details sind dem Quellcode des Assemblerprogrammes zu entnehmen.

Hardwarekonzept:

Die Hardware ist wieder minimal und besteht nur aus wenigen Teilen:
Bus-Stecker, 100 Ohm Schreibwiderstand, ATtiny2313, Spannungsregler 5V, evt. mit
Stütz- und Siebkondensator und Stiftleiste für die eigentlichen Meldegeräte wie
Schalter, Tasten oder Belegtmelder per Strom, Fotozelle usw.
Als Meldeeingänge ist ATtiny2313  PORT B vorgesehen Pin12 bis Pin 19.

Das sollte zum "angemessenen" Aufwand, von unter 3 €, realisierbar sein, samt Bus-Kabel.

Allerdings sind alle SX-Busleitungen notwendig ( kein USB Kabel, sondern Phono DIN ):

Versorgungsspannung Stift 3 zum 5V Reglereingang
GND Stift 2 für "Alles"
Taktleitung Stift 1zum ATtiny2313 PD2, Pin 6
Leseleitung Stift 4 zum ATtiny PD3, Pin 7
Schreibleitung Stift 5 zum 100 Ohm Widerstand zum ATtiny2313 PD5 Pin 9


Anwendung:

Eine "nette" Möglichkeit ist die Verwendung von Weichendecodern mit der identischen Busadresse
eines Meldemoduls mit angeschlossenen Mini-Kippschaltern, die GND an die Meldeingänge legen.
Und schon kann man, ohne PC, wie auf einer alten Anlage, per Schalter Servoweichen ansteuern.


Scope-Bilder:

Scope triggern auf PD1 (Unteradresse schreiben) , CH1, Taktleitung CH2.



Das Flagbit "Unteradresse schreiben" ist 12 Takte lang. Man erkennt, dass erst im 13. Takt, ca. 6 Mikro-
sekunden nach der steigenden Flanke die Kennung wieder Lo-Pegel annimmt. Die Dauer ist takt-
abhängig, akt. 648 uSek.

Scope triggern auf PD1 (Unteradresse schreiben) , CH1, Schreibleitung CH2.



Alle Bit haben Hi-Pegel, auch die Trennbit.

Das nächste Bild zeigt die Schreibleitung bei Meldebit 7 auf Lo-Pegel.



Die Stufe in der ansteigenden Flanke hat den Pegel "Schreibe Lo", ca. 0,9 Volt, weil die Zentrale
das Datenbit etwas früher wieder auf Hi-Pegel schaltet als das Meldemodul. Der Hi-Impuls vor dem
Bit ist das Trennbit. Wenn Meldebit 6 auch Lo wird sieht das so aus :



Das Trennbit zwischen den Bits 6 und 5 wird sichtbar wenn diese Bits Lo sind:



In diesem Bild sieht man auch die Stufe in der fallenden Flanke mit Pegel "Schreibe Hi", ca. 4,1 Volt,
die dadurch entsteht, dass das Meldemodul länger Hi hält als die Zentrale.


Das letzte Bild zeigt Bit 1 mit LoPegel, danach das Trennbit als12-tes Bit



Zur Kontrolle kann ein Trix-Handy oder Software wie der SX-Monitor verwendet werden.


Anwendung im 8-fach-Besetztmelder mit Stromtest:

Für den sicheren und automatischen Mehrfach-Zugbetrieb sind "Besetztmeldungen" bestimmter Streckenabschnitte
notwendig. Eine häufig angewendete Methode ist die Stromprüfung, ursprünglich wohl von einem Amerikaner als
" Optimized detector " entwickelte Schaltung, die sowohl auf analogen AC Anlagen funktioniert, als
auch auf Gleisen von Digitalsystemen.
Um dies auf dem Selectrix Gleis auszuprobieren habe ich folgende Schaltung auf einem PCB aufgebaut:



Der Aufbau auf einer Rasterplatine war mir einfach zu aufwendig und fehlerträchtig, und ich habe mir die 35 € für eine
2-lagige Prototyp-Platine gegönnt.



Das fällige Redesign wird 100mm lang und bekommt Befestigungsbohrungen, irgendwann!

Das Messprinzip ist einfach, aber auf Anhieb nicht offensichtlich. Die Komparatoren werden mit 20 Volt vom SX-Bus versorgt.
Der Fahrstrom fließt über separate Multifuses und 2 "dicke", antiparallele Dioden zur "Blauen Klemme" die an X1-5 u. 6
angeschlossen ist. Belastungen auf dem Gleis führen zu einem Spannungsabfall am Messwiderstand 1 K der von den
Dioden begrenzt wird. Bezogen auf den GND der Schaltung hat die blaue Klemme einen Spannungshub von "fast" 20 Volt.

Die Vergleichsspannung am +Eingang des LM339 wird mit dem Spannungsteiler, R27 (4K7)und R28 (100K) erzeugt.
R28 ist an +5 Volt angeschlossen, R27 an der gemeinsamen "Blauen Klemme". Ist diese augenblicklich an GND Potential,
ist die Vergleichsspannung 0,22 Volt. Wenn Strom fließt, der am Messwiderstand von1K, eine Spannung größer als 0,22V
bewirkt, dann ist "-In" > "+In" und der Ausgang hat log. Lo.
Bei inverser Gleisspannung liegt die Blaue Klemme auf etwa +20V und die Vergleichsspannung ist ca. +5,7 Volt, wegen der
begrenzenden Wirkung von D19 auf +5 Volt. Der "- In" des Komparators  ist, auch bei Stromfluß, mind. 19 Volt , d.h. der Ausgang
bleibt auf log Lo, egal ob Strom fließt oder nicht.
Nur im Leerlauf, ohne Strom, UND Blaue Klemme auf GND-Potential, ist der "- In" < "+ In" und der Ausgang log Hi.
Die Selectrix Gleisspannung bringt Impulse von ca. 40 Mikrosekunden Dauer, die bei Takt Hi abgefragt werden können.

Hier das Programmfragment aus sx_meldmodul.asm:

;* Für jeden Stromeingang wird ein 8-Bit Schieberegister und ein 8_Bit
;* Zähler geführt. Das Eingangssignal wird mit dem Takt ins Schieberegister
;* übernommen. Ist das komplette Register = 0 ist mindestens in 4 Takten
;* Stromfluss festgestellt worden und das entsprechende Bit wird im
;* Monitorbyte für " besetzt" auf Hi geschaltet.
;* Hi-Inputs führen nicht sofort zur "Frei-Meldung" sondern werden in einem
;* Zähler aufaddiert. Erst wenn 250 Impulse "Frei" gemeldet haben, wird "Frei"
;* im Monitorbyte gespeichert. Der Zweck ist, kurzzeitige Stromunterbrechungen
;* zu ignorieren.
;* Bei gültiger Adresse wird das Monitorbyte auf den Bus geschrieben.

Stromtest:
    ldi     r30,250     ; Mindestanzahl Hi für frei

    lsl rsch0
    sbic PINB,0         ; Lo = Strom fließt = besetzt
    rjmp st_0hi
    tst rsch0
    brne st_1           ; noch keine 8 Takte lang Lo
    sbr besetzt,1       ; Strom 8 Takte lang da -> "besetzt" eintragen
    clr rcnt0           ; Hi Zähler
    rjmp st_1

st_0hi:
    inc rsch0           ; Frei-Impuls ins Schieberegister
    cp rcnt0,r30        ; 250 Takte mit Hi -> wieder frei
    brsh bes0           ; wenn Zähler gleich oder Größer -> bes0
    inc rcnt0           ; noch nicht freigeben, weiterzählen
    rjmp st_1
bes0:
    cbr besetzt,1       ; "frei" eintragen

st_1:


Das Konzept scheint mir praxisgerecht, weil mit kurzeitigem Stromfluss nicht zu rechnen ist, wohl aber mit
Unterbrechungen, z. B. bei Kontaktproblemen.  Durch Erweiterung des Zählers kann auch eine
Freigabeverzögerung bewirkt werden.

Gleise mit Funkentstörkondensatoren werden immer besetzt melden, weil der Strom durch 100nF bereits reicht.

Theoretisch braucht man bei R-Mess 1K einen Strom > 0,22 mA, d.h. ein Widerstand < 80 K gibt "Besetzt".
Zur Erkennung "verlorener" Wagen sollten dieser Wert unterschritten werden (Leitlack ??).
Beim Überfahren der Trennstellen werden beide Gleisabschnitte "besetzt", wie im richtigen Leben.

Meine Tests habe ich auf einem Gleisoval mit 8 Abschnitten aus jeweils 2 kurzen Gleisen gemacht.
Erfahrungen im Stellwerksbetrieb habe ich nicht.


Dateien für AVR Studio4 und STK500 mit ATtiny2313.

Download Quellfile:        sx_meldmodul.asm
Programmierfile:            sx_meldmodul.hex


Steinhart, November 2008