Jindra Fučík

DCC Programovač

Oprášil jsem jeden velice starý projekt realizovaný Mike P. Boltonem a Johnem G.Eato pod hlavičkou MERG.
Jedná se o velice jednoduchý nástroj pro čtení a programování DCC dekodérů. Jeho zásadní předností je, že nástroj je velice skladný a lze jej provozovat samostatně bez nutnosti spouštět kolejiště a propojovat jeho komponenty. Určitý přínos má také pro majitele jednoduchých setů typu Roco, které neumožňují čtení hodnot CV a nebo setů, které používají například sběrnici XpressNet ve verzi 3.0 nebo starší a nemají tak možnost číst/psát CV s vysokým číslem.

V současné době existují 2 verze programovače:

DCC Programmer

I have re-opened one very old project done by Mike P. Bolton and John G.Eato in a name of MERG.
It is very easy tool for reading and programming DCC decoders. The basic benefit is, that it is standalone compact tool and then can be used without powering all layout or connecting parts of DCC set. Here is also added value for owners of easy sets like ROCO, which not allow to read values of CV; or for a users of sets with XpressNet in version 3.0 or older and can not read/write highest CVs

I have now 2 hardware versions:

Starší verze

Tato verze vznikla složením dvou základních bloků, procesoru s uživatelským rozhraním (J.G.Eato) a DCC budičem a detektorem přetížení (M. P. Bolton)
Celé zařízení je řízeno procesorem PIC16F628A (předchozí verze byla řízena PIC16F84, ale v současné době se tento procesor těžko kupuje). Pro zobrazení se používá znakový display s vlastním řadičem HD44780. Display je provozován ve čtyř bitovém režimu, takže je polovina datových vodičů připojena k zemi. Dále procesor ovládá maticovou klávesnici se 4x4 tlačítky. S výhodou lze použít klávesnici ze starého stolního telefonu. Pokud máte klávesnici jen 3x4, je možné poslední sloupec doplnit běžnými tlačítky. K procesoru je také připojen bzučák (nikoli reproduktor), který slouží pro upozornění na chybu a nebo správné naprogramování. Není nikterak důležitý a není nutné jej osazovat.
Druhá část zařízení je založená na obvodu pro řízení motorů - H-Bridge L293E (obvod L293D nelze použít), který je použit pro vlastní tvorbu DCC signálu. Pro detekci přetížení a rozpoznávání ACK jsou použity operační zesilovače LM339N, tento obvod obsahuje 4 operační zesilovače. Dva jsou použity pro tvarování signálu (C a D), jeden pro detekci přetížení (B) a jeden pro rozpoznávání ACK (A). Pro detekci přetížení je použit odporový dělič R8 a R9, jehož hodnota se porovnává s hodnotou R21 a vnitřním odporem dekodéru. Jednoduchou matematikou si lze odvodit pracovní poměr. Pro hodnoty ve schématu je přetížení vyhodnocováno při proudech mírně nad 250mA. Pokud by tento proud nebyl dostatečný, lze hodnotu R8 zmenšit a tím dostaneme větší proudovou zatížitelnost.
Hodnota R8 by neměla být menší než 15K, pak by docházelo k přetěžování součástek (pozor, obvod L293E nemá dostatečné chlazení). Doporučil bych nepoužívat odpor menší než 33K pokud jednoznačně nevíte co děláte.
Pro detekci ACK je použit oddělovací kondenzátor C6, aby docházelo k vyhodnocování pouze změn. Dále je pak použit podobný dělič z rezistorů R10 a R11. U tohoto děliče není nutné provádět žádné ladění, je nastaven na 60mA což odpovídá DCC normám.

Older version

