Jens Mohr

Ingenieur  +  Betriebswirt
 

... das (H0) Modellbahnprojekt
St. Margareten 

 



 

Home
 

 Projekt - Idee
 Projekt - Planung
 Projekt-Realisier.
       Anlagenaufbau
       Selectrix
         SX-Bus
           SX-Hardware
           SX-Protokoll
           SX-Procesor
         SX-Verkabelung
         SX-Komponent.
         SX-Dec-Pro-Lok
         SX-Dec-Pro-M 1
         SX-Dec-Pro-M 2
         SX-Dec-Pro-M 3
         Trafo - Booster
         SX - Funkerw.
         SX - Tools
         SX - Tips
       TrainController
       Zentrale<>PC
       PC-Konfig.
       Umrüstungen
       Tipps
       Ausgestaltung
       Elektr.Entw.
       3D Druck
       Paternoster
       Ansichten
 Anlagenbetrieb

 Support & Serv.
 Veröffentlichung.  Links
 Kontakt - Impres.
 Datenschutz


Copyright 2022
Jens Mohr
83224 Grassau
(Chiemsee/Achental)

 


Digital - System
-- SX Bus µ Processor (SW) --


 

Einstieg

Die hier hinterlegten Informationen wenden sich an Leser, die ein eigenes Gerät über den SX Bus betreiben / entwickeln wollen.

Bei mir war das die Entwicklung einer Paternoster - Steuerung, siehe hier.

Der SX Bus wurde in Bezug auf die Hardware und die Schnittstelle zur Anschaltung von Geräten in einem eigenen Register (links) beschrieben, ebenso das SX Bus Protokoll.

In diesem Abschnitt wird die SX Bus Schnittstelle und ihre Handhabung aus Sicht der µ Processor Software (Firmware) dargestellt, so wie sie bei mir zur Anwendung kommt.

Ich setze den µ Processor  PIC 18F4550 von Microchip und die Sprache C ein.

Hinweis
Die folgende Darstellung erhebt keinen Anspruch auf Vollständigkeit, sie zeigt nur einen prinzipiellen Lösungsweg auf.


Aufgabenstellung und Kommunikation

Zur Steuerung des Paternosters durch das Modellbahn - Steuerungsprogramm TrainController (TC)* müssen folgende Informationen ausgetauscht werden ...

über den SX Bus direkt

  • Paternoster - Gondelnummer (SOLL)
    diese Nummer gibt an, welche Gondel an die Gleisschnittstelle Paternoster / Anlage (Einfahrt / Ausfahrt) positioniert werden soll
  • Paternoster - Gondelnummer (IST)
    diese Nummer gibt an, welche Gondel derzeit an der Gleisschnittstelle positioniert ist
  • Paternoster-Grundzustand
  • Paternoster-Betriebszustand

    und über einen Besetztmelder
     
  • Belegungszustand des Gondelgleises; 2 Gleise pro Gondel
  • Zustand von Brems- sowie Halte- Melder pro Gleis; 2 Gleise pro Gondel

Jede Gondelnummer wird binär in 4 Bits codiert übertragen.
Insgesamt können so 16 Gondeln adressiert werden.
Benötigt ein Nutzer mehr Gondeln, so kann er durch Modifikation der Schnittstelle und Erweiterung der Bitanzahl auch diese adressieren,

Insgesamt wird ein Byte für die Kommunikationsrichtung TC* > Zentrale > Paternoster benötigt und ein Byte für die Gegenrichtung.
Damit werden im SX Bus 2 Adressen verwendet.


Prinzip des Datenaustausches

Grundsatz

Das Taktsignal (T0) des SX Busses muß auf einen Processor - Eingang (Input Port)  gelegt werden, der als Interrupt eingesetzt werden kann.
Bei jeder steigenden Flanke des Taktsignals löst der Processor einen SW Interrupt (Unterbrechung) aus und es wird die angegebene Interrupt - Routine gestartet.

Die Dateninformation wird über die Leitung T1 von der Zentrale übermittelt; dieses ist im Processor ein Input Port.

