Jindra Fučík

Jednoduchý DCC dekodér pro semafory

Na tvorbu tohoto dekodéru mne přivedlo několik kamarádů, kteří si stěžovali, že v českých zemích se nejčastěji používají semafory a signalizace s maximálně pěti světly, zatímco běžné dekodéry jsou buď pro čtyři a nebo osm světel.
Jediný u nás dostupný dekodér (BorgMcz), který se pokouší tuto situaci řešit bohužel naráží na několik nesprávných předpokladů, a proto u něj často dochází k chybám.
Opět jsem se inspiroval u Paco Cañada, nicméně definice aspektů se mi nezamlouvala, takže jsem si vytvořil vlastní.

Vycházel jsem z oblíbeného procesoru PIC12F629, s tím, že jsem se pokusil maximálně využít jeho vývody. Tím pádem jsem pro vstup DCC signálu použil vývod GP3/MCLR a bylo nutné doplnit ochrannou diodu.
Schéma zapojení je velice variabilní a může vypadat třeba takto:

Simple DCC decoder for semaphores

Few of my friends asked me for decoder for Czech railway system. Czech system most using semaphores with five lights, but decoders on market are usually with four or eight lights.
One decoder available on Czech market (BorgMcz) using non valid pre-requisites and then it hawe wrong reliability and making mistakes.
I go for inspiration again to pages of Paco Cañada, But I do not like his definition of aspects, then I create my own one.
I was used my favorite processor PIV12F629, but I used all his pins. Then I must use pin GP3/MCLR as a DCC input. Then I must add protecting diode for this input.
Schematics is variable and can look like for example this:

C1 + C2 = 10-47uF
C3 = 100nF
R1 = 22k - 68k
R2~R6 = 470R - 1k

Popis funkce

Dekodér si vezme maximálně 4 adresy pro vyhybky a na nich se pokouší realizovat znaky složené ze svícení a blikání.
Při každém rozsvěcení a zhasínání využívá takzvané "fade", tedy pomalé zhasínání, kterým simuluje žárovky. Nastavení rychlosti je společné.
dále je k dispozici blikání - časová základna pro blikání je zase společná, nicméně lze blikat ve fázi a v protifázi. To znamená, že lze udělat blikání, kdy na semaforu blikají dvě světla a obě současně, a nebo například na přejezdu kde blikají "naopak" = vlevo -> vpravo -> vlevo ...
Nastavení světel se provádí pomocí "aspektů", těch je logicky k dispozici 8 (4 vyhybky, každá má dvě možné polohy). Každý aspekt definuje 4 vlastnosti:
  1. seznam LEDek, které se mají rozsvítit
  2. seznam LEDek, které mají zhasnout
  3. seznam LEDek, které mají začít blikat
  4. seznam LEDek, které mají přestat blikat
Je tedy zřejmé, že lze vytvořit 4 kombinace:
  1. Světlo je zhasnuté a má vypnuté blikání - v takovém případě je prostě tma
  2. Světlo je rozsvícené a má vypnuté blikání - v takovém případě světlo svítí
  3. Světlo je zhasnuté a má zapnuté blikání - v takovém případě bude blikat "ve fázi" (všechna světla, která blikají ve fázi jsou ve stejný okamžik rozsvícená a ve stejný okamžik zhasnutá)
  4. Světlo je rozsvícené a má zapnuté blikání - v takovém případě bude blikat "v prot-ifázi" (když je světlo "ve fázi" rozsvícené, je světlo "v protifázi" zhasnuté)

Function description

Decoder will use at maximum 4 addresses for turnouts and will realize all signals on those addresses. Signals consist of lighting and blinking
During every light on and light off using "fade" effects, then slow lighting off look like vacuum bulbs. Setup of fade speed is general for all decoder.
Next is available blinking - time source for blinking is again same for all decoder, but you can use "in phase" and "opposite phase" blinking. It means, that it is possible to done semaphore with two same blinking lights, or semaphore with two "opposite" blinking lights = left -> right => left ...
Configuration of lights is done by "aspects". We have 8 aspects (4 turnouts, 2 direction each). Every aspect define 4 properties:
  1. List of lights you need to turn on
  2. List of lights you need to turn off
  3. List of lights you need to start blinking
  4. List of lights you need to stop blinking
It means, every light can be in one of 4 situations:
  1. Lighting is off, blinking is off - it mean dark
  2. Light is on, blinking is off - it mean light
  3. Light is off, blink is on - it mean "in phase" blinking (every lights in phase lighting in same time, and is off in same time)
  4. Light is on, blinking is on - it mean "opposite phase" blinking (when "in phase" light is on, "opposite phase" is off and vice versa)

Lists
SvětloLightL1L2L3L4L5   
HodnotaValue1248163264128

Seznam vznikne jako součet hodnot světel, kterých se daný aspetk týká. (uživatelé DCC programovače mohou využívat binární režim programování) List of lights is simple sum of values of light, may be affected by this aspect. (users of DCC programmer can use binary mode during programming)

