How (not) to use DTCs (check engine codes) to diagnose problems

I see a lot of misunderstanding of what it means when your “check engine light” (MIL: Malfunction indicator Lamp) is on and what the “codes” (DTC: Diagnostic Trouble Codes) mean. Let’s discuss this a bit in general terms that apply to most vehicles and situations. As with everything, there are always exceptions.

First of all, why does your MIL come on? It’s because the ECU has stored a “hard” DTC. This is an event which likely has happened many times and with sufficient severity that the DTC has gone from a “pending” state (which you can read with a code reader but does not illuminate the MIL) to a “hard” state.

An easy example: you have a misfire on cylinder 1 once. No DTCs are stored, pending or otherwise. A counter and timer is started. If this event reoccurs a specific number of times in a specific period of time (could be actual time, time when certain conditions such as speed or engine temp are met, or number of cold start cycles – for misfires it’s typically just regular time) a pending DTC is stored. If the event does not reoccur, the counter is cleared or decremented based on rules very similar to those that would increment the counter. Should the counter reach a predetermined threshold a hard DTC will be set and your MIL will illuminate. Specifically for misfires (and no other common DTC that I am aware of) this counter has a third threshold that when reached will flash the MIL. This is a special situation for misfires that happens to tell you to STOP DRIVIG NOW because you are dumping enough raw fuel into your exhaust that it could cause catalytic converter damage.

Now, that was pretty simple, because P0301 means something very obvious: cylinder 1 is mifiring. There’s not much more to it than that, little room for interpertation, and little room for error. Or is there? What if the other cylinders on that bank are also misfiring but haven’t reached a threshold to set a DTC? That certainly changes the possible cause of this symptom from a single plug/wire/COP/compression/injector issue to something effecting an entire bank or the whole motor. So how do you know what’s going on? Live data and logging. You can see all of those counters as well as the DTCs with a laptop, some free software, and a $20 OBDII to USB cable off of eBay.

This is the part where I tell you about DTCs in general, even that very clear Cylinder 1 misfire, not being an actual problem. DTCs are not problems. They are symptoms. If you keep that mentality you’ll be able to successfully use them for diagnostics.

So the guy at AutoZone read the codes for you and it said P0420 Catalyst Inefficient and he told you that means your catalytic converter is dead. Seems simple enough, but he’s probably wrong. All this actually means is that the upstream (pre-cat) and downstream (post-cat) O2 sensors are reporting similar values. O2 sensors are chemical voltage generators. They expect a difference between the upstream and downstream ones in an effort to tell if the catalytic converter is functioning well enough. When that difference drops below a certain threshold it sets a hard DTC.

P0420=replace cat. How can it mean anything else? Well, if you know that your motor is running 100% (meaning all thing mechanical, all sensors, all ECUs, and good fuel) it really is that simple….the cat is bad. But you really don’t know that those other conditions have been met. Chances are good they have not. The first problem here is that O2 sensors age or get damaged in ways that the ECU hasn’t yet met a criteria to call them “bad” and set an appropriate DTC. There is a DTC dependency tree that makes a lot of sense but can be quite complicated. An easy one that is applicable to this example is that you will NEVER get a P0420 if you have one of several codes indicating a problem with the upstream or downstream O2 sensor on that bank because it is rightly assumed that if either O2 sensor is bad, any extrapolated data from it will be bad as well. This is why you can have a code indicating your upstream O2 is bad, replace it and clear that code, only to have a P0420 come up later: it was simply impossible for the P0420 to be set while the upstream was considered non or low-functioning.

More reasons you can’t accept this P0420 diagnosis: you engine coolant temperature sensor could be faulty. But that should set a DTC also, right? Yes. But just like O2 sensors, it can lie for a bit before the criteria are met for it to set a DTC and have it’s data disregarded. So you check that: it’s pretty simple….you read the live data and compare it to another coolant sensor you have installed or the readings of an IR thermometer that has been appropriately placed. How about another problem? Retarded spark timing. If your are actually knocking from fuel that is too low of an octane, incorrect or damaged spark plugs, etc the timing is going to get “pulled” by the ECU. The fact that the ECU is doing this should preempt the P0420 code, but this won’t always be the case, as the time overlap may not be great enough. And, let’s face it, this is software. It’s imperfect and you aren’t exactly running Windows Update on it once a week. Things just don’t get fixed and mechanics who are familiar with your particular model car/ECU will probably be aware of these types of issues. Now onto another one: exhaust leak. If you have a leak in front of your upstream sensor if just might cause a P0420. Conversely, if you have a leak in front of the downstream but behind the upstream it could actually MASK a failing catalytic converter from the ECU/sensors.

So here we are with what seems like a pretty simple DTC to diagnosis, yet we have 3 or 4 things, all of which are either or both cheaper or more likely to be the issue. All of which require different methods to test and eliminate. All of which require actual knowledge of how a motor works, what and where the sensors read, and how an ECU interprets and uses that data to be of any diagnostic value to you.

This is why the articles of late in regards to “Ban the Check Engine Light” are both short sighted and ignore the larger issue: DTCs are NOT diagnoses. They are often little better than vague pointers to a specific line of troubleshooting. Improving the “accuracy” of these indicators, or making a car that was truly self-diagnosing would take so many sensors and redundant systems to check the validity of the data that it would be impractical both technically and financially with what he have available today.

So there you have it. Even though we have these wonderful data gathering devices in every car made past 1997 or so you still need someone who knows what they mean, because you simply can’t accept their output at face value. Fortunately, if you’re reading this you are probably the kind of person to ask questions and learn much of this for yourself. Car specific forums are often very good for this, as certain DTCs tend to correspond with certain known problems that are make/model specific.

I’ve skipped over a lot here, but the intention was to give people who are just starting out wrenching or running to a parts store to have their codes read some insight on what they actually mean and hopefully save them some money on incorrect parts and the time it takes to replace them.


One response to “How (not) to use DTCs (check engine codes) to diagnose problems”

  1. Morris Avatar

    Thank you for this information. I personally have chased that P0420 code all over a car that I previously owned.

    I am now having an issue with my MIL coming on with no DTC’s being stored. It always resets itself after a while, but this seems to be a malfunction of the computer itself. Any advice?

Leave a Reply

Your email address will not be published. Required fields are marked *