Daten zur Zentrale werden über die Leitung D übertragen.
Wegen des Signalzustands HIGH oder LOW benötigt der Processor 2 Output Ports (siehe HW Schnittstelle).

Grundsätzlich muß während der Dauer des Taktsignals (high Anteil, 40 µs) die Leitung T1 gelesen oder einer der Output Ports bis zum Takt-Ende gesetzt werden.


Initialisierung

Da in der Taktzeit auch Vergleichsoperationen ausgeführt werden müssen, sind in dieser Phase Vorkehrungen zu treffen, u.a.

  • Ermittlung der BasisAdressen und der Gerätepositionen im Paket /Block)
    für die 2 dezimal gespeicherten Adressen
    Speichern der invertierten BasisAdressen und die zugehörige Geräteposition als laufendes Bit (PositionsBit) in dem Paket (Block);
    2 BasisAdressen -- 2 "PositionBits" -- 2 Übertragungsrichtungen setzen.
  • Bestimmung und Speicherung der Übertragungsrichtung pro Adresse
  • Vorbelegung der SYNC Speicherbits mit 111, damit später die Übertragung von 000 erkannt werden kann.
  • Bitzähler auf 0 setzen
  • Speicherplatz (Bits) für die zu ermittelnde BasisAdresse auf 1111 setzen (diese Adresse kommt bei meinem Paternoster nicht vor)
  • Speicherplatz für 8 Bits (Datenübernahme) auf 00000000 setzen
  • Speicherplatz 1 und 2 für 8 Bits (Datenübergabe) auf 00000000 setzen
  • Interrupt freischalten
     

 

1. Aufgabe -- Ermittlung des SYNC Signals (000)

Takt
Bitzähler um 1 erhöhen.
Lesen des Signalpegels (high = 1 oder low = 0) an der SX Bus Leitung T1.
Speichern des Daten - Bits (SYNC Bits) 1 oder 0.
Ist der Bitzähler = 3; alle 3 Bits bewerten. Wenn alle 000, dann wurde SYNC erkannt; wenn nicht alles löschen und neu beginnen.


2. Aufgabe -- Ermittlung der Basisadresse

Takt
Bitzähler um 1 erhöhen.
Mit Bitzähler >= 4 und <= 6 wird ein Trennbit, dann das Gleissignal-Bit und wieder ein Trennbit gesendet. Diese können ignoriert werden.
Mit Bitzähler = 7 wird das höchstwertigste Adress-Bit (B3) von der BasisAdresse gesendet, was abzuspeichern ist.
Mit Bitzähler = 8 wird das Adress-Bit (B2) von der BasisAdresse gesendet, was abzuspeichern ist.
Mit Bitzähler = 9 wird das Trennbit von der BasisAdresse gesendet, was zu ignorieren ist.
Mit Bitzähler = 10 wird das höchstwertigste Adress-Bit (B1) von der BasisAdresse gesendet, was abzuspeichern ist.
Mit Bitzähler = 11 wird das Adress-Bit (B0) von der BasisAdresse gesendet, was abzuspeichern ist.
Ist der Bitzähler = 11; alle 4 Bits der BasisAdresse (invertiert) mit den 2 abgespeicherten, invertierten BasisAdressen des Paternosters vergleichen.

Besteht mit keiner der 2 gespeicherten BasisAdressen eine Übereinkunft, dann sind die gespeicherten SYNC Speicherbits auf 111 zu setzen und die ermittelte BasisAdresse auf 1111 (diese Adresse kommt bei meinem Paternoster nicht vor); ferner ist der Bitzähler = 0 zu setzen.


3. Aufgabe -- Behandlung der Informations - Daten

Es besteht mit einer der gespeicherten Paternoster BasisAdressen Übereinstimmung.
Aus der Adresse und damit aus der BasisAdresse läßt sich ableiten um welche Gruppe von Informationsdaten es sich handelt und wie die Übertragungsrichtung ist.
Ferner ist die Positionsnummer für diese Adresse bekannt, was einer bestimmten Bitposition und damit einem Bitzählerstand (PositionsBit) entspricht.