CV Values
CV#CV#defaultmin-maxvýznammeaning
51311 (Roco 5-8, Lenz 1-4)0-63Primární adresa, spodní polovinaPrimary address, low half
 710-Verze (10 = verze 1.0)Version (10 means version 1.0)
 813 (0D hex)-ID VýrobceManufacturer ID
521900-7Primární adresa, horní polovinaPrimary address, high half
54129128 (bit 7)0/128konfigurace - 128 = dekodér příslušenstvíConfiguration - 128 = accessory decoder
544322010-50Fede (rychlost rozsvěcení, zhasínání)Fade (speed of lighting on and off)
5453340min CV32*2Rychlost blikání (odvozuje se od rychlosti fade)Blinking speed (Depend on fade speed)
5463410-1Příznaky (pokud je 1, je při zapnutí stav od posledního vypnutí)Config (1 mean - save outputs before switch off)
54735?0-31Seznam světel, která se mají rozsvítitList of lights to light onAspect 1
1+ (1A)
54836?0-31Seznam světel, která mají zhasnoutList of lights to light off
54937?0-31Seznam světel, která mají zčít blikatList of lights to blink on
55038?0-31Seznam světel, která mají vypnout blikáníList of lights to blink off
55139?0-31Seznam světel, která se mají rozsvítitList of lights to light onAspect 2
1- (1B)
55240?0-31Seznam světel, která mají zhasnoutList of lights to light off
55341?0-31Seznam světel, která mají zčít blikatList of lights to blink on
55442?0-31Seznam světel, která mají vypnout blikáníList of lights to blink off
55543?0-31Seznam světel, která se mají rozsvítitList of lights to light onAspect 3
2+ (2A)
55644?0-31Seznam světel, která mají zhasnoutList of lights to light off
55745?0-31Seznam světel, která mají zčít blikatList of lights to blink on
55846?0-31Seznam světel, která mají vypnout blikáníList of lights to blink off
55947?0-31Seznam světel, která se mají rozsvítitList of lights to light onAspect 4
2- (2B)
56048?0-31Seznam světel, která mají zhasnoutList of lights to light off
56149?0-31Seznam světel, která mají zčít blikatList of lights to blink on
56250?0-31Seznam světel, která mají vypnout blikáníList of lights to blink off
56351?0-31Seznam světel, která se mají rozsvítitList of lights to light onAspect 5
3+ (3A)
56452?0-31Seznam světel, která mají zhasnoutList of lights to light off
56553?0-31Seznam světel, která mají zčít blikatList of lights to blink on
56654?0-31Seznam světel, která mají vypnout blikáníList of lights to blink off
56755?0-31Seznam světel, která se mají rozsvítitList of lights to light onAspect 6
3- (3B)
56856?0-31Seznam světel, která mají zhasnoutList of lights to light off
56957?0-31Seznam světel, která mají zčít blikatList of lights to blink on
57058?0-31Seznam světel, která mají vypnout blikáníList of lights to blink off
57159?0-31Seznam světel, která se mají rozsvítitList of lights to light onAspect 7
4+ (4A)
57260?0-31Seznam světel, která mají zhasnoutList of lights to light off
57361?0-31Seznam světel, která mají zčít blikatList of lights to blink on
57462?0-31Seznam světel, která mají vypnout blikáníList of lights to blink off
57563?0-31Seznam světel, která se mají rozsvítitList of lights to light onAspect 8
4- (4B)
57664?0-31Seznam světel, která mají zhasnoutList of lights to light off
57765?0-31Seznam světel, která mají zčít blikatList of lights to blink on
57866?0-31Seznam světel, která mají vypnout blikáníList of lights to blink off
5796700-31Nastavení světel po zapnutíLights on after startup
58068160-31Nastavení blikání po zapnutíBlink on after startup

Příklady

Uvedeme si několik příkladů jak vytvořit běžně používané znaky.

Jako první příklad si zvolíme jednoduchá blikající světla. Budou tvořena světli L1 a L2, budou reagovat na první adresu a to tak, že se zapnou při jednom směru a vypnou při druhém.

Examples

We can make few examples, how to configure few situations usual for Czech railways.

As a first example we can describe simple blinking lights. They will consist of L1 and L2 will react to first address and will turn on in one direction and turn off in opposite direction.
Budeme tedy používat pouze první (CV35-CV38) a druhý (CV39-CV42) aspekt.

První aspekt (zapnutí světel) bude tedy nastaven:
  • CV35 = 1 (první světlo rozsvítit)
  • CV36 = 2 (druhé světlo zhasnout (jen pro jistotu))
  • CV37 = 1+2 = 3 (první i druhé světlo bliká, první je v protifázi, protože "svítí", druhé je "ve fázi")
  • CV38 = 0
