1. For people that want an Android app to read the 97 850 vehicle mileage, XantheFIN's app will do it. You'll have to contact him to evaluate his latest BETA version.
2. For people that want a very simple Python program to read the 97 850 vehicle mileage, check out:
- mikeri's volvoforums.com thread:
http://volvoforums.com/forum/volvo-850- ... 327-84508/
This works for M44 as well as M43.
- mikeri's MVS post:
http://www.matthewsvolvosite.com/forums ... 14#p371344
I think mikeri's program is a **very** good, simple introduction to how to initiate a connection to the '97 850 COMBI using an ELM327 compatible device and to interpret the responses in realtime. It's true that mikeri's executable is for Windows. But he supplies you the Python source, and you can run Python apps on many different platforms, so it should be adaptable to about any common platform. That's one reason I think it is such a good example.
I'm in the process of making mikeri's Python program more robust, since sometimes it reports an erroneous mileage in the 10000-11000 miles range due to a lack of sufficient error processing.
3. For people that want a more extensive (open source) program to read the 97 850 vehicle mileage, reset the SERVICE light, reprogram the Service intervals, read/clear DTCs, perform both COMBI / ABS / SRS / AW 50-42 style diagnostics as well as standard OBDII emission diagnostics, the Window's based volvo850diag / IE / Realterm / Javascript program will work. However, with volvo850diag / IE / Realterm you have to perform interpretation of the data in a non-realtime fashion using a server based interpreter. volvo850diag can be downloaded from
http://jonesrh.info/volvo850/volvo850.zip. For info, view pages at the
http://jonesrh.info/volvo850/ portal.
4. Lucif3r, glad to see you've gotten hooked up with XantheFIN and with volvo850diag. Remember volvo850diag is "super"-open source, since it's using the CC0 license, which is essentially public domain.
5. Also, glad to hear you are trying to get an Arduino interface to your 97 V70's Motronic 4.4.
An Arduino should be able to communicate with a '96-'98 850/S70/V70 Motronic 4.4 with either an ELM327 or a VAG/COM KKL cable.
5a. I think you already can see from volvo850diag that you'll be able to get an ELM327 connecting the Arduino with the Motronic 4.4.
Be sure to use volvo850diag's "Full Scan All ECUs" facility. That's the main place in volvo850diag v0.7 that there is a small amount of scanning of Motronic 4.4. There's only 3-5 items that are interpreted by kwpd3b0_interpreter at present, since I don't have a Motronic 4.4 to work with and haven't had time to combine some of the rkam-sourced info and the MotronicSuite M44 conversion tables into proper M44 intrepretations.
PM me or e-mail me if you would like me to send you some snippets from the in-development volvo850diag v0.8beta that have exhaustive scanning of the M44 using the rkam-sourced info on one of the Volvo forums. You can then just paste the snippet into your present volvo850diag version. You'll have to figure out how to interpret most of them yourself.
Like XantheFIN mentioned, the ELM327 totally eliminates the need for you to do any detailed 5-baud programming.
And the ELM327 can inherently do regular OBDII emission diagnostics, and can also be made to do the KWPD3B0 diagnostics (COMBI, ABS, SRS, Motronic 4.4 via KWPD3B0, etc).
5b. But you can also connect your Arduino interface to M44 using the VAG/COM KKL cable (probably either FTDI based or CH340 based or whatever based). In some ways its more difficult than the ELM327, but in other ways it's simpler than the ELM327. Plus with the VAG/COM KKL approach, you could do M44 flashing, logging of the high-speed data acquistion from flashed M44 ECMs that output for Tuner-Pro, do OBDII pin 7 to pin whatever programming for other ECMs (eg, the M43), etc. Those later 3 things an ELM327 will never do.
The approach you were going to use to perform your 5-baud connection is what I think everyone uses nowadays, since I don't think there are any serial chips that allow setting the baud rate to 5-baud -- namely, toggling the transmit line every 200 ms to simulate the 1 start bit, 8 data bits (or for some of the bytes in the init sequence, 7 data bits + 1 parity bit), then 1 stop bit. The trick after sending the target ECU address at 5-baud is to get your ISO 9141-2 mandated timing correct enough so the rest of the init sequence exchange transpires to the target ECU's satisfaction and to your Arduino's satisfaction. There's also some complication in the init sequence where at least 1 or the last 2 bytes exchanged involves odd parity (according to the ISO 9141-2 spec). So basically you've got something like:
- Toggle the transmit line for an extended time -- you would probably want to do this for 500-750 ms at least -- I forget if it is high or low.
- Toggle for 200 ms to produce the start bit.
- Toggle for 200 ms each for each of the target ECU's bits -- I don't remember if it is LSB first or MSB first. Check the spec.
- Toggle for 200 ms to produce the stop bit.
- Set baud rate to 10400 baud.
- Initiate a read for 3 bytes.
- Wait for the 3 bytes which represented in hex are "55 D3 B0". If you don't get those in -- say double whatever the ISO 9141-2 spec's maximum time for those bytes -- and, most certainly, if they are "55 08 08" or anything other than "55 D3 B0" (when you are trying to connect to M44 with KWPD3B0 or performing any KWPD3B0 comm), then I'd abort the init sequence and wait at least 2.1 full seconds before starting another init sequence. If you did get those 3 bytes...
- Forget the ISO 9141-2's spec about determining the baud rate from the timing of those bytes or the spacing between them. Just assume the baud rate is 10400 baud, for simplicity sake.
- Wait for halfway between the ISO 9141-2's spec's min and max before sending the response byte. The timing before sending that byte after the 55 D3 B0 can be critical to establishing the link to the target ECU, so play around with it if necessary.
- Initiate a read for 1 byte.
- Wait for the ECU's 1 byte response for an appropriate time.
- Verify that byte if you like.
- Wait a significant length of time before sending your first request after the Slow Init sequence is finished. IIRC, this delay was ~300 ms.
- Now you can send your KWPD3B0 requests.
- You'll have to remember to send a KeepAlive within about 4.8 seconds of the last communication. Otherwise, the target ECU will timeout and disconnect. Make sure you don't use an unreasonably frequent KeepAlive timer like Brick-Diag Free v0.0.6.6 does -- less than 1 second. That's way too frequent. Anything in the 3-4 second range should be fine.
Rather than me list what you might send at this stage and the consequent KWPD3B0 exchange, let's take this approach...
Since you have both an ELM327 and a VAG/COM KKL cable, I'd suggest you get an OBDII Y splitter, hook your Bluetooth ELM327 to one leg, hook the VAG/COM KKL cable to the other leg, first connect to your target ECU with the ELM327 (similar to what you've seen volvo850diag do), then type ATPC, then type ATMA, then have the terminal emulator controlling the ELM327 to just wait and record activity. If you have an OBDLink SX, OBDLink LX, or OBDLink MX, I'd use that to do the ATMA recording, since it'll record all the byte of the Slow Init, except for the target byte.
After you get the ELM327-compatible device in ATMA mode, run Vol-FCR (either Full or Demo, but if you use the Vol-FCR FTDI Demo, you'll need a VAG/COM KKL FTDI cable) or run Brick-Diag Free v0.0.6.6. For either of these programs you'll see B9F0 / F9F0 exchange for every ECU, optional other B9xx / F9xx exchanges for other ECUs (eg, for the M44), then the A1 / E1 KeepAlive exchanges.
This ATMA log can be your primary instructor of what you would send from your Arduino app to perform KWPD3B0 comm with an M44, and the primary instructor of what are the normal responses.
DO NOT try to communicate on both legs of the OBDII Y cable at the same time.
6. As far as why manual issuance of commands didn't work with Realterm, whereas volvo850diag did work with Realterm, I'd guess the problem was either:
6a. inadvertently typing the wrong command, or
6b. taking too long to establish the ISO 9141-2 connection via either ATSI or the initial KWPD3B0 request and the Bluetooth ELM327 goes through some sort of Low Power shutdown.
There is one of the 3 ELM327 terminal emulator Android apps that I consistently had this problem with when I was first testing my OBDLink LX Bluetooth device with terminal emulators. It seems like the problem was with the Android terminal emulator by Qbek. I had already setup the OBDLink LX to have a long time before the Low Power shutdown kicked in. So I don't really know what the problem really was. I dealt with the problem by simply typing fewer commands and typing them quicker.
7. COMBI Vehicle Mileage in B903 indicates: 153840 miles * 1.60934 = 247581 km.
Not sure the reason for the COMBI (ECU 51) B903 value being higher than your digital odometer by ~980 km. I thought the S70/V70 cars normally had very little disparity between the two. But having a several hundred mile disparity between the two is common for the 850 cars.
8. By the way, thanks VERY, VERY MUCH for verifying that your ECU 51 B903 value is in miles / 10 (without me having to ask the question!). Several days ago, XantheFIN convinced me his 850's ECU 51 B903 is in miles / 10, yet his mechanical odometer and Trip Computer Odometer are in km (or 0.1 km). I believe at least one other owner from Canada has also witnessed this same behavior. So (sometime in the coming weeks) I'll go ahead and update the jonesrh.info/volvo850/ portal to reflect that ECU 51 B903 may be in miles always, worldwide, even for cars whose Instrument Panel (naturally) displays the speedometer and odometer(s) in metric units for cars targeted at metric countries.
9. Your volvo850diag submission showed an ECU 51 B90A value of "1F 00" = 001F -> 31 (engine hours of "lost" mileage per 1000 km of B905 SRI Mileage limit). That's one of the highest values I've seen. This tells me
your SERVICE light comes on far sooner than you would expect it to, **if** the SERVICE light is coming on due to the SRI Mileage limit. A good way to test this is to use volvo850diag to (temporarily) change your ECU 51 B905 SRI Mileage limit from 30000 km to 1000 km (until the SERVICE light is illuminated again).
9a. Is your ABS supplying the Vehicle Speed Signal consistently now?
9b. Does the speedometer ever fail to function?
9c. Do you ever see ECU 51 B90A increment?
If your answers are Yes, No, No, and if you change ECU 51 B905 SRI Mileage limit from 30000 km to 1000 km, then I (presently) predict that your SERVICE light would come on 546 km +/- 16.1 km after the last Reset SRI. The "COMBI B903 & B904 are in miles/10, and B90A > 0" calculation is explained at
http://jonesrh.info/volvo850/elm327_rea ... .html#b905 and goes like this:
(((B903 - B904) * 10) + (B905 * B90A * 9.1 miles per engine hour)) >= (B905 * 1000 * 0.621) +/- 10
In your car's case, assuming B90A holds steady at 31 (ie, 1F hex), and assuming you change B905 to 1 (ie, 1000 km), this equation becomes:
(((B903 - 15384) * 10) + (1 * 31 * 9.1 "lost" miles per engine hour in B90A per 1000 km)) >= (1 * 1000 * 0.621) +/- 10
or:
(((B903 - 15384) * 10) + 282.1 "lost" miles) >= 621 miles +/- 10 miles
So:
(B903 * 10) >= 153840 miles + 621 miles - 282.1 "lost" miles +/- 10 miles
(B903 * 10) >= 154178.9 miles +/- 10 miles
and I'd expect the SERVICE light coming on at:
ECU 51 B903 = 15416 (remote probability), 15417 (possible), 15418 (more probable), 15419 (remote probability)
Since the 282.1 "lost" miles ~= 282.1 * 1.60934 km ~= 454 km, if you had reset the Odometer the same time you had done the last Reset SRI, I'd expect the odometer to say somewhere between 1000 - 454 "lost" km +/- 16.1 km, ie between about 529.9 and 562.1 km.
If you've removed the SERVICE light from your dash or if your SERVICE light is burnt out, you can monitor when the SERVICE would normally have come on (if the SERVICE light were in the dash and working correctly) by looking at bit 3 of the data in the ECU 51 E506 response to the A506 request or bit 3 of slot 6 of the data in the ECU 51 E507 response to the A507 request.
10. Lucif3r, I have other questions about your COMBI DTCs and freeze frames that kwpd3b0_interpreter saw. I'll PM you about those. I've never seen a COMBI with as many DTCs as yours. Apparently, you created some DTCs very recently while testing. I'm curious to know which are real and which are "manufactured" as test cases.
11. To anyone: Are you willing to perform some details research to figure out the following on your 97 V70 and its Motronic 4.4?
11a. Meaning of each bit in the ECU 51 A506 status byte? There are differences from the 850 cars and don't yet understand fully the S70/V70 cars.
11b. Meaning of ECU 51 B90C's 3 values? I'm not convinced they are temperatures since Brick-Diag Free v0.0.6.6 threads don't mention any temperatures.
11c. Meaning of ECU 51 B901, B90B, B90D, and B90E, and all their valid values?
11d. Do you know how to clear ECU 51 B90A?
11e. If I send you the volvo850diag v0.8beta snippets relating to M44 scanning, could you get scans both with ignition pos II, as well as engine idling, as well as while driving at somewhere between 30-70 mph (at a steady cruise control controlled speed on fairly flat road)?
esl97850T5