Jindra Fučík

Zpětný ohlas RS Bus (RS8)

Úvod

Pro svůj projekt inteligentního kolejiva jsem potřeboval použít rozhraní sběrnice označované jako RS Bus (RS8). Toto rozhraní používá Lenz jako interní a jeho popis pochází téměř výhradně z reverzního inženýrství. Jeden z prvních, kteří popsali chování RS-Bus byl pravděpodobně Peter Schneider na webu der-moba. Já mám mnohem raději vysvětlující popis který napsal Aiko Pras na sajtě DCCtrains.

Feedback interface RS Bus (RS8)

Introduction

I was need for my intelligent track project to use interface of bus called as RS Bus (RS8). This interface is used by Lenz as internal interface and description of it is published in majority as result of reverse engineering. One of first description is probably done by Peter Schneider on webpage der-moba. I prefer description written by Aiko Pras on site DCCtrains.

Popis zapojení

Pro rozhraní jsem použil schéma založené na zdroji proudu ze dvou tranzistorů, které Aiko označuje za lepší. Schéma jsem použíl v původní podobě, ačkoli se úprava pomocí diodového můstku v praxi celkem osvědčila, ale pro skalní uživatele RS Bus by mohla být zavádějící
Vzhledem k tomu, že předpokládám použití detektorů, které detekují jen v jedné půlvlně, připravil jsem na vstup R/S klopný obvod 4044. Tím jsem zároveň dostal oddělení jednotlivých nibble, protože jedno pouzdro obsahuje čtyři klopné obvody.
Systém nastavení adresy ohlasu jsem zachoval - zasunutí propojky, připojení DCC signálu místo napájení a přehození výhybky s příslušným číslem. (Stále mám přepočet adresy výhybky podle Roco, ačkoli tady se spíše hodí Lenz)
Samotné detektory obsazení jsem do schématu nepřidával. Je to triviální a každý si je dokáže přidat. Z mého pohledu jen zvětšení desky plošných spojů. Jenom pro zajímavost doplním, že lze použít detektory založené na dvou párech antiparalelních diod, ale pokud je napájeno z DCC signálu, pak také jeden pár a spínací tranzistor.

Hardware description

I was used schematic based on two transistors for the RS interface. Aiko present those interface as better. I was used the schematic in original form, even though the change with diode bridge working well in practice. But traditional RS-bus users like to use wires with two colours.
Because I expect usage of detectors that detecting only in one half period, I was used on input side R/S flip flop 4044. By the way - one chip contain four flip flops, then I get division to the nibbles for free.
I was keep the system of address definition on same way as usual for original RS components. It mean plug shorting jumper, connect DCC signal instead of power and then switch turnout with requested number. (I still have calculation of address on Roco numbering, it look like Lenz will be better)
Occupancy detectors are not included in schematic. It is trivial and anybody can add them. It is only increase size of PCB from my point of view. For information only I would like to inform, that it is possible to use detectors based on two pairs of antiparallel diodes, but once device is powered from DCC, it is also possible to use detectors with one pair and one transistor.

all pdf .zip

Popis software

Software je velice jednoduchý. Celkem hodně odpovídá návodu, který uvádí Aiko Pras. Signál od centrály je přiveden na vstup přerušení (INT), obsluha tohoto přerušení se jednoduše podívá, jestli od předchozího přerušení uběhlo více než 4ms. Pokud ano, pak se jedná o nový startovní impulz a vynuluje se počítadlo, pokud ne, pak se jedná o provozní pulz a přičte se počítadlo adres. Pokud je počítadlo rovno adrese tohoto modulu, pak se nastaví příznak shody.
V hlavním programu se sleduje příznak. Pokud je nastaven, zkontroluje se, jestli došlo k nějaké změně a pokud ano, odešlou se data. Při vyhledávání změn je použita malá finta. Každý lichý průchod se vyhledávání vynechá úplně (Jeden průchod je cca 33,26ms - 247ms). Při prvním sudém průchodu se kontroluje vždy spodní polovina a při druhém průchodu horní polovina. Takže každý jednotlivý vstup je kontrolován cca jednou za 160ms. To je dostatečná doba pro stabilizaci i pro případ detekce jen jedné půlvlny a nebo pro reflexivní detektory.
Původně jsem se pokoušel pro odesílání informací použít standardní sériový port na procesoru, ale narazil jsem na jeden podstatný problém - odesílání nezačne okamžitě, ale až po přetečení časovače. To bylo pro potřeby tohoto projektu nepoužitelné. Proto jsem musel odchozí data generovat pomocí běžného delay.

