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