Speicherplatz 1 und 2 für 8 Bits (Datenübergabe) wurde im Rahmen der Gondelpositionierung mit Informationen gefüllt.

Takt

Bitzähler um 1 erhöhen.
Bitzähler = 12 über die Adresse die Übertragungsrichtung übernehmen sowie das zugehörige PositionsBit.

 --Takt

Bitzähler um 1 erhöhen.
Mit Bitzähler < PositionsBit -- keine Datenkommunikation.

Mit Bitzähler >= PositionsBit und Bitzähler <= PositionsBit +  10 Bits   Datenkommunikation für die Geräte-Daten (Paternoster-Daten) ausführen ....

  • Datenübernahme von TC (Daten einlesen)

    Portzustand von Leitung T1 abfragen und in den Speicherplatz für Datenübernahme eintragen ..
    > mit  PositionsBit auf D0
    > mit  PositionsBit + 1 auf D1
    > mit  PositionsBit + 3 auf D2
    > mit  PositionsBit + 4 auf D3
    > mit  PositionsBit + 6 auf D4
    > mit  PositionsBit + 7 auf D5
    > mit  PositionsBit + 9 auf D6
    > mit  PositionsBit + 10 auf D7

    Mit Bitzähler = PositionsBit +  11 Bits  den Interrupt ausschalten und mit der Bearbeitung der Daten (Gondelpositionierung) beginnen.
    Sind neue Daten gleich den vorherigen Daten; keine weiteren Aktionen notwendig. --- Interrupt nach der Bearbeitung wieder einschalten und alles zurück setzen (Initiierung).

     
  • Datenübergabe an TC (Daten schreiben)

    -- dies ist nur notwendig, wenn sich die zu übermittelnden Daten gegenüber den früher versandten geändert haben --

> mit PositionsBit --- Zustand (high, low) von Bit 0 des Speichers für Datenübergabe abfragen und entsprechend einen der beiden Ports für die Leitung D (für D0) setzen
> mit PositionsBit + 1 --- Zustand (high, low) von Bit 1 des Speichers für Datenübergabe abfragen und entsprechend einen der beiden Ports für die Leitung D (für D1) setzen
> mit PositionsBit + 3 --- Zustand (high, low) von Bit 2 des Speichers für Datenübergabe abfragen und entsprechend einen der beiden Ports für die Leitung D (für D2) setzen
> mit PositionsBit + 4 --- Zustand (high, low) von Bit 3 des Speichers für Datenübergabe abfragen und entsprechend einen der beiden Ports für die Leitung D (für D3) setzen
> mit PositionsBit + 6 --- Zustand (high, low) von Bit 4 des Speichers für Datenübergabe abfragen und entsprechend einen der beiden Ports für die Leitung D (für D4) setzen
> mit PositionsBit + 7 --- Zustand (high, low) von Bit 5 des Speichers für Datenübergabe abfragen und entsprechend einen der beiden Ports für die Leitung D (für D5) setzen
> mit PositionsBit + 9 --- Zustand (high, low) von Bit 6 des Speichers für Datenübergabe abfragen und entsprechend einen der beiden Ports für die Leitung D (für D6) setzen
> mit PositionsBit + 10 --- Zustand (high, low) von Bit 7 des Speichers für Datenübergabe abfragen und entsprechend einen der beiden Ports für die Leitung D (für D7) setzen

Mit Bitzähler = PositionsBit +  11 Bits  alles zurück setzen (Initiierung).


Initiierung des Datenaustausches durch den Paternoster

Um eine störungsfreie Steuerung des Paternosters zu erreichen, muß die Interrupt - Routine des Processors während dieser Zeit ausgeschaltet werden.

In dieser Zeit werden auch von TC* keine neuen Daten benötigt.

Sollen aber in diesem Prozeßabschnitt Daten an TC* übertragen werden, dann ist die Interrupt - Routine für diese Zeitdauer wieder zu aktivieren.
Die Kommunikation selbst läuft nach der obigen Darstellung ab.


SX Bus Nutzdatendefinition (Belegung des Bytes)

für die Auslegung der Paternostersteuerung.

Übertragungsrichtung TC* > Paternoster