A druhý aspekt (vypnutí) bude nastaven:
  • CV39 = 0 (nic se nerozsvěcí)
  • CV40 = 1+2 = 3 (první i druhé světlo zhasnout (stačilo by první))
  • CV41 = 0 (nic nebliká)
  • CV42 = 1+2 = 3 (vypnout blikání u prvního i druhého světla)


Druhý příklad bude obdobný, pouze si přidáme modré světlo L3, které bude blikat, když neblikají světla červená.
We will use first (CV35-CV38) and second (CV39-CV42) aspect.

First aspect (turn all on) will be:
  • CV35 = 1 (turn on first light)
  • CV36 = 2 (turn off second light (only for sure))
  • CV37 = 1+2 = 3 (turn on blinking on first and second light, first in opposite phase, because is "on", second is "in phase")
  • CV38 = 0
And second aspect (turn off) will be:
  • CV39 = 0 (nothing to turn on)
  • CV40 = 1+2 = 3 (turn off first and second light (first will be enough))
  • CV41 = 0 (nothing to blink)
  • CV42 = 1+2 = 3 (turn off blink on first and second light)


Second example will be similar; we will only add third blue light (L3), which will blink when red lights are off.
->
Budeme opět používat pouze první (CV35-CV38) a druhý (CV39-CV42) aspekt.

První aspekt (zapnutí červených světel) bude tedy nastaven:
  • CV35 = 1 (první světlo rozsvítit)
  • CV36 = 2+4=6 (druhé a modré světlo zhasnout (jen pro jistotu))
  • CV37 = 1+2 = 3 (první i druhé světlo bliká, první je v protifázi, protože "svítí", druhé je "ve fázi")
  • CV38 = 4 (modré světlo nebliká)
A druhý aspekt (zapnutí modrého světla) bude nastaven:
  • CV39 = 0 (nic se nerozsvěcí)
  • CV40 = 1+2+4 = 7 (první druhé i třetí světlo zhasnout (stačilo by první))
  • CV41 = 4 (třetí světlo bliká)
  • CV42 = 1+2 = 3 (vypnout blikání u prvního i druhého světla)


Poslední příklad bude klasické vjezdové návěstidlo s pěti světly, na kterém vytvoříme 8 znaků. (podle LokoPin)
We will use again first (CV35-CV38) and second (CV39-CV42) aspect.

First aspect (turn red on) will be:
  • CV35 = 1 (turn on first light)
  • CV36 = 2+4 = 6 (turn off second and third light (only for sure))
  • CV37 = 1+2 = 3 (turn on blinking on first and second light, first in opposite phase, because is "on", second is "in phase")
  • CV38 = 4 (blue light not blinking)
And second aspect (turn red off, blue on) will be:
  • CV39 = 0 (nothing to turn on)
  • CV40 = 1+2+4 = 7 (turn off first, second and third light (first will be enough))
  • CV41 = 4 (blue light blinking)
  • CV42 = 1+2 = 3 (turn off blink on first and second light)


Last one will be traditional entrance light with five lights, we will create 8 signals. (inspired by LokoPin)
Stůj Volno (průjezd přímo) Vjezd odbočkou Vjezd přímo Průjezd odbočkou, pak odbočkou Průjezd odbočkou, pak přímo Průjezd přímo, pak odbočkou Přivolávací návěst
Využít musíme všechny aspekty, nastavení si uvedeme v tabulce We must use all aspects, settings is in following table

CV Values
1A1B2A2B3A3B4A4B
CV35=04CV39=02CV43=17CV47=01CV51=17CV55=18CV59=00CV63=04
CV36=27CV40=29CV44=14CV48=30CV52=14CV56=13CV60=31CV64=27
CV37=00CV41=00CV45=01CV49=00CV53=01CV57=00CV61=01CV65=08
CV38=31CV42=31CV46=30CV50=31CV54=30CV58=31CV62=30CV66=19

Ke stažení jsou 2 soubory, oba se chovají stejně, jen jeden je pro ledky se společnou zemí (V-) a druhý (označený _inv) je pro ledky se společným kladným pólem (V+).

Jejich zásadní nedostatek je v tom, že se pracně programují, protože dekodér není schopen vytvořit dostatečnou zátěžovou špičku a proto dekodér nelze číst.
Tuto vlastnost jsem odstranil u poslední hardwarové verze dekodéru, který využívá připojení na základnovou stanici. Je důležité si pamatovat, že dekodér při běžném provozu nelze používat v základnové stanici s možností programování. U základen, které to umožňují je potřeba vytáhnout programovací propojku, nebo použít základnu zcela bez programování.
You can download two versions of file, both are same, one is for leds with common ground (V-) and second (marked as _inv) is for leds with common plus (V+)

They have big disadvantage during programming. Decoder is not able to create enough current peaks and then decoder cannot be read.
I solved this problem in last hardware version of decoder. That version using connection to base station. Do not forget, that decoder cannot be used during normal operation in base station with programming facility. Some base stations allow you to switch programming off, and then must be switched off, or you must operate it in base without programming.


Download: dcc5semaf.zip