This version is build from two basic blocks; processor with user interface (J.G.Eato) and DCC amplifier and ACK/overload detector (Mike P Bolton)
All device is driven by PIC16F628A microprocessor (previous version was driven by PIC15F84, but this processor is now obsolete). For display information is used character LCD display with driver type HD44780. Display is used in four bit mode, and then half of data lines are unused and connected to ground. Next connected device is matrix keyboard 4x4 buttons. It is also possible to use keyboard from old desk phone. Once you have keyboard with 3x4 buttons, you can extend last column by usual buttons. Here is also connected beeper [AWD] (not a repro), used for warning about errors od good programming. This beeper is no crucial and is no necessary to use it.
Second part of device is based on motor driver - H-Bridge L293E (it is not possible to use L293D), which is used to creating of DCC signal. For detection of overload and detection of ACK pulse is used analog comparators LM339N. This chip contains 4 comparators. Two are used for DCC signal creation (C and D), one for overload detection (B), and one for ACK detection (A). For overload detection is used resistors comparator with resistors R8 and R9, which value is compared with value of R21 and internal resistance of decoder. Simple mathematic can be used for calculate working current. Values used in schematics allow detecting overload around 250mA. When it is not enough, you can decrease value of R8, then you can use more current.
Value of R8 should be bigger than 15K otherwise you will overload used components. (be careful, chip L293E have not enough heat silk) I can not recommend you to use values lower than 33K if you exactly not know what are you doing.
For ACK detection is used separating capacitor C6 to detect only differences. Next is used similar comparator with resistors R10 and R11. It is no necessary to fine-tune this comparator, it is configured to 60mA what is defined by DCC specification.

