Home Blog Download

ThrottleCard Blog

Home / Blog / Complete Guide to DCC Turnout and Accessory Addressing with DCC-EX and ThrottleCard

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.

November 1, 2025
ThrottleCard Blog

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:


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:

  1. Decoder Address + Subaddress
    <T id DCC addr subaddr>
    Example: <T 19 DCC 5 2> defines turnout ID 19 as decoder 5, subaddress 2

  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:

  1. Open the Turnout Table
  2. Create a new turnout with Hardware Address 39
  3. Give it a user name like “Mainline Crossover”
  4. Save the configuration

With DCC-EX:

  1. Send the define command: <T 39 DCC 10 2>
    Or use linear address: <T 39 DCC 39>
  2. Save to EEPROM: <E>

With ThrottleCard (DCC-EX mode):

  1. Open the Turnouts screen
  2. Tap “Add Turnout”
  3. Enter decoder address: 10
  4. Enter subaddress: 2
  5. ThrottleCard automatically calculates linear address 39 and sends the define command
  6. 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

  1. Install your turnout decoder and note the decoder address (e.g., address 8)
  2. Open ThrottleCard and connect to your DCC-EX command station
  3. Navigate to Turnouts and tap “Add Turnout”
  4. Enter decoder address: 8
  5. Enter subaddress: 0-3 (for outputs 1-4)
  6. ThrottleCard shows: “Linear Address: 29” (automatically calculated)
  7. Give it a name: “Yard Lead Turnout”
  8. Tap Save — ThrottleCard sends <T 29 DCC 8 0> and <E> to DCC-EX
  9. 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:

  1. ThrottleCard calculates linear address 19
  2. DCC-EX receives <T 19 1> (throw)
  3. 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
  4. Decoder 5 recognizes its address
  5. Output 3 (subaddress 2) activates
  6. 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)

  1. Place decoder on programming track (remove locomotives)
  2. ThrottleCard: CV Programming → Programming Track → Write CV1 = [value]
  3. DCC-EX: <W 1 9> (sets CV1 to 9, decoder address 10)
  4. JMRI: DecoderPro → Service Mode Programmer
  5. Power cycle the decoder for the change to take effect

Option 2: Program on Main (PoM)

  1. ThrottleCard: CV Programming → Program on Main → Enter current linear address → Write CV1 = [value]
  2. DCC-EX: <w [linearAddr] 1 9> (write CV1 to decoder at linear address)
  3. 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

MethodAddressingCreate TurnoutsBest For
JMRI + WiThrottleUses IDs mapped to DCC addressesOnly in JMRIComplex layouts, automation, multiple throttles
DCC-EX DirectDecoder + subaddress OR linearVia command lineAdvanced users, custom scripting
ThrottleCard + DCC-EXDecoder + subaddress (UI), linear (automatic)Yes, in the appEase 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.

Back to Blog

Stay Updated

Join our community of model railroad enthusiasts and get exclusive updates, tips, and early access to new features.