Decoder Pro No Acknowledge from loco

Koen van Bockhooven Feb 6, 2022

  1. Koen van Bockhooven

    Koen van Bockhooven New Member

    5
    2
    4
    Hi All,

    I have installed DCC++EX version 3.1 and this works fine with Rocrail and JMRI for normal operations. Except for the program track. I get error 308, no acknowledge, in Decoder Pro. I have seen other user having te same problem, but following the hints (change setting like ACK LIMIT, MIN and MAX) nothing helps. With everything to default, I get in the Arduino monitor the following:

    * ACK baseline=0/0mA Threshold=20/59mA Duration between 4000us and 8500us *>
    <* VB cv=29 value=0 *>
    <* NO-ACK after 148mS max=1/2mA pulse=0uS samples=155 gaps=0 *>
    <* V0 cv=29 bit=7 *>
    <* NO-ACK after 145mS max=1/2mA pulse=0uS samples=72 gaps=0 *>
    <* V1 cv=29 bit=7 *>
    <* NO-ACK after 141mS max=1/2mA pulse=0uS samples=36 gaps=0 *>
    <* Auto JOIN *>
    <* Callback(-1) *>
    <* ACK baseline=0/0mA Threshold=20/59mA Duration between 4000us and 8500us *>
    <* VB cv=29 value=0 *>
    <* NO-ACK after 148mS max=1/2mA pulse=0uS samples=160 gaps=0 *>
    <* V0 cv=29 bit=7 *>
    <* NO-ACK after 145mS max=1/2mA pulse=0uS samples=75 gaps=0 *>
    <* V1 cv=29 bit=7 *>
    <* NO-ACK after 141mS max=1/2mA pulse=0uS samples=37 gaps=0 *>
    <* Auto JOIN *>
    <* Callback(-1) *>
    <* ACK baseline=0/0mA Threshold=20/59mA Duration between 4000us and 8500us *>
    <* VB cv=29 value=0 *>
    <* NO-ACK after 148mS max=1/2mA pulse=0uS samples=160 gaps=0 *>
    <* V0 cv=29 bit=7 *>
    <* NO-ACK after 143mS max=1/2mA pulse=0uS samples=75 gaps=0 *>
    <* V1 cv=29 bit=7 *>
    <* NO-ACK after 142mS max=1/2mA pulse=0uS samples=38 gaps=0 *>
    <* Auto JOIN *>
    <* Callback(-1) *>

    Whatever I try (several loco's, different motor shield, different powersupply) or settings I change (ACK LIMIT, ACK MIN, MAX values) the error persists. When I set <1 JOIN> the loco reacts to the throttle setting normally.

    Any suggestions?

    Regards,

    Koen van Bockhooven
    Netherlands
     
  2. Sumner

    Sumner TrainBoard Member

    2,835
    5,969
    63
    Hopefully one of the others will see this or post it on their Discord Server ( HERE ). I have a suggestion though. I see <* Auto JOIN *> showing up in the log. Is that saying that the track is still joined to the 'Main'?

    Following is a quote from ( HERE )....

    "The use of the JOIN function ensures that the DCC signal for the MAIN track is also sent to the PROG track. This allows the prog track to act as a siding (or similar) in the main layout even though it is isolated electrically and connected to the programming track output. However, it is important that the prog track wiring be in the same phase as the main track i.e. when the left rail is high on MAIN, it is also high on PROG. You may have to swap the wires to your prog track to make this work. If you drive onto a programming track that is “joined” and enter a programming command, the track will automatically switch to a programming track. If you use a compatible Throttle, you can then send the join command again and drive off the track onto the rest of your layout!"

    Have you tried sending a 'program command' using the serial monitor? Is the wiring in the same phase?

    Maybe another useful reference ( HERE ).

    Sumner
     
  3. Ash

    Ash TrainBoard Member

    106
    67
    8
    There is something wrong... What is your DCC++EX setup? What motor board? Perhaps you could provide the startup diagnostics. It seems that you do not have current sensing on pin A1.
     
    Sumner likes this.
  4. Koen van Bockhooven

    Koen van Bockhooven New Member

    5
    2
    4
    I have a mega2560, an ethershield and a deek robot motorshield. I did not make any changes to the software. I tried a different motorshield (Arduino clone) and also without the ethernet shield. I will provide the startup diagnostics later this week.

    Regards,
    Koen
     
  5. BigJake

    BigJake TrainBoard Member

    3,296
    6,327
    70
    This may be a red herring, but on SPROG systems, you have to select between different connection types to the command station in JMRI for running trains (main) and the programming track when you configure Decoder Pro's profile for programming vs Panel Pro's or other profiles for running trains.

    Is this setting of different JMRI connection types also necessary for DCC-EX++?

    If not, please disregard...
     
  6. Koen van Bockhooven

    Koen van Bockhooven New Member

    5
    2
    4
    Hi Andy,

    I don think settings in JMRI are the problem. When I issue the <R> command in the Arduino serial monitor, the response is exactly the same.

    Regards,
    Koen
     
  7. Koen van Bockhooven

    Koen van Bockhooven New Member

    5
    2
    4


    Hi Sumner,

    I have used the <JOIN> command to see whether or not the loc on the PT is moving and responding to the Throttle (and it does). The PT is not connected or part of the MAIN track, so phasing does not seem very important for now. But: maybe I will connect the PT to the MAINS and will definitely look at the phasing.

    Thanks for sharing your thoughts.

    Regards,
    Koen
     
    Sumner likes this.
  8. Ash

    Ash TrainBoard Member

    106
    67
    8
    Analog input A1 is not registering current sense. Current sense is not required to run trains, but if it is not working, it is also not providing overcurrent warnings/protection.

    Since you have tried with two boards having the same pinouts, let's assume that A1 is faulty. To use A2 instead, bend out pin A1 of the motor shield so that it does not make contact with the Arduino. On the motor shield, use a jumper from A1 to A2.

    A custom motor shield definition is needed to use A2 for program track current sense. Paste this into your config.h file.
    Code:
    #define UPDATED_MOTOR_SHIELD F("UPDATED_MOTOR_SHIELD"),    \
        new MotorDriver(3, 12, UNUSED_PIN, UNUSED_PIN, A0, 2.99, 2000, UNUSED_PIN), \
        new MotorDriver(11, 13, UNUSED_PIN, UNUSED_PIN, A2, 2.99, 2000, UNUSED_PIN)
    #define MOTOR_SHIELD_TYPE UPDATED_MOTOR_SHIELD
    -- AND: comment-out the existing #define MOTOR_SHIELD_TYPE

    Then upload the sketch.

    One reason the startup diagnostics are useful is that a current sense offset reading is taken at startup. For a standard motor shield, it is normally close to zero.
    Another reason is that it tells which version of the software is loaded.
     
    Koen van Bockhooven likes this.
  9. Koen van Bockhooven

    Koen van Bockhooven New Member

    5
    2
    4
    Hi Ash,

    This weekend finally found some time to experiment further. I have tried this with an Arduino and a Motor shield, via the serial port. Then it all works fine! After that I took another Arduino Mega, an Ethernet shield and the Motor shield. That also works as expected. Did not try all loco's, so maybe ack limits and times must be adjusted.

    So the problem was the Mega! I have also noticed that when using an Ethernet shield and a Motor shield stacked on each other, the connection is critical, since you have to use Arduino header extensions to stack it all. But now it works fine. I plan to install a small Ethernet shield and connect it via wires to the Mega.

    Thanks for your support!

    Regards,
    Koen
     
    Sumner likes this.

Share This Page