Z21 app issue with Zimo decoders

Airbuspilot

Registered
Country flag


I am in the process of modifying some LGB turn out motors to fit the decoder inside the body, for external use, then program each decoder. I am using a MX 32 FU to program these decoders, I have changed the address successfully on the first motor and operated it with the MX 32 FU.

The layout is operated using an iPad with the Roco Z21 app, the existing part of the layout is fully functioning including operating the turnouts. When I enter the new turnout address into the Z21 app I cannot then operate the turnout?

I have programmed the new address as a whole number ignoring the sub addresses on the MX 32 handset, new address #50 then shows on the Basis screen as 50.0. The Z21 app uses a whole number as the address for each turnout, is this problem related to the sub addresses?

We will certainly use the iPads for running sessions and the MX 32 will presumably be used for programming and testing. If anyone is using the Z21 app I would appreciate a pointer.

Robin
 
Zimo address 50 for you could be 200 for a non Zimo controller. Each Zimo address is 4 turnouts.
 
Thanks Dan and Greg for answering.

This layout was setup by someone who obviously knew what he was doing but is long gone and I am having to try to work out what he has done and how he did it. He grouped the switches in "numerical" blocks, 5 in the 10's, 5 in the 20's, 5 in the 30's etc. The Z21 was then given the individual numerical value as the address for each switch.

If I understand what you are saying this numerical value has been entered as a "conventional" address CV value then needs to be translated to the ZIMO equivalent?

If we take existing switch no 25 for example this is shown on the Z21 as No25 but is in reality 25/4 = 6.25 so in ZIMO terms it should be programmed (I will need to check tomorrow) as 6.1 in the MX32?

If I now start a new group in the 50's I would enter switch no 54 in the Z21 but program it as 54/4=13.5 entered as 13.2 in the MX32?

It looks like only a small number of switches were programmed into the MX32, presumably to operate a large number of switches would be impractical and an iPad type solution more sensible. The majority of the switches were probably programmed using the ZCS software, I have only just found the English version and have yet to find out how it works.

Robin
 
major, (the 4 actual addresses, using minor 0-3)
1 (1-4)
2 (5-8)
3 (9-12)
4 (13-16)
5 (17-20)
6 (21-24)
7 (25-28)
8 (29-32)
9 (33-36)
10 (37-40)
11 (41-44)
12 (45-48)
13 (49-52)


so actual address 25 will be major number 7, minor number 0, address 26 is 7,1; etc.
actual address 50 would be 13,1


your math is close, but the major numbers start with 1, but the minor numbers are 0 relative 0-3.... goofy, but that is the way it works.

here's the rub: you select turnouts from the screen... you can either display the pairs on the screen or the sequence number of the defined switch...

so the sequence number is what I picked, so the actual address 1 through 28 in my case, displays on the screen, and also it matches the NMRA address of the switch machine. Also, I did not leave any gaps in the sequence, this makes scrolling through the turnouts easy and compact. You can leave gaps, but you will be scrolling through "blanks" on the screen.

the other way, to display the pairs, means you need to put the pair number on the turnout. I think it's much more difficult to remember 2 numbers per turnout.

There may be a much better way to do this, but I have not discovered it.

bottom line, one way is your re-address the turnouts to be in sequence, 1-99, etc, and make operation easy, or keep the sequence you have and have to scroll through the "blank" turnout numbers.

the other way is put the address pair on every turnout so you have changed their "lables".

I like the compact display, and being able to see the green and red LEDs, which makes it REALLY simple to see if the mainline is clear, or which turnout is "not normal".

Greg
 
Also, check out pg 18 of the Zimo MX820 manual (English). This describes how to map the Zimo addressing scheme into a "traditional" addressing scheme used by most manufacturers and supported by the z21 app.

Caveat: I know that the z21 app can drive standard turnout decoders (e.g. LGB & Massoth). I'm assuming that setting the mapping as per the Zimo manual will make the Zimo decoders work too.

