DCC++: No acknowledge from locomotive (308)

MVP May 5, 2019

  1. Randy Harris

    Randy Harris New Member

    1
    0
    1
    thanks so much for the updates to the Sketch. Been fighting “no acknowledge” problems for days. The two new files worked. I am using Paragon 3 decoders.
     
  2. olif

    olif New Member

    2
    0
    1
    Locomotive Fleischmann BR70 H0
    Decoder Doehler&Haass SD10A
    DCC++ Arduino UNO with Deek-Robot Motor Shield
    updated PacketRegister.cpp and PacketRegister.h

    I still get "no acknowledge from loco (308)" when searching for the decoder on program track. I am able to read cv's if I don't get an 308 error, but if I read one value several times I get a different result each time.
    On main track sometimes the loco is moving but most of the time it is only standing there with lights flickering alternating front and back. Then suddenly the loco moves backwards a litlle bit. Only once I was able to get some sound!
    If I put my ESU Lok Pilot decoder on the BR70 everything is o.k. The decoder is found by JMRI, prog and main track are working. The same with another loco with Lensz standard v2 decoder.

    Is there someone who made similar expearence with d&h sd10a decoders?
    I also contacted d&h but they stated that this is a software problem with dcc++ software and not a decoder issue and gave me the hint to change the packet register files.
     
  3. Sumner

    Sumner TrainBoard Member

    2,834
    5,968
    63
    If you are using the original DCC++ that was pretty common to get 308 errors.

    I'd strongly recommend moving to DCC++EX.....

    https://dcc-ex.com/

    Much improved. I hardly ever get a 308 error any more and if one does they have built in a lot of flexibility to solve the problem.....

    https://dcc-ex.com/reference/software/diagnostic-d-ack-command.html

    With the original I could get around the 308 problem most of the time by cleaning the track, the wheels, pickups etc. to get the electrical connection perfect. With DCC++EX the commands in the second link above allow you to overcome electrical and out of spec decoder problems by changing how the Command Station sends and receives Ack's making the situation not so touchy. Not sure if any of the commercial systems allow you to do that.

    Sumner
     
  4. olif

    olif New Member

    2
    0
    1
    Thank you for your advice! I installed DCC-EX and followed the diagnostics. As a result I decreases ACK LIMIT to 25mA and got the acknowledge.
    Here is the list from serial monitor of arduino ide.

    19:26:24.872 -> <* License GPLv3 fsf.org (c) dcc-ex.com *>
    19:26:24.872 -> <* LCD0:DCC++ EX v4.0.0 *>
    19:26:24.872 -> <* LCD1:Lic GPLv3 *>
    19:26:24.872 -> <* MotorDriver currentPin=A1, senseOffset=0, rawCurrentTripValue(relative to offset)=668 *>
    19:26:24.872 -> <* MotorDriver currentPin=A0, senseOffset=0, rawCurrentTripValue(relative to offset)=668 *>
    19:26:24.872 -> <iDCC-EX V-4.0.0 / UNO / STANDARD_MOTOR_SHIELD G-a26d988>
    19:26:24.872 -> <* NO HAL CONFIGURED! *>
    19:26:24.872 -> <* Signal pin config: normal accuracy waveform *>
    19:26:24.872 -> <* SETUP("<D ACK LIMIT 25>") *>
    19:26:24.872 -> <* LCD1:Ack Limit=25mA *>
    19:26:24.872 -> <* LCD3:Ready *>
    19:26:24.872 -> <* LCD2:power Off *>
    19:26:24.872 -> <p0>
    19:26:24.872 -> PPA0
    19:26:24.872 -> <* LCD3:Free RAM= 762b *>
    19:27:44.320 -> <* LCD2:power On PROG *>
    19:27:44.320 -> <p1 PROG>
    19:27:44.320 -> PPA0
    19:27:44.320 -> <* LCD3:Free RAM= 750b *>
    19:28:14.134 -> Ack diag on
    19:28:28.104 -> <* ACK baseline=14/41mA Threshold=22/65mA Duration between 4000us and 8500us *>
    19:28:28.104 -> <* V0 cv=8 bit=7 *>
    19:28:28.198 -> <* ACK after 68mS max=27/80mA pulse=4988uS samples=222 gaps=245 *>
    19:28:28.245 -> <* V0 cv=8 bit=6 *>
    19:28:28.245 -> <* ACK after 9mS max=27/80mA pulse=8352uS samples=101 gaps=32 *>
    19:28:28.339 -> <* V0 cv=8 bit=5 *>
    19:28:28.339 -> <* ACK after 6mS max=27/80mA pulse=6032uS samples=71 gaps=23 *>
    19:28:28.479 -> <* V0 cv=8 bit=4 *>
    19:28:28.479 -> <* ACK after 5mS max=27/80mA pulse=4756uS samples=55 gaps=17 *>
    19:28:28.620 -> <* V0 cv=8 bit=3 *>
    19:28:28.667 -> <* ACK after 6mS max=27/80mA pulse=6380uS samples=76 gaps=24 *>
    19:28:28.808 -> <* V0 cv=8 bit=2 *>
    19:28:28.808 -> <* ACK after 9mS max=27/80mA pulse=4120uS samples=94 gaps=27 *>
    19:28:28.948 -> <* V0 cv=8 bit=1 *>
    19:28:28.948 -> <* ACK after 5mS max=27/80mA pulse=4524uS samples=52 gaps=15 *>
    19:28:29.089 -> <* V0 cv=8 bit=0 *>
    19:28:29.230 -> <* NO-ACK after 144mS max=93/278mA pulse=116uS samples=76 gaps=101 *>
    19:28:29.276 -> <* VB cv=8 value=1 *>
    19:28:29.417 -> <* NO-ACK after 149mS max=79/236mA pulse=56uS samples=149 gaps=38 *>
    19:28:29.417 -> <* LCD0:Retry 8 2 Sum=1 *>
    19:28:29.417 -> <* ACK baseline=11/32mA Threshold=19/56mA Duration between 4000us and 8500us *>
    19:28:29.417 -> <* V0 cv=8 bit=7 *>
    19:28:29.558 -> <* NO-ACK after 142mS max=51/152mA pulse=348uS samples=61 gaps=124 *>
    19:28:29.558 -> <* V1 cv=8 bit=7 *>
    19:28:29.698 -> <* NO-ACK after 144mS max=51/152mA pulse=20472uS samples=77 gaps=204 *>
    19:28:29.698 -> <* LCD0:Retry 8 1 Sum=2 *>
    19:28:29.698 -> <* ACK baseline=16/47mA Threshold=24/71mA Duration between 4000us and 8500us *>
    19:28:29.745 -> <* V0 cv=8 bit=7 *>
    19:28:29.745 -> <* ACK after 12mS max=29/86mA pulse=6324uS samples=132 gaps=40 *>
    19:28:29.792 -> <* V0 cv=8 bit=6 *>
    19:28:29.839 -> <* ACK after 13mS max=27/80mA pulse=4700uS samples=148 gaps=43 *>
    19:28:29.886 -> <* V0 cv=8 bit=5 *>
    19:28:30.026 -> <* NO-ACK after 145mS max=56/167mA pulse=348uS samples=77 gaps=8 *>
    19:28:30.026 -> <* V0 cv=8 bit=4 *>
    19:28:30.167 -> <* NO-ACK after 144mS max=49/146mA pulse=696uS samples=76 gaps=86 *>
    19:28:30.167 -> <* V0 cv=8 bit=3 *>
    19:28:30.355 -> <* NO-ACK after 145mS max=43/128mA pulse=116uS samples=76 gaps=0 *>
    19:28:30.355 -> <* V0 cv=8 bit=2 *>
    19:28:30.495 -> <* NO-ACK after 144mS max=53/158mA pulse=116uS samples=76 gaps=5 *>
    19:28:30.495 -> <* V0 cv=8 bit=1 *>
    19:28:30.636 -> <* NO-ACK after 145mS max=52/155mA pulse=116uS samples=77 gaps=83 *>
    19:28:30.636 -> <* V0 cv=8 bit=0 *>
    19:28:30.776 -> <* NO-ACK after 144mS max=24/71mA pulse=0uS samples=77 gaps=0 *>
    19:28:30.823 -> <* VB cv=8 value=63 *>
    19:28:30.964 -> <* NO-ACK after 144mS max=26/77mA pulse=116uS samples=77 gaps=0 *>
    19:28:30.964 -> <* Callback(-1) *>
    19:28:30.964 -> <r1|1|8 -1>
    19:29:57.856 -> <* ACK baseline=12/35mA Threshold=20/59mA Duration between 4000us and 8500us *>
    19:29:57.856 -> <* V0 cv=8 bit=7 *>
    19:29:57.997 -> <* NO-ACK after 141mS max=86/257mA pulse=116uS samples=45 gaps=28 *>
    19:29:57.997 -> <* V1 cv=8 bit=7 *>
    19:29:58.090 -> <* ACK after 90mS max=45/134mA pulse=4924uS samples=211 gaps=45 *>
    19:29:58.184 -> <* V0 cv=8 bit=6 *>
    19:29:58.184 -> <* ACK after 22mS max=28/83mA pulse=4408uS samples=244 gaps=63 *>
    19:29:58.231 -> <* V0 cv=8 bit=5 *>
    19:29:58.278 -> <* ACK after 11mS max=27/80mA pulse=4696uS samples=129 gaps=35 *>
    19:29:58.325 -> <* V0 cv=8 bit=4 *>
    19:29:58.372 -> <* ACK after 32mS max=27/80mA pulse=5856uS samples=96 gaps=94 *>
    19:29:58.419 -> <* V0 cv=8 bit=3 *>
    19:29:58.465 -> <* ACK after 23mS max=27/80mA pulse=5280uS samples=244 gaps=68 *>
    19:29:58.512 -> <* V0 cv=8 bit=2 *>
    19:29:58.512 -> <* ACK after 15mS max=27/80mA pulse=6436uS samples=164 gaps=42 *>
    19:29:58.606 -> <* V0 cv=8 bit=1 *>
    19:29:58.606 -> <* ACK after 21mS max=27/80mA pulse=6432uS samples=228 gaps=64 *>
    19:29:58.700 -> <* V0 cv=8 bit=0 *>
    19:29:58.700 -> <* ACK after 14mS max=27/80mA pulse=4928uS samples=149 gaps=36 *>
    19:29:58.794 -> <* VB cv=8 value=128 *>
    19:29:58.794 -> <* ACK after 5mS max=27/80mA pulse=5104uS samples=61 gaps=19 *>
    19:29:58.794 -> <* Callback(128) *>

    As you can see the first attemt was not successful, the second was. I still cannot read the decoder when establishing a new loco. JMRI finds other decoders but not mine.
     
  5. 308GTSi

    308GTSi TrainBoard Member

    437
    983
    16
    I'll second what you said about cleaning wheels and track. I recently put TCS decoders in a couple of Kato SD70M's and I made some real basic errors and ended ups with the "308" error.
    The locos had only had a few runs on DC about 2 months earlier and been put away without cleaning the wheels. These locos have blackened wheels so they are hard to tell if the wheels are clean or not.
    I didn't clean the track because it "looks clean enough" ........... stoopid !

    The problem was almost no contact to the track and it couldn't connect. I had to drag the loco over a cleaning cloth , move the flywheel a little to rotate the wheels around slightly and repeat the wheel cleaning ............ over and over and over.

    It would have been easier to return it to DC if it didn't mean soldering the motor tabs off and on again.
     
  6. Eduardo Castro

    Eduardo Castro New Member

    2
    1
    1
    I have some Locos with Digitrax decoders. I had same error (No acknowledge from locomotive (308)) when I updated the 2 files that RCMan suggested that fixed the acknowledge error but the address reading is unstable, every time I try to read the address I get a different address and very high value, if I try to write a new address the decoder is not saving it in it. I tried DCC-EX as someone else suggested but then I had the No acknowledge issue again, then I reverted to the regular DCC++ but I still have communication address issues with the digitrax decoder. What else do I need to change in the arduino code? it looks like a time problem with the DIgitrax and the DCC++ code (BTW I scoped the DCC signal on the decoder and it's not noisy, the DCC is signal clean so no dirty track issue)
    Help, I don't know what else to do

    Oh I forgot to say, the decoder is the DH121, could be those are very old and crappy?
    This is the screenshot of the address reading from the same decoder
    Screenshot 2023-01-22 025023.png
     
  7. Sumner

    Sumner TrainBoard Member

    2,834
    5,968
    63
    I'd sure stick with the DCC++-EX. Has worked much better than the old DCC++ for me. Fewer initial problems programming and more possible fixes to work with if they continue.

    Did you also try some of the possible fixes here....

    https://dcc-ex.com/support/ex-cs-troubleshooting.html#loco-programming-issues-1-or-jmri-308-error

    .... and here.....

    https://dcc-ex.com/reference/tools/diagnostic-d-ack-command.html

    The 2nd link above might be able to address that. Also I know that the track appears to be clean but I'd still wipe it down along with the wheels. Not going to hurt and I've had that fix things in the past as far as being able to program the decoder.

    Hopefully you can find a fix and report back here so that some of us that are interested can see what it was. Also maybe post on their Discord site ( HERE ) and maybe someone else has run into it with that decoder.

    Sumner
     
    Last edited: Jan 22, 2023
  8. Eduardo Castro

    Eduardo Castro New Member

    2
    1
    1
    Thank you Sumner for the link to show how to run diagnostics, that was very useful. Doing that I could know that the decoder is dead, the the locomotive have 6 LEDs that light up the Loco numbers, does LEDs are on always, then the current from them "cheats" the controller and it thinks the decoder was responding and that's why the random address number, to discover that I removed the decoder from the locomotive and I connected it directly to the controller and then the current reading was 0mA, I put in the oscilloscope the A0 output from the Motor shield and I could see how the LEDs produce a current pulse, and when only the decoder is connected there is not current pulse at all (dead decoder). I think there is a design issue with the LEDs' resistor, it's too small then the current form the LEDs are too much, that fools the controller also those LEDs should be connected to the light function from the decoder instead direct to the power.
    I'll buy a new decoder and try again, this time everything should work
    Thank you so much for your help.
     
    Sumner likes this.

Share This Page