Celkově bych řekl, že mne překvapila jednoduchost implementace. Na to se mi zdá že existuje malé množství amatérských produktů. V souvislosti s tím si kladu otázku, jestli jsem něco nepřehlédl. Nejsem si úplně jist, jestli je správné, že se odesílají data pouze v případě změny a navíc se odesílá jen ten nibble (půl-bajt), který se změnil. Na některých fórech jsem četl informaci, že se má vždy odesílat spodní a následně okamžitě horní nibble. Každopádně na tom malém množství rozhraní která jsem testoval na tom nezáleželo. Další otázka je, jestli se někdy neprovádí náhodné nebo systematické občerstvení dat. Pravděpodobně neprovádí, ale trochu mne to překvapuje, dovedu si představit zařízení, které bude v zarušené části sběrnice a proto bude špatně počítat pulzy, pak je možné, aby přepsalo informace na jiné adrese.

Návod k používání

Použití je velice jednoduché. Nejprve je potřeba nastavit každému modulu unikátní adresu. Podle doporučení Lenz by modul pro detekci obsazení měl používat adresu 65-128 adresy 1-64 by měly být používány pro zpětný ohlas výhybek. Modul ve stávajícím stavu software vždy předpokládá, že je připojen jako detekce obsazení, takže je intenzivně doporučeno používat adresy v rozsahu 65-128.
Pro nastavení adresy je nutné připojit na napájecí svorky traťový výstup z centrály (svorky J-K). Svorky R-S nemusí být zapojeny. Zároveň je nutné před zapnutím propojit konfigurační propojku. Pak stačí zapnout centrálu, na ovladači se přepnout do režimu příslušenství (tlačítko na MultiMAUS, nebo F + 5 na LH100). Zvolíme číslo výhybky takové, jakou adresu má používat modul. Tuto výhybku "přehodíme". Tím dojde k uložení adresy a konfigurace je hotová.
Pozor: Poté odpojíme napájení a vyndáme propojku. Pokud by došlo k přehození několika výhybek, pak modul použije adresu poslední přehozené. Adresa se počítá podle čísel výhybek používaných u Roco, pokud použijeme systém Lenz, bude adresa o +4 posunutá. Uznávám že je poněkud nelogické používat Roco počítání pro zařízení, které se uplatní především pro Lenz centrálu, ale je to tak. Pokud chci na Lenz centrále nastavit adresu 65, pak na LH100 zvolím SW 61.

Software description

The software itself is pretty simple. In many parts it is same as design recommended by Aiko Pras. Signal from command station is connected into interrupt input of processor (INT). Interrupt service routine will simply check, if time from last interrupt is more than 4ms. If yes, then it is new start pulse and pulse counter is cleared. If time is less, then it is next working pulse and pulse counter is increased. If pulse counter is equivalent to module address, then flag is set.
Main program looking for equivalence flag. If it is set, then it will check inputs. Once inputs are changed, then it will send data. During looking for changes small trick is used. Every odd round (1,3,5,...) is cancelled at all (one round is between 33.6ms to 247ms). During first even round is checked always low half of inputs (lower nibble) and during second even round upper half. Then every input is checked circa every 160ms. It is enough time for stabilisation also for cases when only one half of DCC signal is used for detection and also for reflexive detectors.
At the begin I was try to use standard serial port functions for sending data. But I have found one major problem - sending not start immediately, but after next rotation of timer. It was useless for needs of this project. Then I have to send outgoing data by using simple delay function.

Globally I have to say, that implementation look like more simple than I expect. Compare to this simplicity it exist very small amount of home made products. Then I'm asking myself, if my implementation is correct. I'm not sure, if it is correct, that I'm sending data only in a case of change and I'm sending only changed nibble. I was seen on some forum, that it must be send first lower nibble and then immediately upper nibble. But on this small amount of interfaces I have for testing they have no problem. Next question is, if it is no necessary to refresh at random or at systematic period. It look like that no refresh is requested, but I'm little surprised, because I can imagine device in noisy part of layout and will wrong count pulses. Then it is possible, that will re-write information on another address.

Instructions for use