Example: program decoder output to address 18
  • LGB 55025 output B: CV1=17
    • Note: the value in CV1 is rounded down to the nearest multiple of 4+1 (so 17..20 all map to 17) and then this value is used incrementally for outputs A..D, thus 17..20 respectively.
  • LGB 55525 output B: CV1=5 (and CV9=0)
    • Note: programming CV1 actually programs output A..D to respond to 17..20 respectively. If nothing is connected to the other outputs, it's OK to have them overlap with another decoder's address.
  • LGB 55524 (single output): CV1=18 (and CV9=0)
  • Massoth 8156101 output B: CV34=18 (and CV29.7=on and CV33=0)
  • Zimo MX820V output 2: CV1=5, CV9=0, CV33=10 (or =19)
    • This sets the decoder to be address "5" (which corresponds to 17..20) and the 2nd output to be driven by sub-address 1 (and thus 17+1=18).
      • From a user perspective, this is identical to the numbering scheme used by the LGB 55525, except that you can choose which address in the 17..20 range drives which output.
    • Note: CV33 (which assigns the sub addresses) assigns the outputs using decimal rather than binary math.
When configuring turnouts in the z21 app, it will work if you assign turnout numbers using "traditional" addresses rather than the canonical blocks used by the LGB 55525 and Zimo. I don't know if it's possible to specify turnout decoders in z21 using "canonical address + function".

Note: have not actually tried the Zimo (yet - still waiting on a delivery). All Zimo settings and behaviour are from the manual. I have actually implemented settings for the other decoders with the z21 app.

FYI Greg: the z21 app uses an entirely graphical interface for operating function decoders. You assign an ID to a graphic on a display, then tap the graphic to trigger the decoder output. As such, there's no benefit or cost to using any addressing scheme you choose for the decoders. If you have need to list them in a command station or cab then sequential numbering may be important.
 
Yes, that tells you how to set up the MX820 to a traditional addressing scheme.

My post is how to have the MX32 operate decoders in a traditional addressing scheme.

His issue is not the MX820, but having the MX32 control a decoder in a traditional addressing scheme and the Z21 app.

The "translation" is clearly the same.

Andrew, I already use the Z21 app on my MX10, started about a year ago, thanks. I have not set it up to control turnouts.

Note from the first post, he also has an MX32, and LGB controllers for the turnouts... I don't know what addressing scheme the LGB controllers use.'

My point was that with a Zimo command station and MX32, better to use contiguous addresses, not make the separate blocks of numbers as he described.

Greg
 
Hi Greg! I might be confused about exactly what is being asked.

Robin said "I am in the process of modifying some LGB turn out motors to fit the decoder inside the body, for external use, then program each decoder", so I assumed that MX820 decoders were being installed in the EPL drive housing and that the decoders needed to talk to the z21.

But you seem to be saying that the issue is understanding how the settings in the Zimo programmer and MX32 (specifically the addresses) relate to the settings in the z21.

My point was that with a Zimo command station and MX32, better to use contiguous addresses, not make the separate blocks of numbers as he described.
If you ever want to see your turnouts in "list view" (so to speak), that makes a lot of sense. I get away with blocking on my layout as I only care about the turnout IDs when I'm configuring - at runtime, I just tap on a map. Even so, I don't see a lot of benefit in having a very sparse turnout ID space - I might leave one block of 4 vacant if I expect to expand a junction later. But as I don't need list view, then there's also no drawback to just adding my new turnout decoder/s immediately at the end of the list and relying on the map to control the correct decoder.

I like complicated layouts. When I finish the current work, my layout will have three independent loops that can be joined in a couple of ways to make larger loops, plus some sidings. Coming from the LGB 55015, using the z21 app is amazing. Not only can I reliably control turnouts without needing to remember IDs and switch to/from "switch control mode", but it draws green routes on the map showing what paths are currently connected.
I like the compact display, and being able to see the green and red LEDs, which makes it REALLY simple to see if the mainline is clear, or which turnout is "not normal".
How do you relate the list view to the physical layout? Do you have matching lights / colours / symbols on the turnouts themselves? Or are there few enough "mainline" turnouts that you know which ones do which?

If you were to add some turnouts later, is there an easy way to just reorder the list to include them? Or would you need to reprogram the decoders if you wanted to insert into the list?