all in one .zip
NamePartRemark
B1B250C1500small size 1,5A
C14700uF/25V...2200uF
C2, C4, C8, C12, C13100n 
C347u/25V 
C5, C1110u/16V 
C6220n/25V 
C101u/16V 
C14, C1522p 
D51N4148 
D6, D7, D8, D9UF4002UF4003/UF4007
D101N40041N4007
IC1PIC16F628APIC16F84A is obsolete
IC2LM339 
IC3L293Ev CZ kupovat u ps electronic
IC47805 
IC5LM317+ chladič / heat silk
IC6DS1233 
JP1-JP4, J2, J4kolíkové lišty 2,54mmpin header 2,54mm
J1, J3ARK300V-2P2 pin 5,0mm
R1220R 
R2, R33K3 
R4, R11, R161k 
R5, R7, R12100K 
R633K 
R847K 
R9820R 
R10330K 
R13470K 
R14, R17, R18, R19, R2010K 
R15, R272K2 
R210R47/5W 
R22, R23, R24, R25, R264K7 
R2826022R - text new version
RV11K trimmer PT10 vertical 
RV210K trimmer PT10 vertical 
T1BC337 
X1krystal 4MHzcrystal 4MHz
-znakový LDC display 16x2 (20x2) typu HD44780character LCD display 16x2 or 20x2 type HD44789
-maticová klávesnice 4x4 nebo 3x4 + tlačítkamatrix keyboard 4x4 or 3x4 + buttons
-LED zelená a žlutá do JP2 a JP1green and yellow LED into JP2 and JP1
-bzučák 5V (já používám KXG0905C) do JP35V beeper (I'm using KXG0905C) into JP3
Následující obrázky ukazují jak je možné připojit LCD display s podsvícením (16 vývodů) na deseti vývodový konektor a jak lze připojit u nás maloobchodně dostupnou klávesnici. Také ukazuje sestavené zařízení s označením obvodů které se mohou ohřívat a popisem použitých trimrů. Following pictures show, how is possible to connect LCD display with backlight (16 pins) to ten pin header; and how is possible to connect keyboard from Czech markets. Also show complete device board with marked chips which can be hot and describing used trimmers.

Novější verze

Při slučování schémat došlo k jedné zásadní chybě, obě poloviny byly prostě spojeny bez ohledu na to, že došlo k propojení dvou signálů které propojeny být nemají. Konkrétně výstupy ACK a přetížení (IC2B/1 a IC2A/2) byly propojeny s výstupy klávesnice pro první a druhý řádek.Také došlo k paralelnímu propojení R6+R22 a R14+R23 což nebylo cílem.
To v zásadě není velký problém, do té doby, dokud se programovač nepokouší současně číst klávesnici a zároveň generovat DCC signál.
V této verzi již byla tato chyba napravena, došlo k oddělení klávesnice pomocí diod (D1 a D2) a výstupů pomocí tranzistorů (T2 a T3)

Také jsem zjistil, že je pro mnoho lidí matoucí použití deseti pinového konektoru pro čtrnácti pinový display, proto jsem doplnil i tyto piny.
Pokud použijete LCD display s diodovým podsvícením (má 16 pinů), pak je možné podsvícení připojit přímo na display k jeho napájení a nebo použít vývody pro "Power LED", s tím, že většina LCD používá pro podsvícení 4,2V/80mA, takže je nutné nahradit rezistor R28 hodnotou 22R, nebo jinou podle katalogu k display. (Pozor, některé displaye mají podsvíceni [15 a 16] na začátku a některé na konci konektoru)

Newer version

During MERGe of two schematics was done one particular mistake. Both parts was simple placed together without checking input connections, then output from keyboard was connected with outputs from IC2A/2 and IC2B/1. Also resistors R6+R22 and R14+R23 were connected in parallel.
It is in a principle not too big problem, until programmer will try to read keyboard and generate DCC signal.
In this version was this mistake repaired. Signal from keyboard was separated by diodes (D1 and D2) and outputs are separated by transistors (T2 and T3)

I also recognized, that for more people is misunderstanding using of 10min header for 14pin display, then I extend header on PCB
When you will use LCD display with backlight (16 pins), you can connect backlight to LCD power pins, or it is possible to use "power LED" header. In this case check powering characteristic of your display. LCD usually consumes 4,2V/80mA, and then you should replace R28 with value 22R or different by catalogue. (careful, some displays have backlight pins [15,16] in front of header and some at the end)

all in one .zip
NamePartRemark
B1B250C1500small size 1,5A
C14700uF/25V...2200uF
C2, C4, C8, C12, C13100n 
C347u/25V 
C5, C1110u/16V 
C6220n/25V 
C101u/16V 
C14, C1522p 
D1, D2, D51N4148 
D6, D7, D8, D9UF4002UF4003/UF4007
D101N40041N4007
IC1PIC16F628APIC16F84A is obsolete
IC2LM339 
IC3L293Ev CZ kupovat u ps electronic
IC47805 
IC5LM317+ chladič / heat silk
IC6DS1233 
JP1-JP4, J2, J4kolíkové lišty 2,54mmpin header 2,54mm
J1, J3ARK300V-3P3 pin 5,0mm
R1220R 
R2, R33K3 
R4, R11, R16, R22, R231k 
R5, R7, R12100K 
R633K 
R847K 
R9820R 
R10330K 
R13470K 
R14, R17, R18, R19, R2010K 
R15, R272K2 
R210R47/5W 
R264K7 
R2826022R - see text
RN14x4K7 resistor net A type 
RV11K trimmer PT10 vertical 
RV210K trimmer PT10 vertical 
T1BC337 
T2, T3BC327 
X1krystal 4MHzcrystal 4Mhz
-znakový LDC display 16x2 (20x2) typu HD44780character LCD display 16x2 or 20x2 type HD44789
-maticová klávesnice 4x4 nebo 3x4 + tlačítkamatrix keyboard 4x4 or 3x4 + buttons
-LED zelená a žlutá do JP2 a JP1green and yellow LED into JP2 and JP1
-bzučák 5V (já používám KXG0905C) do JP35V beeper (I'm using KXG0905C) into JP3

Software a návod k práci

Software je velice jednoduchý a jeho ovládání je velmi intuitivní. Nejprve je dobré si popsat klávesnici
1
2
3
Zápis
4
5
6
Čtení
7
8
9
Mód
 Esc   0   Del Enter

Po zapnutí se programovač ohlásí takovouto úvodní obrazovkou:

Software and working instructions

Software is intuitive and easy to use. At the begin is good to label up keyboard
1
2
3
Write
4
5
6
Read
7
8
9
Mode
 Esc   0   Del Enter

After powering the programmer will show following welcome screen:
Nejprve je dobré si pomocí klávesy [Mód] zvolit jak bude programovač komunikovat s dekodérem. K dispozici jsou módy "přímý" a "stránkový". Pro novější dekodéry doporučuji používat výhradně přímý režim, stránkový je vhodný pro staré dekodéry.
At begin is good to switch mode used for communication with decoder by key [Mode]. You can chose between "direct mode" and "paged mode". I can recommend you to use direct mode, only for really old decoders use paged mode.
Dále je dobré si přečíst hodnotu CV, který chceme modifikovat. Stiskneme klávesu [Čtení], programovač nás vyzve k zadání čísla CV, které chceme číst.
Next is good to read value of CV, you are planning to modify. Push the [Read] button, then programmer will ask you for CV number you want to read
Po zadání a stisku [Enter] dojde k přečtení hodnoty a jejímu zobrazení.
Lze přečíst kterýkoli z CV v rozsahu 1-1024. Pokud při zadávání CV uděláme chybu, lze jí opravit klávesou [Del].
After typing and pushing [Enter] the programmer will read value and display it.
It is possible to read any of CV in range of 1-1024. If you will do mistake, you can use [Del] button to repair it.
Poslední krok je vlastní programování [Zápis]. Po zadání čísla CV, které chceme programovat a stisku [Enter]
The last step is programming [Write]. After type of CV number you want to modify and pressing [Enter]
zadáme hodnotu, kterou chceme programovat. Při zadávání hodnoty lze pomocí klávesy [Mód] přepínat zadání mezi běžným desítkovým a nebo bitovým.

Pokud zadáváme hodnotu pro CV17 (dlouhá adresa), lze zadat hodnotu až do 9999, která je pak automaticky rozložena a zapsána do CV17 a CV18.
the programmer will ask you for a value you want to write. During typing a value you can use key [Mode] to switch between usual decimal mode or bit mode.

When you programming CV17 (long address), you can type a value to 9999. The value is automatically split and written into CV17 and CV18.


Pokud programování proběhne, zobrazí se na display potvrzení.
When programming is done, the display will show OK.
Pomocí klávesy [Esc] lze kdykoli přerušit zadávání a navrátit programovač do počátečního stavu. (zvolený mód se nezmění)

Při čtení a programování může dojít k několika druhům chyb:
Přetížení - dekodér v klidovém stavu odebírá více než 250mA a to je v rozporu s normou. V textu lze najít, jak je tato hodnota definovaná.
Není ACK - dekodér není schopen vytvořit ACK puls, který je nutný pro čtení hodnot. Tento puls dekodér vytváří za pomoci motoru v lokomotivě. Pokud je to možné, použijte jiný motor, nebo provádějte programování v jiné lokomotivě.
Není přímý - dekodér pravděpodobně není schopen reagovat na příkazy pro programování v přímém servisním režimu. Je možné použít stránkový režim. (již deset let jsem neviděl dekodér, který neovládá přímý režim)
By using key [Esc] you can at any time stop any action and return to basic screen. (selected mode is not changed)

During read or write can heppens following errors:
Overload - decoder using more than 250mA during programming and it is not allowed by NMRA standard. In text you can find how this value is defined.
No ACK - decoder is not able to create ACK pulse, which is necessary for reading values. This pulse decoder usually creating by using engine in locomotive. If it is possible, use different engine or done a programming in different locomotive.
No direct - decoder is not able to react to commands in direct service mode. It is possible to use paged mode. (I have not seen more than ten years decoder not supporting direct mode)

Download: HEX files