Usage is very simple. First of all every device must have it's own unique address. By Lenz request occupancy detection modules have to have address 65-128. Addresses 1-64 have to be dedicated for feedback from turnouts and switches. Actual software version of module always expect, that it is connected as occupancy detector, then it is strongly recommended to use addresses in range 65-128.
For address configuration connect DCC track output (pins J-K) from command station. Outputs R-S must not be connected anywhere. Also before powering must be shorted configuration jumper. Then command station must be turned on. On the hand controller switch to accessory mode (button on MultiMAUS, or F + 5 on LH100). Then type address you want to use for module. Then switch this accessory few times. And that is all, module will save address of this accessory as its address and configuration is done.
Notes: Then we have to switch off track output and remove shorting jumper. Once we will switch more accessory, then module will use address of last changed accessory. Address is calculated by accessory numbering used by Roco, if you will use Lenz system, then address is shifted by +4. I know, that it is less logical to use Roco numbering for module, that have better value with combination of Lenz command station, but that is life. For set up address 65 on Lenz command station, we have to use SW 61 on throttle LH100.
Pro vlastní provoz je možné modul napájet z libovolného zdroje napětí v rozsahu cca 9-14V. Konfigurační propojka musí být pro provoz rozpojená.
V případě napájení z cizího zdroje, lze použít pouze takový detektor obsazení, který není propojen s kolejištěm. To jest detektory vybavené optočlenem, jazýčkové kontakty, tlačítka, spínače, relátka, nebo jednoduché infra závory.
Například TYTO běžné detektory obsazení.
For standard situation module can be powered from any power source with voltage circa 9-14V. Configuration jumper must be in this case removed.
In a case of powering from third party source can be used only this type of occupancy detector, that is not connected with tracks. It means detectors equipped by optocouplers, reed contacts, push buttons, switches, relays or infra barriers.
Tor example THIS simple occupancy detectors.
Modul je také možno napájet přímo z DCC signálu (svorky "Track" u Roco, nebo svorky J,K u Lenz).
V takovém případě je možné kromě běžných detektorů, popsaných v předchozím případě, použít ještě detektory, které jsou připojené přímo k traťovému napětí. Příklad takového detektoru je uveden na následujícím obrázku. Hodnoty součástek jsou pouze orientační a slouží jen pro názornost.
V případě použití tohoto typu detektoru je mimořádně žádoucí, aby detekce probíhala pokaždé na stejném vodiči (například vždy vodič J).
Module can be also powered directly from DCC track signal (header "Track" on Roco, or headers J,K on Lenz).
In this case it is possible instead of traditional detectors, described in previous section, use also detectors directly connected to track voltage. Example of this type of detector is presented on following figure. Values of electric components are only indicative and they are only for indication.
In a case of usage this type of detector, it is strongly recommended, to detect always on same rail (for example always on rail J).

Závěr

Zdá se, že takto jednoduchý modul zpětného hlášení je schopen fungování. Bohužel mám k dispozici velice málo zařízení vybavených sběrnicí RS-Bus, takže nemohu potvrdit a ani vyvrátit, jestli funguje za všech okolností. Pravděpodobně by bylo možné software ještě zdokonalovat a rozvíjet. Vzhledem k tomu, že pro tento typ modulu nemám uplatnění, tak se na tomto rozvoji pravděpodobně nebudu dále podílet.
Na druhou stranu velice rád pomohu někomu, kdo má v plánu na tomto rozvoji pracovat.
Pochopitelně nemám nejmenší zájem podporovat někoho, kdo si chce modul postavit pouze proto, aby jej prodával někomu dalšímu.

Resume

It look like, that this simple feedback module is feasible to use. Unfortunately I have only very limited set of command stations and interfaces equipped by RS-Bus, then I can not confirm or false, if it working on all conditions. Probably it will be possible to improve and extend the software. But because I have no application for this module, then I will probably not participate on enhancements of this module.
From the other hand, I will likely help to someone, who will continue with improvement of module.
Of course I have no interest to support anybody, who planning to build module only to sell it to anybody else.
Pokud máte problém s osazováním, nebo s výrobou desek plošných spojů, využijte kontaktní formulář na TOMTO web-shopu, kde si můžete objednat komponenty nebo hotový dekodér. Once you have problems with soldering or creating PCB boards, please use contact form on THIS web-shop, where you can order some parts or finished decoder.