Complete Guide to DCC Turnout and Accessory Addressing with DCC-EX and ThrottleCard
Learn how DCC turnout and accessory addressing works — from decoder addresses and subaddresses to linear addressing — and see how ThrottleCard with DCC-EX makes setup and control simple.
If you’ve ever been confused by DCC accessory addressing — wondering why your turnout decoder manual says “address 5, output 3” but your system wants “address 21” — you’re not alone. DCC accessory addressing can be surprisingly complex, with multiple ways to describe the same thing.
With ThrottleCard’s latest update, controlling turnouts and accessories has never been easier. But first, let’s demystify how DCC accessory addressing actually works.
Related Guides:
- Accessory Decoder CV Programming Guide — Comprehensive guide to configuring accessory decoders
- General CV Programming Guide — For locomotive decoder CV programming
- ThrottleCard User Manual — Full documentation for using ThrottleCard
What Are DCC Accessory Decoders?
Unlike locomotive decoders that control motors and functions, accessory decoders control stationary devices on your layout:
- Turnouts/Points – Switch track routes
- Signals – Control aspect lights
- Uncouplers – Operate magnetic or servo uncouplers
- Lights – Structure and scene lighting
- Animated accessories – Gates, crossing arms, etc.
Each accessory decoder typically controls 4 outputs (some have 8 or more). Understanding how to address these outputs is key to controlling your layout.
The Two Addressing Systems
DCC accessories use a two-part addressing system:
Decoder Address and Subaddress
This is how the hardware thinks about addressing:
- Decoder Address – The base address of the decoder itself (1–511)
- Subaddress – Which output on that decoder (0–3 for standard 4-output decoders)
Example:
Your turnout is connected to decoder address 5, output 3. In DCC terms:
- Decoder Address = 5
- Subaddress = 2 (outputs are numbered 0–3, so “output 3” = subaddress 2)
This makes sense from a hardware perspective — you’re telling the system which decoder and which output on that decoder to activate.
Linear Address
To simplify things, the NMRA standard defines a linear address — a single number from 1 to 2044 that represents all possible decoder/subaddress combinations.
The conversion formula is:
Linear Address = (Decoder Address - 1) × 4 + Subaddress + 1
Example:
- Decoder Address 5, Subaddress 2
- Linear Address = (5 - 1) × 4 + 2 + 1 = 19
How Different Systems Handle Addressing
JMRI (with EX-CommandStation)
In JMRI, when connected to EX-CommandStation (DCC-EX), each turnout has a Hardware Address that equals the Turnout ID stored in the Base Station (0–32767). JMRI references that ID, and the Base Station maps it to the DCC accessory address/subaddress.
Workflow: Add a turnout in the JMRI Turnout Table (select the DCC++/DCC-EX connection), enter the ID as the Hardware Address, give it a User Name, and save.
WiThrottle Protocol
WiThrottle clients (ThrottleCard in WiThrottle mode, Engine Driver, etc.) list the turnouts defined on the server (JMRI or DCC-EX), showing their names and states. Clients can toggle them but cannot create new ones; add those on the server first.
DCC-EX
DCC-EX lets you define a DCC accessory turnout using:
-
Decoder Address + Subaddress
<T id DCC addr subaddr>
Example:<T 19 DCC 5 2>defines turnout ID 19 as decoder 5, subaddress 2 -
Linear Address
<T id DCC linearAddr>
Example:<T 19 DCC 19>defines turnout ID 19 as linear address 19
In both cases, you assign an independent ID (0–32767) that you’ll use later to operate the turnout. The ID is not the same as the DCC address—it’s just your handle. However, in both of these examples, turnout ID 19 corresponds to the linear address 19 as a convention for clear identification.
Real-World Example: Setting Up a Turnout
Let’s say you just installed a Digitrax DS64 stationary decoder at decoder address 10, and you want to control the turnout on output 3.
Step 1: Determine the Address
- Decoder Address = 10
- Subaddress = 2 (output 3 is subaddress 2)
- Linear Address = (10 - 1) × 4 + 2 + 1 = 39
Step 2: Define in Your System
With JMRI:
- Open the Turnout Table
- Create a new turnout with Hardware Address
39 - Give it a user name like “Mainline Crossover”
- Save the configuration
With DCC-EX:
- Send the define command:
<T 39 DCC 10 2>
Or use linear address:<T 39 DCC 39> - Save to EEPROM:
<E>
With ThrottleCard (DCC-EX mode):
- Open the Turnouts screen
- Tap “Add Turnout”
- Enter decoder address: 10
- Enter subaddress: 2
- ThrottleCard automatically calculates linear address 39 and sends the define command
- Give it a friendly name and save
Note: The throw/close command uses the turnout ID you assigned (here, 39). If you pick a different ID (say 100) for linear address 39, you’d send <T 100 1> to throw.
Common Pitfalls and Solutions
Pitfall 1: Mixing Up Subaddress and Output Number
Your decoder manual says “Output 3” but DCC uses subaddress 2 (because subaddresses are zero-indexed: 0, 1, 2, 3).
Solution: Always subtract 1 from the physical output number to get the subaddress.
Pitfall 2: Using the Wrong Address Format
You tried to control linear address 19 but your system expected decoder address 5, subaddress 2.
Solution: Know which format your system uses. JMRI uses IDs (mapped to DCC addresses). DCC-EX supports both formats when defining turnouts.
Pitfall 3: Forgetting to Save Configuration
You defined turnouts in DCC-EX but they disappeared after restarting.
Solution: Always send <E> to save definitions to EEPROM, or they’ll be lost on power cycle.
Pitfall 4: WiThrottle Can’t Create Turnouts
Your WiThrottle-based throttle can see turnouts from JMRI but can’t add new ones.
Solution: This is by design. WiThrottle protocol doesn’t support creating turnouts remotely. You must define them in JMRI or DCC-EX first. However, with ThrottleCard and DCC-EX, you can create turnouts directly from the app!
Why ThrottleCard Makes This Easier
With WiThrottle (JMRI)
- See all defined turnouts from your JMRI setup
- Control turnouts with a clean, visual interface
- Customize names and inversion locally in the app
- Add notes or labels to remember what each turnout does
With DCC-EX (The Game-Changer)
- Create turnouts directly — no need for a computer or JMRI
- Enter decoder address and subaddress in user-friendly fields
- Automatic linear address calculation — ThrottleCard does the math
- Define and control in one place — seamless workflow
- Persistent storage — turnouts saved to your DCC-EX command station
Example Workflow with ThrottleCard + DCC-EX
- Install your turnout decoder and note the decoder address (e.g., address 8)
- Open ThrottleCard and connect to your DCC-EX command station
- Navigate to Turnouts and tap “Add Turnout”
- Enter decoder address: 8
- Enter subaddress: 0-3 (for outputs 1-4)
- ThrottleCard shows: “Linear Address: 29” (automatically calculated)
- Give it a name: “Yard Lead Turnout”
- Tap Save — ThrottleCard sends
<T 29 DCC 8 0>and<E>to DCC-EX - Immediately control the turnout from the same screen
No command-line syntax. No manual calculations. No separate software. Just straightforward turnout control.
Address Planning Tips
As your layout grows, planning your accessory addresses becomes important:
Group by Location
- Decoder addresses 1-10: Yard area
- Decoder addresses 11-20: Main line
- Decoder addresses 21-30: Branch line
Use Sequential IDs
When using DCC-EX with custom IDs, keep them sequential and logical:
- Turnouts 1-20
- Signals 21-40
- Uncouplers 41-50
Document Everything
Whether in a spreadsheet or a notebook:
- Physical location
- Decoder address and subaddress
- Linear address
- Friendly name
- What it controls
ThrottleCard helps by letting you add custom names that stick with each turnout, even across reconnections.
Advanced: Understanding the Protocol Layer
When you send a command to throw turnout at decoder address 5, subaddress 2:
- ThrottleCard calculates linear address 19
- DCC-EX receives
<T 19 1>(throw) - Command station generates a DCC packet:
- Preamble bits
- Accessory address byte (derived from decoder address 5)
- Data byte (subaddress 2 + activate bit)
- Error detection byte
- Decoder 5 recognizes its address
- Output 3 (subaddress 2) activates
- Turnout motor throws the points
All of this happens in milliseconds, and ThrottleCard abstracts away the complexity.
Setting Decoder Addresses with CVs
To configure your accessory decoder’s address, you’ll need to program CV1 (and sometimes CV9 for extended addressing):
CV1 – Base Decoder Address
Formula: CV1 = Decoder Address - 1
Example: To set decoder address 10:
- CV1 = 9
Range:
- 0–63 for standard addressing (decoder addresses 1–64)
- 0–255 for extended addressing with CV9
CV9 – Extended Addressing
Some decoders support extended addressing to access addresses beyond 64:
Formula: Base Address = (CV9 × 64) + CV1 + 1
Example: For decoder address 150:
- CV9 = 2
- CV1 = 21
- Check: (2 × 64) + 21 + 1 = 150 ✓
For most users with standard 4-output decoders, keep CV9 = 0 and use CV1 = 0–63.
Programming Decoder Addresses
You can program addressing in two ways:
Option 1: Programming Track (Service Mode)
- Place decoder on programming track (remove locomotives)
- ThrottleCard: CV Programming → Programming Track → Write CV1 = [value]
- DCC-EX:
<W 1 9>(sets CV1 to 9, decoder address 10) - JMRI: DecoderPro → Service Mode Programmer
- Power cycle the decoder for the change to take effect
Option 2: Program on Main (PoM)
- ThrottleCard: CV Programming → Program on Main → Enter current linear address → Write CV1 = [value]
- DCC-EX:
<w [linearAddr] 1 9>(write CV1 to decoder at linear address) - Power cycle required for address change
💡 Pro Tip: Always verify your decoder’s current address before trying to change it. If you lose track of the address, you may need to reset the decoder to factory defaults.
Need More CV Programming Help?
Addressing is just the beginning! Accessory decoders have many other important CVs for:
- Pulse duration (prevent motor burnout!)
- Output modes (continuous vs. pulsed)
- Servo endpoints (for smooth turnout operation)
- Timing and delays (for route automation)
- LED brightness (for signals)
For comprehensive CV programming instructions, see our Complete Guide to Accessory Decoder CV Programming.
Quick Reference: Address Conversion
Need to convert between formats? Here are the formulas:
Decoder Address + Subaddress → Linear Address
Linear = (Decoder - 1) × 4 + Subaddress + 1
Linear Address → Decoder Address + Subaddress
Decoder = ((Linear - 1) ÷ 4) + 1
Subaddress = (Linear - 1) mod 4
Or just use ThrottleCard — it handles all conversions automatically and shows you both formats.
Summary: Three Ways to Control Turnouts
| Method | Addressing | Create Turnouts | Best For |
|---|---|---|---|
| JMRI + WiThrottle | Uses IDs mapped to DCC addresses | Only in JMRI | Complex layouts, automation, multiple throttles |
| DCC-EX Direct | Decoder + subaddress OR linear | Via command line | Advanced users, custom scripting |
| ThrottleCard + DCC-EX | Decoder + subaddress (UI), linear (automatic) | Yes, in the app | Ease of use, mobile control, no PC required |
Get Started with ThrottleCard
Ready to take control of your layout’s turnouts? ThrottleCard makes it simple:
✅ Connect to JMRI via WiThrottle and control all your defined turnouts
✅ Connect to DCC-EX and create turnouts directly from your phone or tablet
✅ No more address confusion — enter decoder address and subaddress, we handle the rest
✅ Beautiful interface — see your turnout states at a glance
✅ Customize names and settings — make your layout truly yours
Download ThrottleCard on the App Store
ThrottleCard is built by model railroaders who understand the frustration of complex addressing schemes. We’ve designed the app to make turnout control as simple as it should be — so you can focus on running trains, not decoding addresses.