This is only a preview of the July 2026 issue of Silicon Chip. You can view 37 of the 104 pages in the full issue, including the advertisments. For full access, purchase the issue for $10.00 or subscribe for access to the latest issues. Items relevant to "Adjustable Ultrasonic Cleaner":
Items relevant to "Phenomenal Pinball Machine, Part 2":
Items relevant to "DCC Accessory Decoders":
Items relevant to "I2C Controller":
Purchase a printed copy of this issue for $14.00. |
By Tim Blythman
μDCC Decoder
Accessory Decoder
I2C Controller
DCC Accessory
Decoders
Destination Display
Our previous DCC (Digital Command Control) projects can control multiple trains in a model
railway, but what about fixed devices such as points (turnouts or switches) and signals? You need
Image source: https://unsplash.com/photos/
an accessory decoder; we describe two suitable circuits.
a-model-train-set-with-a-red-caboose-iP9kBOECD2U
W
e have previously published points
motor controllers and signal controllers, including a design that
interfaces with servo motors – see
Circuit Notebook, December 2020
(siliconchip.au/Article/14682).
Les Kerr’s past designs include a
semaphore signal operated by a servo
motor from April 2022 (siliconchip.
au/Article/15273) and a points motor
controller for snap-type motors in the
February 2024 issue (siliconchip.au/
Article/16132).
A DCC decoder that can interface
with points motors and servo motors
allows these devices to be integrated
into a DCC system. Let’s have a quick
look at the types of accessory devices
that might be found on a model railway and how our Accessory Decoders can work with them. We’ll assume
you have some experience with model
railways.
Points motors
The most common points motors
fall into two main categories. The
first is a solenoid or snap-type motor,
where the mechanism is actuated by
one or more coils. Peco-brand motors,
as used by Les, are common and have
two coils: a pulse on one coil sets the
points for the straight, while a pulse
on the other sets the points for the
curved track.
Other designs have one coil and
depend on reversing its drive polarity to change the points. It is possible
to convert between different arrangements with cleverly connected diodes.
The snap-type motors may come with
two, three or four wiring connections.
DCC PROJECT KITS
Snap-type Accessory Decoder (SC7685, $40)
includes the PCB and all onboard parts, including the electrolytic capacitor
Servo-type Accessory Decoder (SC7686, $40)
includes the PCB and all required onboard parts
I2C Controller (SC7690, $30)
includes the PCB and all other parts
70
Silicon Chip
Australia's electronics magazine
Another type is known as a slow-
motion or stall motor. These are simply
brushed DC motors driving a gearbox
to slowly move a linkage, and are thus
more like their full-size counterparts.
As the name suggests, the motors simply stall at their endpoints if they are
continuously driven.
Better units are designed to handle continuous stalling and may have
extra dry switch contacts to provide
feedback or control other devices,
such as signals. As you might expect,
the current requirements for these
motors are quite different, with stall
motors needing perhaps tens of milliamperes, while the snap-type motors
might draw a few amps for a fraction
of a second.
Our Snap-type Accessory Decoder
will work with both of these motor
types. Each output consists of a
DRV8231 full-bridge motor driver IC,
like we used in the DCC Locomotive
Decoder earlier in this series. Driving
the DC motors in a slow-motion point
motor or the coils of a snap-type motor
is trivial with this chip.
The DRV8231 can be operated as
two open-drain outputs, so we also
provide a connector to the supply
voltage, which becomes the common
siliconchip.com.au
Fig.1: the Snap-type Decoder uses a
simple linear regulator to power its
low-voltage circuitry. The 4700μF
capacitor provides a reservoir for
bursts of current to drive solenoidbased motors.
connection when used with three-wire
motors. Two-wire point motors simply
use the two motor outputs.
Signal lights
We have also provided a mode that
configures the Decoder as four opendrain outputs (with independent controls), so it could be used to operate
simple on-off devices like signals or
layout lighting.
A basic application could wire a
red and green bi-colour LED (with
an appropriate series resistor) across
the motor output to show a different
colour depending on the polarity of the
output. Independent LEDs (wired with
a common anode) or lamps could also
use the open-drain outputs.
Servo motors
Servo motors simply require power
and a digital pulse signal. They will
move to a position determined by the
pulse width. Les’ project shows how
a servo motor can be used to operate
a semaphore signal arm. It could also
be applied to things like level-crossing
boom gates.
Commercial suppliers such as Peco
are now selling servo motors and
brackets that allow their points to be
siliconchip.com.au
driven by a servo motor. Our Servo-
type Accessory Decoder simply has
four servo motor outputs that are suitable for small hobby servos. It can set
each output to be one of two adjustable pulse widths to toggle between
two different positions.
Circuit details
Our original plan combined features
of both Decoders into a single circuit,
but we figured it would be simpler
to create two distinct variants. Thus,
there are two boards with much in
common; we will start by explaining
the common features. Fig.1 shows
the circuit for the Snap-type Decoder,
while Fig.2 is the Servo-type Decoder.
CON5 is the input for the DCC track
voltage, while diodes D1-D4 form a
bridge rectifier to create a DC rail,
which we’ve labelled as a nominal
Features & Specifications
🛤 Separate DC input to allow higher voltage for motor operation (up to 24V)
🛤 Pushbuttons to allow use without DCC
🛤 Headers to allow remote mounting of pushbutton controls
🛤 Programmable running time set by DCC CVs
🛤 Can interface with the I2C Controller (described in this issue)
🛤 Simple address programming
Snap-type Accessory Decoder
Two bipolar high-current outputs suitable for driving snap-type and slow-motion point
motors
Can be configured with four open-drain outputs instead
Servo-type Accessory Decoder
Four servo outputs
5.3V 1A switchmode power supply for servos from DCC input
Two independent programmable servo positions per output, set by DCC CVs
🛤
🛤
🛤
🛤
🛤
Australia's electronics magazine
July 2026 71
12V here (it could be lower or, more
likely, higher). CON6 leads to a single
diode D5 that can be used to connect
a different source of DC power; effectively, it is diode-ORed with the supply from CON5.
Our locomotive decoders can work
up to about 17V, but both Accessory
Decoders can operate with inputs up to
at least 24V. 12V is a common voltage
for HO and N scale operation, so the
CON6 input allows a higher voltage for
accessories operation without having
to run the booster at a different voltage.
Many snap-type point motors suggest a
16V minimum operating voltage.
IC1 is a 20-pin 8-bit microcontroller in both cases, with a nominal 5V
supply bypassed at its pins 1 and 20.
These, along with pins 4, 18 & 19,
connect to the ICSP (in-circuit serial
programming) header, CON8. The
10kW resistor pulls up pin 4 for normal operation.
CON7 is the connection for the I2C
Controller that can be used to easily
program the Accessory Decoders. The
two 10kW resistors are pullups for the
I2C bus that the I2C Controller uses.
The 3.3V pullup is from an I/O pin
on IC1; this pin can be directed to an
internal DAC that can source or sink
up to 20mA at an internally set voltage,
so it is an easy way to get a suitable
voltage at adequate current without
needing external components.
The two LEDs are provided with a
series resistor, with LED2 driven by
one of IC1’s digital output pins. LED1
is driven from a different power rail on
each Decoder; from the motor supply
on the Snap-type Decoder and from the
5V rail on the Servo-type Decoder. The
5V rail here is derived from the 5.3V
rail used to power the servo motors.
Thus, they show the health of the
respective power supplies.
The other common items in both
circuits are the pushbutton switches
(S1-S4 or S1-S2) and jumper shunt (JP2
or JP3). These are simply connected
to digital input pins on IC1. The pins
are configured with internal pull-up
currents to allow detection of the
switch or jumper state. The respective
CON9s simply break out the switch
connections so that the switches can
be remote if preferred.
These inputs are used in different
ways for manually controlling the
Accessory Decoder or programming
its CVs (configuration variables) to
customise its operation.
Snap-type Decoder specifics
In this Decoder, the 5V power rail for
IC1 is provided from a simple 78L05
linear regulator (REG1), with 100μF
capacitors on its input and output.
The current requirements for the 5V
rail are expected to be no more than
20mA, even with the I2C Controller
connected, so this widely available
part will be fine.
IC2 and IC3 are the motor driver ICs
described earlier. Their supply (Vmotor)
is bypassed by a 4700μF capacitor
that is charged from the 12V rail via a
1W 100W resistor. The large capacitor
allows brief bursts of high current to
be provided to the motor drivers, while
Fig.2: the Servo-type Decoder has a switchmode supply to provide ample current to power servo motors. The low-voltage
circuitry (such as the microcontroller) is powered via a diode from this supply.
72
Silicon Chip
Australia's electronics magazine
siliconchip.com.au
the resistor limits the rate at which
the capacitor charges between uses;
the charge time is around one second.
Since LED2 is connected across
this capacitor, it will show point
motor activity by dimming briefly.
Two 10kW/1kW dividers with 100nF
smoothing capacitors monitor the
voltage upstream and downstream of
the resistor. Thus IC1 can detect when
the 4700μF capacitor is fully charged.
IC2 and IC3 each have a 1μF local
bypass capacitor and have 3.3V supplied to their Vref pins by the DAC
output noted earlier. The 0.1W shunt
resistors on the Isen pins set the current limit for IC2 and IC3 to 3.3A, just
below their 3.7A maximum.
The pairs of IN1 and IN2 pins are
driven by IC1 to control IC2’s and IC3’s
outputs, which connect to CON1 and
CON2, respectively. For cases such
as slow-motion point motors where
lower loads are driven and the burst
capability is not needed, the 100W
resistor could be replaced by a link
and the 4700μF capacitor reduced in
value to, say, 100μF.
Servo-type Decoder specifics
With most hobby-type servo motors
operating at around 6V and typically
drawing a few hundred milliamperes,
we need something more capable than
a 78L05 to provide the low-voltage
rail on this variant. REG1 is
an MCP16311 switching regulator that’s
used instead. It is configured for an output
of 5.3V and the circuit
here is much the same as
that used on the DCC Base
Station.
The Servo-type Decoder
(the board shown directly
to the right) could be used
for other applications such
as level crossing booms and
semaphore signal arms.
siliconchip.com.au
Table 1: Accessory Decoder CVs
CV number Purpose
Default
Notes
1 (513)
Low address byte
1, 2, 3, 4
All values (0-255) are valid.
3 (515)
Output duration
25
In steps of 10ms; the default gives 0.25s
and the maximum value of 255 gives 2.55s.
A value of 0 gives an unlimited duration.
9 (521)
High address byte
0
Only three bits are valid (ie, values 0-7).
33 (545)
Servo time thrown
100
Servo pulse length in steps of 10μs
(100 = 1ms).
34 (546)
Servo time closed
200
Servo pulse length in steps of 10μs
(200 = 2ms).
35 (547)
Number of outputs
available
2 (Snap)
4 (Servo)
When the Snap decoder’s CV35 is set to
four, there are four open-drain outputs
available. This only has an effect on the first
decoder output of each board.
Apart from the SMD parts that surround it, it has a 100μF capacitor on
its input and output. The power rail
for the microcontroller is supplied
from the 5.3V rail via schottky diode
D6, giving close enough to 5V; this
rail also has a 100μF capacitor for
bypassing.
The diode ensures that bursts of
current from the motors do not cause
brownouts on the microcontroller.
LED1 is fed from this 5V supply, so it
should be steadily lit.
Since servo motors are quite simple
to control, the remaining circuitry is
straightforward: the four servo connections at CON1-CON4 consist of threeway headers with ground, 5.3V and
a digitally generated signal from IC1.
The four 470W resistors help to isolate
IC1’s I/O pins from any noise or surges
from the servo motors.
These two
compact boards
allow you to control
different points motor types in a
DCC model railway. The Snaptype Decoder (the boards shown
above and to the left) can also
be used to control lights, such
as signals. Here we’ve shown it
with and without the 4700μF
capacitor attached.
DCC accessory decoder details
We should briefly explain some of
the terminology related to DCC accessory decoders. Accessory decoders
might also be called stationary decoders, in contrast to the mobile decoders found in locomotives and the like.
Accessory decoders have a separate
addressing scheme to mobile decoders, so locomotive #1 and accessory
decoder #1 are distinct and will not
be confused. The packet structure and
data contents are different, too.
The current standard promotes a flat
addressing system that ranges from 1 to
2048, although earlier standards used a
segmented sub-addressing system. We
tested our Decoders with a DigiTrax
system along with the JMRI software;
both work with the linear system, so
that is what we are using.
Unlike mobile decoders, stationary
decoders have just two outputs; these
are known as ‘closed’ and ‘thrown’,
based on US railway terminology for
points set to the straight (or default)
route or curved (non-default) route,
respectively. The common Australian equivalents are ‘normal’ and
‘reverse’.
For example, the DigiTrax unit uses
the abbreviations ‘c’ and ‘t’ to describe
the outputs, and the JMRI software
has buttons labelled “Closed” and
“Thrown”.
July 2026 73
Each output can be activated, which
will deactivate the other if it is active.
There is also a duration setting, which
determines how long an output is activated; this is
the duration of the
brief pulse when
a snap-type motor
is activated. If the
duration is set to
zero, the output
runs indefinitely.
This brings us to
the CVs (configuration variables) used
by accessory decoders.
Table 1 shows the CVs
that are supported by
our Accessory Decoders.
CV33, CV34 and CV35 are
custom CVs whose purpose is not fixed
by the standards. Not all of these CVs
are used, but CV3 is commonly used
as a duration setting and is available
for all outputs.
The CV numbers are given as two
different addresses (that differ by 512)
since these were created under a different numbering scheme, which has also
been simplified. We treat the CV numbers the same in software by ignoring
the upper bits.
Firmware operation
Like the locomotive decoders, these
Decoders monitor the DCC signal via
100kW protection resistors. When a
relevant packet is detected, it triggers
one of the outputs or programs a CV
as needed.
The Accessory Decoders also check
if an I2C Controller is connected and
interact with it if it’s present. This Controller has no processor of its own, so
the Decoder must provide a display
driver and menus for allowing settings
to be made.
The driver keeps a character buffer, not unlike an older 8-bit personal computer. It updates one character at a time from the buffer, which
Snap-type Decoder assembly
The Snaptype Decoder
attached to the I2C
Controller.
takes about 2ms. Since DCC
packets take about 5ms to
receive, this means it is very
unlikely for the Decoder to
miss a packet.
The Snap-type Decoder
can also delay activation of
an output if the Vmotor rail
line is low from a previous
activation. The threshold
used is 90% of the 12V rail
or 6V absolute minimum. A
round-robin counter ensures
that only one pulse output is
activated at a time.
Construction
We’ll describe the construction of the two Decoders separately, followed by some common
operational features, then the unique
aspects of each. How to use the I2C
Controller with the Accessory Decoders is described in its separate article.
You’ll need SMD assembly gear,
since there are a number of SMD parts.
This should include flux paste, tweezers, a magnifier and solder-wicking
braid. Illumination and ventilation
will also help.
Fig.3: start by soldering
the exposed pads on
the undersides of IC2
and IC3; there are
large holes in the PCB
to allow access from
below. There is nothing
smaller than SOIC
or 1206-size parts on
this board. The large
capacitor has not been
fitted in this photo.
74
Silicon Chip
Australia's electronics magazine
Make sure that you have the PCB
coded 09111254; this and the board
for the other Decoder are the same
dimensions and have the same mounting holes. Refer to the Fig.3 overlay
diagram in this case.
Start with IC2 and IC3, since they
have large underbody pads that need
to be soldered to the PCB. We find it
easiest to temporarily hold these
parts in place using a high-
temperature tape, such as Kapton. Make sure the pins are
over the correct pads and the
part is orientated correctly,
then add flux and flow a generous amount of solder
through the hole from
the underside.
Check that the chips
are aligned and firmly
held by the solder
before attempting to
solder the remaining pins. Apply
flux to the pads for
the remaining SMD
parts and fit IC1
next, ensuring that
its pin 1 aligns with
the marker. Tack one
lead to start. Check
that the remaining
pins are aligned with
their pads and flat
against the PCB before soldering them.
Next, solder the SMD capacitors;
there are three 100nF parts and two of
1μF. The latter are adjacent to IC2 and
IC3. Note that the 100nF marking on
the silkscreen near REG1 indicates two
parts, one to its left and one to its right.
The larger 0.1W resistors are also
near IC2 and IC3, so solder these next.
The remaining SMD parts are the 11
smaller M3216 (1206) size resistors.
Below the pair of 100nF capacitors,
there are pairs of 10kW and 1kW resistors as shown. With the SMD parts
complete, you clean up any flux residue on the board (eg, using alcohol
and a lint-free cloth).
Now you can move on to the
through-hole parts. The five 1N5819
diodes all face the same way, with
their cathodes to the right. Similarly,
the two LEDs can be fitted flush against
the PCB with their cathodes to the
right; LED1 is green and LED2 is red.
Snap the two tactile switches into
place and solder them. The 100W 1W
resistor can be spaced slightly (about
2mm) above the PCB to help with air
movement for cooling.
Join the three-way screw terminals
CON1 and CON2 via the moulded
dovetails before slotting them into
place. The two-way screw terminals
(CON3 and CON4) are fitted separately. Make sure that the cable entries
to the terminals are accessible from the
edges of the PCB.
Next fit REG1 and the two 100μF
capacitors near it. Solder the jumper
header JP2 in place and leave the shunt
off for now. The remaining headers
(CON7, CON8 and CON9) might not
be needed, so fit those as needed and
to suit.
Finally, solder the larger capacitor
in place. If you are using a 4700μF
part, bend the leads over and lay it
over the top of the remaining components, towards CON5. If you are using
a smaller part (for example, to power
slow-motion point machines), it can
be fitted vertically.
Servo-type Decoder assembly
This version is assembled on the
PCB coded 09111255 and with the
help of overlay diagram Fig.4. Apply
flux to the SMD parts and put the tiny
MSOP-8 REG1 in place with its pin 1
marker at upper left, near the REG1
designator. Tack one lead, verify that
the placement is still good, then solder
the remainder. If you get a bridge, add
extra flux and use the braid to draw
away the excess solder.
Follow with IC1; its pin 1 is also at
upper left. The remaining SMD parts
are passives. There are two 100nF
capacitors and three 1μF capacitors,
plus 13 resistors. The single inductor
might need a bit more heat to solder
properly since it is larger and has more
thermal mass. It’s best to put some flux
paste on its pads before placing it.
These components are all individually marked on the PCB; none of them
are polarised. Clean off any excess flux
siliconchip.com.au
* servo wire colours may vary
Fig.4: the switchmode
regulator is in a tiny MSOP8 package and should be
soldered first. You should find
the remaining components
straightforward after that.
Check the pinout of your servo
motors before connecting, since
we have seen some that use a
different pin order.
before fitting the through-hole parts
and allow the solvent to evaporate.
Next, solder the six through-hole
diodes and two LEDs. Apart from D6,
all these components have cathodes
facing to the right of the PCB. D6’s
cathode is towards the top of the PCB.
Snap in the four tactile switches and
solder them, then follow with the three
100μF capacitors.
Now mount both two-way screw
terminals, CON5 and CON6, making
sure that the cable entries face away
from the PCB. The jumper header
(JP3) and three-way headers (CON1CON4) should be fitted next, followed
by CON7, CON8 and CON9 if needed.
Leave the shunt off the jumper for now.
Microcontroller programming
If you have purchased a chip or kit
from the Silicon Chip shop, microcontroller IC1 (for both boards) will
already be programmed with the correct firmware. Make sure you choose
the correct variant at the time of purchase. You can skip forward to the
section on testing.
To apply power, use CON5 since it
is followed by the bridge rectifier (D1D4) and the polarity will not matter. A
9V battery is a fairly safe option and
should cause LED1 to light up when
connected.
Connect a programmer (Snap, PICkit
4, PICkit 5 or PICkit BASIC) to CON8;
be sure to align pin 1 (with the >
marker) to the matching marker on the
programmer and use the Microchip
IPE program to upload (program) and
verify the appropriate HEX file (see
the parts list for the code).
Testing
The pushbutton controls mean that
both boards can be quite thoroughly
tested with little more than a suitable
Australia's electronics magazine
power supply. It doesn’t even need
to be a DCC system. If you want to be
cautious, try a 9V battery or a current-
limited (100mA) 12V supply such as
a bench PSU. Connect it to CON6,
observing the polarity.
On either board, LED1 should light
up to indicate when power is applied.
You can probe for the other expected
voltages relative to circuit ground (eg,
the – terminal of CON6). You should
see 5V (4.9-5.1V) on pin 2 of CON8,
the ICSP header. This pin is next to the
one marked with a chevron.
If all is well, you can now connect
a more powerful supply (or your DCC
system) and your motors. Fig.5 shows
wiring examples for different types
of point motors. The most typical
connection will be to wire the main
DCC track output from a base station
(“MAIN” on our DCC Base Station) to
CON5. Since a DCC signal is effectively
AC, the polarity is not important.
Pressing one of S1, S2, S3 or S4
should cause the corresponding
(CON1, CON2, CON3 or CON4) output
to activate for a quarter of a second.
Pressing the same switch a second time
should activate the alternate action.
For example, repeated presses on
S4 should cause a servo motor connected to CON4 to toggle between its
two pre-programmed positions. From
this, you can see that the Accessory
Decoders are quite useful, even without a DCC system connected. Bridging
the respective pins on CON9 to ground
should have the same effect.
DCC operation
By default, the DCC accessory
addresses correspond to the connectors. So CON1 will respond to address
1, CON2 to address 2 and so forth. For
our testing, we used our DigiTrax system and the JMRI software, as well
July 2026 75
as our own DCC Base Station. JMRI
is an open-source project that works
on Windows, macOS and Linux – see
www.jmri.org
There are many options for hardware to interface JMRI to a layout,
including commercial systems that
have a computer interface. In our January 2020 DCC project (siliconchip.au/
Article/12220), we used the DCC++
BaseStation sketch. It can be found
at https://github.com/DccPlusPlus/
BaseStation
It’s also possible to use a bare Arduino Uno (programmed with the DCC++
BaseStation sketch) to generate logic-
level DCC signals. We used this to
quickly test JMRI’s operation with the
Accessory Decoders. To do the same,
install JMRI and configure your programmed Uno as the DCC interface by
setting the connection name to DCC++
and the serial port to that allocated to
the Uno.
Fig.6 shows the wiring needed to
feed the signal into an Accessory
Decoder and also supply it with power.
You will need a suitable DC power supply that is capable of sharing ground
with the Uno and thus your computer.
Either Accessory Decoder can be used
this way.
The JMRI DecoderPro program provides a few useful windows under the
Actions Menu. The Turnout Control
window can be seen in Screen 2. Enter
the address number (1-4 by default)
and then press Thrown or Closed to
operate the outputs.
When a command is received (that
the decoder should respond to), LED2
will flash for 200ms. If the activation is
delayed (due to the capacitor charging
or round-robin sequencing), LED2 will
emit another very brief flash when the
output is ultimately activated.
The Single CV Programmer (Screen
1) can also be used to set the configuration variables. Set the lower radio
button to “Ops Accessory Byte” and
the upper radio button to “Accessory Address”. Enter the Accessory
Decoder address (lower text box) and
fill in the CV and Value fields before
pressing the “Write CV” button.
We have locked out the ability to
program addresses (CV1 and CV9) to
ensure that they cannot be inadvertently changed. Since these CVs also
need to be accessed through their own
address, it can be messy to do it this
way. We will discuss how these can
be changed shortly.
76
Silicon Chip
Fig.5: We found snap-type motors (a & b) to be the most difficult to get working.
You may need to adjust the motor and points to ensure that they are moving as
freely as possible. Points with integrated motors (c) worked well. Many slowmotion motors (d) have extra switch contacts, which can be ignored or used for
other purposes, such as operating signal lights. For loads like LEDs, make sure
that the polarity is correct (e).
If you have a Servo-type Decoder, we
recommend changing CV3 to 0 so that
the outputs are always driven. Then
the servos will immediately respond to
changes in CV33 and CV34 if the output has already been set to thrown or
closed, respectively. CV3 should also
be 0 for slow-motion motors that can
be constantly powered.
For a Snap-type Decoder, CV3
should be set long enough to ensure
that the points are thrown, but not so
long that the coil overheats. The points
motor manual should provide guidance on this.
If you have your own DCC system,
it should have instructions on how to
work with accessory decoders.
CV35 on the first output only can
be changed to configure a Snap-type
Decoder to have two full-bridge outputs or four open-drain outputs. The
values are 2 for the full-bridge outputs
and 4 for the open-drain outputs. The
Snap-type Decoder will not accept any
other values for CV35.
With four open-drain outputs, the
outputs follow the numbering shown
next to CON1 and CON2, with outputs
1 and 2 coming from CON1 and outputs 3 and 4 coming from CON2. The
output is on (sinking current) while
the “throw” output is active, so it can
be turned off by setting the “close”
Screen 1: DecoderPro’s Single CV
Programmer (also under the Actions
menu) can be used with both mobile
and stationary decoders. Select Ops
Accessory Byte as the mode and then
Accessory address before entering the
address, CV and value.
Screen 2: JMRI’s DecoderPro
program has several tools for
interfacing with accessory
decoders. The Turnout
Control (found in the Actions
menu) opens the window
here, which can be used to
manually operate accessory
decoders.
Australia's electronics magazine
siliconchip.com.au
Fig.6: an Arduino Uno can be used to generate logic
level DCC signals, which can then be passed to the
Accessory Decoder using this wiring. The DC power
supply needs to be capable of sharing ground with
the Uno and computer it is connected to.
output. It can also switch off due to
the timer expiring.
Due to the operation of the DRV8231,
these aren’t true open-drain outputs. If,
for example, output 1 is on and output
2 is off, output 1 will be driven low (to
ground), while output 2 will be driven
high (to the voltage on the COM+ pins).
However, this shouldn’t be a problem
for loads like lamps or LEDs.
We did note a small leakage current
from the outputs, so sensitive loads
like LEDs might benefit from a resistor
across their leads to shunt this current.
Inductive loads like relays should also
be fine, since the DRV8231 has internal clamp diodes.
DCC Base Station
software update
We’ve updated our DCC Base Station from January 2026 (siliconchip.
au/Article/19558) to allow control of
accessory decoders. There is an extra
screen (accessed from a new AC button on the main screen) that can be
used for operation. An extra button
has also been added to the CV programming page.
Copying the file 0911125A.UF2 to
Pico 2 on the DCC Base Station will
add these features. Note that loading a
different firmware (new to old or old to
new) will invalidate the Base Station’s
configuration. Thus, it’s a good idea to
record the calibration parameters from
the Settings page before reflashing the
Pico so they can be easily reinstated
afterwards.
If you find it difficult to access the
BOOTSEL button, try connecting to its
USB serial port (with a terminal program) at 1200 baud; this is the method
the Arduino IDE uses to enter the bootloader. If you run into problems after
loading the new firmware, try clearing
Screen 3: the updated version of our DCC Base Station
Firmware has a page for controlling accessory decoders; its
simple interface is shown here.
siliconchip.com.au
the flash with the flash_nuke.UF2 firmware image, then load it again.
Screen 3 shows the new screen. It is
quite simple and just contains a button to select the accessory decoder
address. This opens a numeric keypad for number entry. The buttons
for THROW and CLOSE will activate
the corresponding outputs on the
addressed decoder. We have tested
this with our own Decoders and also
a commercial Rokuhan decoder; all
worked as expected.
Screen 4 is the updated CV programming screen. A new ACC button has
been added to provide programming
for accessory decoders. This works
on the MAIN track output (operations
mode) of the base station and uses the
accessory decoder address entered on
the AC screen. Being on the MAIN
track means that there is no readback
– only writing is possible.
To avoid corrupting addresses, the
accessory decoder addresses cannot be
set via their CVs. Instead, you should
use the I2C Controller board or follow
the instructions in the next section.
Our Accessory Decoders also support
being reset (all CVs to default values)
by programming a value of 8 into CV 8;
this will, of course, change the address
back to its default value.
Addressing
The default addresses will work fine
for testing, but may need to be changed
if you are using more than one Accessory Decoder board, since they would
all be on the same addresses otherwise. Fitting the shunt to the jumper
sets up address programming mode;
the section below assumes the shunt
is fitted.
Screen 4: the new ACC button on the programming page of
the DCC Base Station allows CV programming of accessory
decoders on the MAIN track output.
Australia's electronics magazine
July 2026 77
Parts List – Accessory Decoders
Snap-type Accessory Decoder
1 42 × 70mm double-sided PCB coded 09111254
2 3-way 5-5.08mm/0.2-inch pitch screw terminal blocks (CON1 & CON2)
2 2-way 5-5.08mm/0.2-inch pitch screw terminal blocks (CON5 & CON6)
1 4-way 2.54mm/0.1-inch pitch polarised header or similar (CON7)
1 5-way 2.54mm/0.1-inch pitch right-angled pin header
(CON8; optional, for ICSP)
1 3-way 2.54mm/0.1-inch pitch right-angled pin header
(CON9; optional, for external switches)
1 2-pin 2.54mm/0.1-inch pitch header and jumper shunt (JP2)
2 6 × 6mm tactile switches (S1, S2)
mounting hardware to suit installation
(eg, 3mm machine screws and spacers)
glue to secure the 4700μF capacitor
Semiconductors
1 PIC16F18146-I/SO microcontroller programmed with 0911125P.HEX,
wide SOIC-20 (IC1)
2 DRV8231DDAR motor driver ICs, SOIC-8 (IC2, IC3)
1 78L05 regulator, TO-92 (REG1)
5 1N5819 schottky diodes (D1-D5)
1 green 3mm LED (LED1)
1 red 3mm LED (LED2)
Capacitors
1 4700μF 25V electrolytic (optional for Snap-type motors)
2 100μF 25V electrolytic
2 1μF 25V X7R SMD M3216/1206-size MLCCs
3 100nF 50V X7R SMD M3216/1206-size MLCCs
Resistors (all SMD M3216/1206-size ±1% ¼W except as noted)
2 100kW
5 10kW
1 3kW
3 1kW
1 100W ±5% 1W axial
2 0.1W 2W SMD M6331/2512-size
Servo-type Accessory Decoder
1 42 × 70mm double-sided PCB coded 09111255
4 3-way 2.54mm/0.1-inch pitch right-angle pin headers (CON1-CON4)
2 2-way 5-5.08mm/0.2-inch pitch screw terminal blocks (CON5 & CON6)
1 4-way 2.54mm/0.1-inch pitch polarised header or similar (CON7)
1 5-way 2.54mm/0.1-inch pitch right-angle pin header
(CON8; optional, for ICSP)
1 5-way 2.54mm/0.1-inch pitch right-angle pin header
(CON9; optional, for external switches)
1 2-pin 2.54mm/0.1-inch pitch header and jumper shunt (JP3)
1 22μH 1.3A 6 × 6mm SMD inductor (L1) [eg, NRS6028T220M]
4 6 × 6mm tactile switches (S1-S4)
mounting hardware to suit installation
(eg, 3mm machine screws and spacers)
Semiconductors
1 PIC16F18146-I/SO microcontroller programmed with 0911125V.HEX,
wide SOIC-20 (IC1)
1 MCP16311(T)-E/MS buck regulator, MSOP-8 (REG1)
6 1N5819 schottky diodes (D1-D6)
1 green 3mm LED (LED1)
1 red 3mm LED (LED2)
Capacitors
3 100μF 25V electrolytic
3 1μF 25V X7R SMD M3216/1206-size MLCCs
2 100nF 50V X7R SMD M3216/1206-size MLCCs
Resistors (all SMD M3216/1206-size ±1% ¼W)
2 100kW
1 56kW
4 10kW
2 1kW
4 470W
78
Silicon Chip
Australia's electronics magazine
The pushbutton switches also influence this mode and will not operate
the outputs while the shunt is fitted.
In this state, the Accessory Decoder
will record the address of the first
accessory packet that it sees three
times in a row.
The first output (which defaults to
address 1) will take on this address.
The second output will take on the
next address and so forth. Addresses
wrap above 2048, so if 2046 is sent
to the Servo-type Decoder while
the shunt is set (and S1-S4 are not
pressed), CON1 to CON4 will be set
to respond to addresses 2046, 2047,
2048 and 1, respectively.
Holding one of S1-S4 will program
just the corresponding output to the
address seen on the DCC bus. When
the jumper is set, LED2 will light up for
a second when a valid action occurs.
Pressing S1 and S2 together while
the shunt is in will force a reset of all
outputs to the CVs and values shown
in Table 1.
For our DigiTrax system, we had
to push the accessory button twice
to ensure enough packets were sent,
since it only sends two packets per
action. Note that this arrangement
means that you do not need to know if
the addressing used by your system is
linear or otherwise, since the bit patterns are all that is matched.
Mounting
The Accessory Decoders have four
mounting holes to suit 3mm hardware, and we expect many readers
will mount the Decoders underneath a
baseboard or control panel. You might
like to use the bare PCB or the overlay diagram (which is to scale) as a jig
to mark mounting holes. The centres
are at 36.5mm and 64.5mm spacings.
Summary
If you wish to use the I2C Controller to monitor the Accessory Decoders
and change their CVs, there is further
detail (including screenshots) in that
project article. With this article, we
now have a fairly complete DIY DCC
system, including mobile decoders,
stationary decoders, a base station and
numerous other items!
We plan to round that off in the
future with a miniature destination
display that can be installed within
model trains and controlled by our
previously described microDCC
SC
Decoder.
siliconchip.com.au
|