D0 : Paternoster Nr  Bit 0
D1 : Paternoster Nr  Bit 1
D2 : Paternoster Nr  Bit 2
D3 : Paternoster Nr  Bit 3
D4 : frei
D5 : frei
D6 : frei
D7 : Bit für den Start des Paternosters (Startsignal)

Übertragungsrichtung Paternoster > TC*

D0 : Paternoster Nr  Bit 0
D1 : Paternoster Nr  Bit 1
D2 : Paternoster Nr  Bit 2
D3 : Paternoster Nr  Bit 3
D4 : Paternostergrundzustand (ein, aus)
D5 : NOTHALT (aus / ein)
D6 : Betriebszustand (Ruhe, Bewegung)
D7 : frei

 


Vollduplexverhalten des SX Busses
 

 

Timing des SX Busses (Lesen + Schreiben von Bits)
 

 

SX Bus    Spannungen und Impedanzen


Programmierung der SX Bus Schnittstelle

Die Programmierung der SX Bus Kommunikationsschnittstelle stellt eine große Herausforderung dar, insbesondere dann, wenn diese in C auf einem µProcessor installiert wird.

Ich habe von der Fa. Microchip den Processor PIC18f4550 eingesetzt.

Um die notwendige interne Taktfrequenz zu erreichen habe ich einen externen 20 MHz Quarz verwendet. Ein interner Teiler teilt die Frequenz auf 4 MHz hinunter. In einem weiteren Schritt wird diese "feste Eingangsfreuenz" intern auf 96 MHz angehoben und anschließend intern mit einem Teiler auf 48 MHz reduziert.

Hinweis:
Ich hatte zuerst versucht mit 20 MHz (Taktfrequenz) auszukommen, was aber bei der Sprache C zu langsam war. Assembler ist mir nicht so vertraut.
Da die interne Taktferquenz auf 4 MHz festgelegt ist, kann auch ein anderer externer Quarz eingesetzt werden. Es ist dabei die interne Teilerabstimmung zu beachten.
Die Bereitstellung von 48 MHz beruht auf der Möglichkeit mit dem Processor einen USB Anschluß zu betreiben.

Der Abtastzeitpunkt TA liegt etwa bei 30 - 35 µs nach der fallenden Flanke des Taktsignals.

Dies bedeutet, das vor diesem Zeitpunkt die Pegel (Ports) für das Überschreiben eines Bit-Zustandes gesetzt sein müssen.
Die Ermittlung und Aufbereitung des nächsten "zu sendenden Bits" muß im davor liegenden Takt erfolgen.

Beim "Empfang" eines Bits (Bitzustand) muß die Auswertung, z.B. auf Sync; Basisadresse (BA) nach dem Abfragezeitpunkt in den restlichen µs erfolgen.
Bei den Daten erfolgt dort die Abspeicherung der Bits in einem Byte.

In der Taktzeit eines Trennbits können weitere Operationen (Auswertungen)" untergebracht" werden.

 

 

 


HINWEISE     zu mit  *  markierten Worten

Alle Firmenbezeichnungen / Firmennamen; Produktbezeichnungen / Produktnamen stellen keine Werbung oder Empfehlung dar, sondern beschreiben nur die in diesem Projekt individuell und subjektiv ausgewählten Produkt - Hersteller bzw. Lieferanten als auch deren verwendeten Produkte zur Anschauung, Darstellung und Beschreibung des eigentlichen Projekt - Inhalts.

Analoges gilt auch für die eingetragenen Links (s. hierzu Distanzierung auf der Link-Seite).

Der Leser soll selbst auf dem Markt recherchieren und für seine Bedürfnisse selbst entscheiden, welches Produkt er einsetzen will und wo er sich dieses beschaffen möchte.

In dieser Veröffentlichung verwendete Produktnamen / Produktbezeichnungen sind von / durch den einzelnen Hersteller(n) geschützt. Ihre Nutzung dient lediglich zur Kennzeichnung / Beschreibung des Produktes selbst.
Analoges gilt für die erwähnten
Firmenbezeichnungen / Firmennamen.