ELM329
Talking to the Vehicle (continued)
That is because rpm is sent in increments of 1/4 rpm!
To convert to the actual engine speed, we need to
divide the 6904 by 4. A value of 1726 rpm is much
more reasonable.
identification number (VIN). This number is 17 digits
long, and typically takes 5 lines of data to be
represented. It is obtained with mode 09, PID 02, and
should be requested with:
Note that these examples asked the vehicle for
information without regard for the type of OBD protocol
that the vehicle uses. This is because the ELM329
takes care of all of the data formatting and translation
for you. Unless you are going to do more advanced
functions, there is really no need to know what the
protocol is.
The above examples showed only a single line of
response for each request, but the replies often
consist of several separate messages, either from
multiple ECUs responding, or from one ECU providing
messages that need to be combined to form one
response (see ‘Multiline Responses’ on page 37). In
order to be adaptable to this variable number of
responses, the ELM329 normally waits to see if any
more are coming. If no response arrives within a
certain time, it assumes that the ECU is finished. This
same timer is also used when waiting for the first
response, and if that never arrives, causes ‘NO DATA’
to be printed.
>09 02
or with:
>09 02 5
if you know that there are five lines of data coming. If
you should mistakenly send 09 02 1, you will only
receive the first few bytes of the VIN.
This ability to specify the number of responses
was really added with the programmer in mind. An
interface routine can determine how many responses
to expect for a specific request, and then store that
information for use with subsequent requests. That
number can then be added to the requests and the
response time can be optimized. For an individual
trying to obtain a few trouble codes, the savings are
not really worth the trouble, and it’s easiest to use the
old way to make a request (ie do not put the single
digit after the request).
If you know how many responses to expect from a
request, it is possible to speed up the retrieval of
information a little. That is, if the ELM329 knows how
many lines of data to receive, it knows when it is
finished, so does not have to go through the final
timeout, waiting for data that is not coming. Simply add
a single hex digit after the OBD request bytes - the
value of the digit providing the maximum number of
responses to obtain, and the ELM329 does the rest.
For example, if you know that there is only one
response coming for the engine temperature request
that was previously discussed, you can now send:
Hopefully this has shown how typical requests are
made using the ELM329. If you are looking for more
information on modes and PIDs, it is available from
the SAE (www.sae.org), from ISO (www.iso.org), or
from various other sources on the web.
>01 05 1
and the ELM329 will return immediately after obtaining
only one response. This may save a considerable
amount of time, as the default time for the AT ST timer
is 100 msec. (The ELM329 still sets the timer after
sending the request, but that is only in case the single
response does not arrive.)
For protocols other than J1939, make sure that
you know how many lines of data to expect when
using this method, not how many responses (J1939 is
able to use the count for the number of messages).
For example, consider a request for the vehicle
ELM329DSB
Elm Electronics – Circuits for the Hobbyist
www.elmelectronics.com
28 of 76