(Not trying to argue - I find "why this works for me" answers to be extremely educational, even if it's not my preferred solution.)
 
Ahh... I read just the LGB, not modifying, you are most likely correct, although what is being installed is not specified.

In a previous thread, he indicated that the turnout addresses were in blocks starting at 10, 20, 30, etc, non contiguous numbers, and I assumed this is the same situation, but perhaps this is not the same turnouts/decoders/layout.

The pictures are on that page that is linked. I run G scale outdoors, and the turnout number is on the housing, visible from a distance.

Using the display that shows the icon for the turnout, I believe you are forced to view in contiguous numbers, NMRA style.

If there is a way to show only defined decoders but with non-contiguous NMRA addresses, I have not found it yet.

Greg
 
Thanks again Greg and Andrew for your answers.

Greg your table of addresses and sub addresses is great, thanks for that. I would have thought something along those lines would be useful in the operating manual.

Each time I think I know what I am doing the system proves me wrong so let me start again. I have built the Zimo decoder into a standard LGB turnout motor for external use, the internal layout decoders are free under the base board. I need to program the decoder with its new operating address from the MX 32, set the new decoder internally to the MX 32 and then set the new decoder into the Z21 app on my I pad.

For simplicity I will name this turnout No 50.

If I understand the process the decoder is actually using the conventional dcc addressing system of a whole number, its the MX32 which is actually using the sub address system for its own internal purposes.

I start by programming decoder / turnout motor unit on the programming track with the MX32, for this I will use the "conventional" CV#1 = 50.
Loco screen -> E + MN -> SERV PROG. -> A -> Address entry screen -> #50 -> F -> should say ACK. It should then read back address as #50.

I then Enter the new decoder into its "slot" on the MX32
Loco screen -> shift + W -> basis panel -> slot number in top left corner e.g. #50 -> dcc pair = 13 , 1 -> W or A to save in to MX 32
Function button associated with no 50 on MX32 will now operate switch #50.

Now with turnout graphic #50 on Z21 driving screen set to 50 in the control station the iPad should operate the turnout.

Once I finally make this work I will look at the options for optimising the turnout slots on the MX32. I am going over again tomorrow and will have another go.

Robin
 
Warning: DCC details hacking follows, and might be incorrect if I've misunderstood something. If you don't mind being confused, see NMRA DCC extended packet format standard.

When a DCC packet is sent to an accessory decoder, it contains the following:
  • A two bit preamble 0x10 which indicates an accessory decoder address
  • 6 base address bits
    • Addresses 1-63. Address 0 is reserved for broadcasts.
  • 3 high address bits
    • Add 64 times this value to the address to get the actual decoder address. Standard addressing is thus in the range 1-511.
  • 3 bits that control which function outputs are being modified
    • The language in the standard is confusing, but it seems that 2 bits are commonly used which results in 4 different outputs that can be controlled.
You can observe that the LGB 55525 CV registers (page 10) actually follow this basically as-is:
  • CV1 takes values 1-63
  • CV9 takes values 0-7
However, there's a convention that each "function" has its own address, rather than being a sub-function of the actual address. Under this convention, packet address 1 outputs A-D are "addressed" as 1-4, packet address 2 outputs A-D are 5-8, etc. To obtain a packet address from a function address, apply the following:

packet address = (function address - 1) / 4 [drop fractions] + 1​

which simplifies to

packet address = (function address + 3) / 4 [drop fractions]​

The dropped fraction (0-3) is the decoder function being activated, with 0 being the first and 3 being the fourth.

Unhelpfully, the other table on pg 10 of the LGB 55525 manual maps function addresses ranges to CV9 without telling you how to derive the corresponding CV1 values. You might also note that sets of four addresses are missing - correspond to packet addresses 64, 128, etc. Normally you would access these with CV1 = 0 and CV9 = 1..7, but CV1 = 0 is not an available value on the 55525.

In contrast, the MX820 appears to allow any in-range combination of CV1 and CV9 except 0,0. The documentation on page 6 says that the split between CV1 and CV9 will be applied automatically by the ZIMO cab. If you're manually writing the CVs, you will need to be aware of how the address is split.

Note that accessory decoders do not have "extended addressing" like multi-function decoders, but they do have a bigger base range.



If I understand the process the decoder is actually using the conventional dcc addressing system of a whole number, its the MX32 which is actually using the sub address system for its own internal purposes.
No. The decoder is looking for the DCC decoder address in the packet, which is the one the MX32 is reporting to you. The MX32 "sub address" refers to which function gets triggered. The MX32 way of doing things is actually more accurate to the underlying system.

"Function addressing" (my term) is a fudge that pretends that the decoder address and the function indicator occupy a single address space which is 4x as large as the actual decoder address space.

I start by programming decoder / turnout motor unit on the programming track with the MX32, for this I will use the "conventional" CV#1 = 50.
Loco screen -> E + MN -> SERV PROG. -> A -> Address entry screen -> #50 -> F -> should say ACK. It should then read back address as #50.
With the caveat that I have never programmed an MX32, I suspect this will not do what you want. Assuming you are using an MX32 to program an MX820, I believe this will write 50 to CV1. 50 in CV1 corresponds to packet address 50 but function addresses 197-200.

If you want function address 50, you will need to write CV1=[(50+3)/4]=13. Note that 53/4 has a remainder of 1, so you will be addressing decoder 13, function B. If you're using an MX820D or E this will be a problem, as they only have an output for function A.
I then Enter the new decoder into its "slot" on the MX32
Loco screen -> shift + W -> basis panel -> slot number in top left corner e.g. #50 -> dcc pair = 13 , 1 -> W or A to save in to MX 32
Function button associated with no 50 on MX32 will now operate switch #50.
I do not understand how the MX32 command station gets involved here, so I'll leave that to someone else.

I believe that when I use the z21 app with a standard z21 that the command station just accepts and retransmits commands from the app (and syncs those commands to other apps). In the z21 case, the command station doesn't get involved in trying to reinterpret commands or remap their addresses.

Greg - does the MX32 have the facility to push layout configuration to the z21 app? Or could I actually just connect up the z21 app and then enter and run everything via the app without adding loco & turnout entries in the MX32, assuming that the various decoder CVs were already programmed correctly (via some unspecified tool that is not the MX32)?​
I know that instances of the z21 app can be told to share layout configuration between themselves, but there is no current facility to push or load layout configuration to the z21 itself. To me, the only obvious way the MX32 could do that is if it masqueraded as a z21 app that other apps could copy from.​
Now with turnout graphic #50 on Z21 driving screen set to 50 in the control station the iPad should operate the turnout.
If you set the z21 app to drive turnout 50, you are actually asking it to drive turnout 13.B. I'm pretty sure that the MX32 will just pass this along to the layout, rather than inferring that you actually mean a turnout with CV1=50.



Now, if you were using an LGB 55524 or LGB 55025 (output B), setting CV1=50 would do what you expect. If you were using a Massoth 8156101, then setting CV1 would do nothing useful, since Massoth allows the decoder to respond to locomotive addresses and uses CV1 (and optionally CV17-18) for their multi-function decoder roles. Instead, you would program CV34=50.

I don't think you've actually told us the exact model of decoder you are using, and that really, really matters.
 
Andrew, thank you for your explanation it will take me a little while to take in the detail.

the decoder I am using is theMX820 D which is the external model.

Robin
 
I think if you are using Zimo decoders the bottom line is you can use either "display method" on the MX32.

The thing that will control your decision seems to be the options to address decoders by the Z21 software (the MX32 can do either way). I have not used the Z21 app to control a turnout, but my guess is it uses the "pair" method of the address and subaddress.

You might ignore NMRA "single address" mode entirely.

Greg
 
I have not used the Z21 app to control a turnout, but my guess is it uses the "pair" method of the address and subaddress.
I tried it out. The UI for associating a DCC turnout address with a turnout icon has includes a dot, but when I entered "6.2", accepted, and then re-opened the UI it had truncated it to "6".

So it looks like the z21 cab app uses "function addressing" exclusively. See also FAQ 4.8 which talks about "function address" to module address mapping.
 
The most dangerous expression in software engineering is "what if we just ...".

This invariably gets you into trouble, because you end up encoding broken behaviour into the system that you will tie yourself in knots compensating for later.

What if we just...
  • counted how many times F1 was pressed and use that to trigger different functions? And then used the cab to emulate this behaviour on newer systems.
  • simplified module address + function output down to a single address value? And then can't standardise what the heck it means to write a particular address to CV 1.
I'm going with Zimo on this one. If everyone just used module + port rather than trying to remap address spaces then life would be a lot simpler.
 
Back
Top Bottom