372 lines
15 KiB
Plaintext
372 lines
15 KiB
Plaintext
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<title>Hardware Support: LocoIO</title><!--#include virtual="/help/en/parts/Style.shtml" -->
|
|
</head>
|
|
<body>
|
|
<!--#include virtual="/help/en/parts/Header.shtml" -->
|
|
|
|
<div id="mBody">
|
|
<!--#include virtual="Sidebar.shtml" -->
|
|
|
|
<div id="mainContent">
|
|
<h1>Hardware Support: LocoIO</h1>
|
|
|
|
<p>A LocoIO board is a DIY stationary interface to LocoNet for up to 16 input/output pins.
|
|
More on the available configuration options <a href="#portOptions">below</a>.<br>
|
|
The original <a href=
|
|
"http://www.locobuffer.com/LocoIO/LocoIO.htm">LocoIO</a> design by John Jabour was further
|
|
developed by <a href="https://locohdl.synology.me/">Hans Deloof</a>.</p>
|
|
|
|
<p>To access a list of all active LocoIO modules (and select one to program), turn on the layout and power up the
|
|
LocoIO hardware. No jumpers or buttons on the LocoIO need touching in order to proceed.<br>
|
|
Select <a href="../../../package/jmri/jmrix/loconet/lnsvf1/Sv1DiscoverPane.shtml">Manage LocoIO (LNSV1)
|
|
Modules</a> from the LocoNet menu to open the tool. Click [Probe All] if the list is empty.</p>
|
|
|
|
<h2>Programming a LocoIO family board</h2>
|
|
|
|
<span class="since">Since <a href="https://www.jmri.org/releasenotes/jmri4.21.2.shtml" target=
|
|
"_blank">JMRI 4.21.2</a></span>
|
|
<p>The <a href=
|
|
"../../../../../xml/decoders/Public_Domain_HDL_LocoIO.xml">Public_Domain_HDL_LocoIO</a>
|
|
Decoder Definition in the "Public Domain and DIY" category supports set-up of a wide range of
|
|
LocoIO devices up to LocoIO/LocoBooster/LocoRCD/LocoServo rev 1.54 hardware since 2020.</p>
|
|
|
|
<p>To program a LocoIO module, follow these steps:</p>
|
|
|
|
<ol>
|
|
<li>Turn on the layout and power up the LocoIO hardware. No jumpers or buttons on the
|
|
LocoIO need touching in order to proceed.</li>
|
|
|
|
<li>Open DecoderPro main roster view or the Roster menu option in PanelPro.</li>
|
|
|
|
<li>Click on the [Program] button in the last cell of a row in the LocoIO Tool.<br>
|
|
Create a new entry if the board shows up in the list but the button reads [No Entry in Roster] by
|
|
clicking the [Add New Loco] button at top left of the main Roster.</li>
|
|
|
|
<li>In the Decoder Installed box, navigate to "Public-domain and DIY" > "Hans Deloof
|
|
LocoIO".</li>
|
|
|
|
<li>Looking at your hardware, select the correct PIC programmer firmware version from the
|
|
list. It is often labeled on the biggest IC chip. If your version is not in the list,
|
|
select the first higher one. In this example we pick "LocoIO v1.53":<br>
|
|
<a href="images/LocoIo/Create1_New.png"><img src=
|
|
"images/LocoIo/Create1_New.png" width="370" height="235" alt=
|
|
"Screenshot LocoIO Config step 1"></a>
|
|
</li>
|
|
|
|
<li>On the right of the Create New Loco pane, enter a name for this module, eg. "LocoIO
|
|
81/1 rev 1.53", and fix the ultra-long decoder DCC address suggested. We chose 81, the
|
|
factory default board address:<br>
|
|
<a href="images/LocoIo/Create2_Correct.png"><img src=
|
|
"images/LocoIo/Create2_Correct.png" width="370" height="235" alt=
|
|
"Screenshot LocoIO Config step 2"></a><br>
|
|
Click [Save] and close the Create New Loco pane.
|
|
</li>
|
|
|
|
<li>You will see the new entry appear in the Roster.<br>
|
|
Select it, make sure to select Programming on Main, and click [Program]:<br>
|
|
<a href="images/LocoIo/Create3_POM.png"><img src=
|
|
"images/LocoIo/Create3_POM.png" width="294" height="230" alt=
|
|
"Screenshot LocoIO Config step 3"></a>
|
|
</li>
|
|
|
|
<li>On the Basic tab, enter the actual LocoIO Main Address and Sub-address, "81" and "1"
|
|
respectively in our example:<br>
|
|
<a href="images/LocoIo/Create4_CheckAddress.png"><img src=
|
|
"images/LocoIo/Create4_CheckAddress.png" width="343" height="261" alt=
|
|
"Screenshot LocoIO Config step 4"></a>
|
|
</li>
|
|
|
|
<li>Next, go to the Roster Entry pane, click [Save to Roster] and close & reopen the LocoIO
|
|
definition from the Roster to update the actual decoder address:<br>
|
|
<a href="images/LocoIo/Create5_SaveClose.png"><img src=
|
|
"images/LocoIo/Create5_SaveClose.png" width="343" height="261" alt=
|
|
"Screenshot LocoIO Config step 5"></a>
|
|
</li>
|
|
|
|
<li>Returning to the Basic tab, click [Read full sheet]. If a LocoIO is found at the
|
|
address, its firmware version is displayed (the Monitor LocoNet window will show more
|
|
precise information regarding the firmware).</li>
|
|
|
|
<li><strong>Warning:</strong> If you wish to change the address of a LocoIO board, you
|
|
<strong>MUST first ensure that ONLY a single LocoIO-based board is connected to the
|
|
LocoNet</strong>, as the address is set via a broadcast message.<br>
|
|
If you Write CV2 and CV3 on the CVs tab or press [Write All] from the Basic tab,
|
|
<strong>ALL</strong> LocoIO's on your LocoNet will be reprogrammed with the same new
|
|
address.</li>
|
|
|
|
<li>
|
|
<br>
|
|
<a href="images/LocoIo/Create6_Locotab.png"><img src=
|
|
"images/LocoIo/Create6_Locotab.png" width="343" height="262" alt=
|
|
"Screenshot LocoIO Config step 6"></a>
|
|
</li>
|
|
|
|
<li>
|
|
<br>
|
|
<a href="images/LocoIo/Create7_LocotabRead.png"><img src=
|
|
"images/LocoIo/Create7_LocotabRead.png" width="343" height="262" alt=
|
|
"Screenshot LocoIO Config step 7"></a>
|
|
</li>
|
|
|
|
<li>
|
|
<br>
|
|
<a href="images/LocoIo/Create8a_InitialPortstab.png"><img src=
|
|
"images/LocoIo/Create8a_InitialPortstab.png" width="579" height="199" alt=
|
|
"Screenshot LocoIO Config step 8a"></a>
|
|
</li>
|
|
|
|
<li>
|
|
<br>
|
|
<a href="images/LocoIo/Create8b_After1stReadAll.png"><img src=
|
|
"images/LocoIo/Create8b_After1stReadAll.png" width="592" height="442" alt=
|
|
"Screenshot LocoIO Config step 8b"></a>
|
|
</li>
|
|
|
|
<li>After Read All, many ports will show a Mode selected. Due to the complexity of the
|
|
LocoIO memory DecoderPro can't figure out some choices, so you will have to assist at this
|
|
point for those ports that still show "Port not in Use". At least you will notice the
|
|
numbers already changed. For example on Port 4 the number in the Config field reads
|
|
"95":<br>
|
|
<a href="images/LocoIo/Create9a_Port4Combo.png"><img src=
|
|
"images/LocoIo/Create9a_Port4Combo.png" width="405" height="130" alt=
|
|
"Screenshot LocoIO Config step 9a"></a>
|
|
</li>
|
|
|
|
<li>Turn to the Cheat Sheet tab reference, in the Config column look up "95". It's a
|
|
Block Detector - Active High:<br>
|
|
<a href="images/LocoIo/Create9b_CheatSheet.png"><img src=
|
|
"images/LocoIo/Create9b_CheatSheet.png" width="274" height="195" alt=
|
|
"Screenshot LocoIO Config step 9b"></a>
|
|
</li>
|
|
|
|
<li>Return to the Ports tab and in the Port 4 Mode combo, pick "Block Detector - Active
|
|
High" (either odd or even address, will correct automatically later on):<br>
|
|
<a href="images/LocoIo/Create9c_Port4ComboOpen.png"><img src=
|
|
"images/LocoIo/Create9c_Port4ComboOpen.png" width="425" height="130" alt=
|
|
"Screenshot LocoIO Config step 9c"></a>
|
|
</li>
|
|
|
|
<li>After clicking [Read changes on sheet]:<br>
|
|
<a href="images/LocoIo/Create9d_Port4ModeSet.png"><img src=
|
|
"images/LocoIo/Create9d_Port4ModeSet.png" width="427" height="126" alt=
|
|
"Screenshot LocoIO Config step 9d"></a>
|
|
</li>
|
|
|
|
<li>After fixing all mode combo's that are not "0", once again click [Read full sheet] to
|
|
update all fields and inspect the LocoIO configuration. Scroll down to see more ports:<br>
|
|
|
|
<a href="images/LocoIo/Create10_Ready.png"><img src=
|
|
"images/LocoIo/Create10_Ready.png" width="564" height="442" alt=
|
|
"Screenshot LocoIO Config step 10"></a>
|
|
</li>
|
|
|
|
<li>Inputs allow setting up to two more actions carried out when the pin goes to ON. You
|
|
can set the action type and the address on the right hand side of the LocoIO programmer
|
|
pane as shown here. See the HDL documentation for examples and further information:<br>
|
|
<a href="images/LocoIo/Create11_Opcode.png"><img src=
|
|
"images/LocoIo/Create11_Opcode.png" width="275" height="116" alt=
|
|
"Screenshot LocoIO Opcode Config"></a>
|
|
</li>
|
|
|
|
<li>A LocoBooster module will show several special options:<br>
|
|
<a href="images/LocoIo/Create12_Lbooster.png"><img src=
|
|
"images/LocoIo/Create12_Lbooster.png" width="400" height="541" alt=
|
|
"Screenshot LocoBooster Config pane"></a>
|
|
</li>
|
|
</ol>
|
|
|
|
<h2 id="portOptions">LocoIO Port Configuration</h2>
|
|
|
|
<p>A typical LocoIO board contains 16 signal pins, also called channels or ports. Each port can be
|
|
individually programmed as input (fascia pushbuttons, turnout feedback or occupancy sensors) or
|
|
as output (fascia indicator LEDs, signal LED's, turnout motors etc.) and perform a number of
|
|
different things (depending on the module's hardware and firmware version):</p>
|
|
|
|
<p>Options for LocoIO Inputs:</p>
|
|
|
|
<ul>
|
|
<li>Block Detector - Active Low</li>
|
|
|
|
<li>Block Detector - Active High</li>
|
|
|
|
<li>Block Detector - Active Low - Delayed</li>
|
|
|
|
<li>Block Detector - Active High - Delayed</li>
|
|
|
|
<li>Push Button - Active Low</li>
|
|
|
|
<li>Push Button - Active Low - Indirect</li>
|
|
|
|
<li>Switch Point Feedback - Normal</li>
|
|
|
|
<li>Switch Point Feedback - Contact 2</li>
|
|
|
|
<li>Switch Point Feedback - Contact 1</li>
|
|
|
|
<li>Push Button - Active High - Indirect</li>
|
|
|
|
<li>Push Button - Active High</li>
|
|
|
|
<li>Toggle Switch</li>
|
|
|
|
<li>Toggle Switch - Indirect</li>
|
|
</ul>
|
|
|
|
<p>Options for LocoIO Outputs</p>
|
|
|
|
<ul>
|
|
<li>Fixed - 1 - Off</li>
|
|
|
|
<li>Fixed - 2 - Off</li>
|
|
|
|
<li>Fixed - 1 - On</li>
|
|
|
|
<li>Fixed - 2 - On</li>
|
|
|
|
<li>Pulse - 2 - Soft Reset</li>
|
|
|
|
<li>Pulse - 1 - Soft Reset</li>
|
|
|
|
<li>Pulse - 2 - Hard Reset</li>
|
|
|
|
<li>Pulse - 1 - Hard Reset</li>
|
|
|
|
<li>Fixed - 1 - Off - Blink</li>
|
|
|
|
<li>Fixed - 2 - Off - Blink</li>
|
|
|
|
<li>Fixed - 1 - On - Blink</li>
|
|
|
|
<li>Fixed - 2 - On - Blink</li>
|
|
|
|
<li>Fixed - 1 - Off - 4-Way</li>
|
|
|
|
<li>Fixed - 1 - Off - 4-Way - Blink</li>
|
|
|
|
<li>Fixed - 2 - Off - 4-Way</li>
|
|
|
|
<li>Fixed - 2 - Off - 4-Way - Blink</li>
|
|
|
|
<li>Fixed - 1 - On - 4-Way</li>
|
|
|
|
<li>Fixed - 1 - On - 4-Way - Blink</li>
|
|
|
|
<li>Fixed - 2 - On - 4-Way</li>
|
|
|
|
<li>Fixed - 2 - On - 4-Way - Blink</li>
|
|
|
|
<li>Block (Occupancy) Detector</li>
|
|
|
|
<li>Block Detector - Blink</li>
|
|
|
|
<li>Servo (LocoServo ports 5-12 only)</li>
|
|
</ul>
|
|
|
|
<p>Since LocoIO rev 1.49</p>
|
|
|
|
<ul>
|
|
<li>Port Not In Use</li>
|
|
|
|
<li>On older boards, you are advised to configure unused ports as Output Fixed to prevent
|
|
accidental signals</li>
|
|
</ul>
|
|
|
|
<p>See the Cheat Sheet included in the DecoderPro LocoIO Programmer for further details.</p>
|
|
|
|
<p>The ports are configured via LocoNet LNSV1 messages, but the DecoderPro Programming interface
|
|
takes care of many technical details. Documentation is included below and in the decoder
|
|
definition file.</p>
|
|
|
|
<h3>Third Party info</h3>
|
|
|
|
<ul>
|
|
<li><span class="since">Since <a href="https://www.jmri.org/releasenotes/jmri5.11.3.shtml"
|
|
target="_blank">JMRI 5.11.3</a></span>There is an Arduino Nano based DIY LocoIO, see <a href=
|
|
"https://github.com/ClubNCaldes/SVLocoIO/blob/master/SVLocoIO/SVLocoIO.ino">GCA50a</a>. Based on this design, a
|
|
dual RFID reader <a href="https://github.com/silverailscolo/Arduino-GCA51">GCA51</a> is also supported in JMRI.
|
|
</li>
|
|
|
|
<li>For more information on the HDL LocoIO and how to use the boards, see <a href=
|
|
"https://locohdl.synology.me/">LocoHDL</a>.
|
|
</li>
|
|
<li>A copy of the original LocoIO DIY project description is available courtesy of <a href=
|
|
"https://www.rr-cirkits.com/locobuffer/LocoIO/">www.rr-cirkits.com</a></li>
|
|
</ul>
|
|
|
|
<h2 id="older">LocoIO History</h2>
|
|
|
|
<p>The initial LocoIO provided the following pin options:</p>
|
|
|
|
<div class="list">
|
|
<dl>
|
|
<dt class="left"><dfn>"Toggle switch controls turnout"</dfn>
|
|
</dt>
|
|
|
|
<dd class="first">
|
|
<p>Generate a OPC_SW_REQ to close/throw a turnout when a toggle switch changes state.
|
|
When the input goes high, a "close" command is sent; when the input goes low, a "throw"
|
|
command is sent. The channel configuration value is 0x0F.</p>
|
|
</dd>
|
|
|
|
<dt class="left"><dfn>"Input low flips turnout"</dfn>
|
|
</dt>
|
|
|
|
<dd>
|
|
<p>Generate a OPC_SW_REQ LocoNet message when the input goes low. This is intended for
|
|
use with a momentary pushbutton. The command sent will alternate the position of the
|
|
addressed turnout or signal; if "close" was last sent, a "throw" will be sent now and
|
|
vice-versa. The channel configuration value is 0x2F.</p>
|
|
</dd>
|
|
|
|
<dt class="left"><dfn>"Input high flips turnout"</dfn>
|
|
</dt>
|
|
|
|
<dd>
|
|
<p>Generate a OPC_SW_REQ LocoNet message when the input goes high. This is intended for
|
|
use with a momentary pushbutton. The command sent will alternate the position of the
|
|
addressed turnout or signal; if "close" was last sent, a "throw" will be sent now and
|
|
vice-versa. The channel configuration value is 0x6F.</p>
|
|
</dd>
|
|
|
|
<dt class="left"><dfn>"Status message sets output"</dfn>
|
|
</dt>
|
|
|
|
<dd>
|
|
<p>Drive an output from OPC_INPUT_REP input status messages on the LocoNet. The output
|
|
goes high when an "input high" message is received, and goes low when an "input low"
|
|
message is received. These messages are also used for block occupancy status; the
|
|
output will go high when the block is occupied, and low when its empty. The channel
|
|
configuration value is 0XC0.</p>
|
|
</dd>
|
|
|
|
<dt class="left"><dfn>"Turnout close cmd sets output"</dfn>
|
|
</dt>
|
|
|
|
<dd>
|
|
<p>Drive an output on the LocoIO board from received OPC_SW_REQ commands. The channel
|
|
configuration value is 0x80. This adjusts the address field to look for a command that
|
|
sets the turnout "closed".</p>
|
|
</dd>
|
|
|
|
<dt class="left"><dfn>"Turnout throw cmd sets output"</dfn>
|
|
</dt>
|
|
|
|
<dd>
|
|
<p>Drive an output on the LocoIO board from received OPC_SW_REQ commands. The channel
|
|
configuration value is 0x80. This adjusts the address field to look for a command that
|
|
sets the turnout "thrown".</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
|
|
<!--#include virtual="/help/en/parts/Footer.shtml" -->
|
|
</div>
|
|
<!-- closes #mainContent-->
|
|
</div>
|
|
<!-- closes #mBody-->
|
|
<script src="/js/help.js"></script>
|
|
</body>
|
|
</html>
|