Pristine CTD. Extra cab, short bed, 2wd, SLT. Factory tow/haul package, leather heated seats, heavy insulation package. Rebuilt HX 35/40, Dap injectors, full gauges, PacBrake, Dynamic Transmission vb/servos/accumulator/strut/band/triple disc. Soft tranny lines, 40k trans cooler, lift pump, gooseneck hitch (never used), class 5 tow hitch, tonneau cover, air bags, re- geared to 3.73’s, 3rd Gen brakes with 17" rims Rust free CA truck located in Chico CA, 100 miles north of Sacto. I built this to
-
Price: 16000
-
Location: Chico CA 95973
Cummins Can bus messages
I need some help decoding these messages. I’m not sure about the timing command it requests 25*BTDC at idle as soon as
it is started when cold then comes down after a long warm up to about 15*. That seems very high.
Could it really be going that high?
// 24 Valve Cummins CAN bus messages. How to decode them ?
// Arduino Uno and MCP2515 CAN module (no name) from Asia.
22 40 8 4 30 98 23 96 6 11 13 P >> E 74158432 diff 25256 idle val sw acc pedal up timing error counter 2 RPM range 3 Fuel temp F 46
A2 40 8 AE FF 0 0 B8 2 10 3 P >> E 74158904 diff 472 Offset? -82 Volts 13.9
20 0 8 12 1 0 0 3 6 2B D E >> P 74159476 diff 572 cylinder 2 Fuel percent 6.7 Timing deg 15.4 RPM 842
A0 0 8 F8 2 0 0 16 1 42 1 E >> P 74159868 diff 392 ACK
22 40 8 4 30 9D 43 96 6 11 13 P >> E 74182240 diff 22372 idle val sw acc pedal up timing error counter 3 RPM range 3 Fuel temp F 46
A2 40 8 AE FF 0 0 B0 2 C 3 P >> E 74182720 diff 480 Offset? -82 Volts 13.8
20 0 8 1B 1 0 0 FA 5 21 D E >> P 74183292 diff 572 cylinder 4 Fuel percent 6.9 Timing deg 15.3 RPM 840
A0 0 8 F8 2 0 0 16 1 42 1 E >> P 74183688 diff 396 ACK
Bytes 2 and 3 are for 29 bit CAN IDs and are not shown. Byte 4 is the data length. Long numbers and 'diff' are timestamps
I took manual control of the VP's timing solenoid that causes the timing lock bit to set (P0216)
<<pseudo code>>
//Not sure about this compute fuel temp in Inj Pump >> message ID 0x22 DEC 34
fuelTemp = (dataBuff[y][12] << 8) | dataBuff[y][11];
fuelTemp = (fuelTemp / 100) - 40;
fuelTemp = ((fuelTemp * 9) / 5) + 32;
Serial.print(" Fuel temp F ");
Serial.print(fuelTemp);
// compute timing advance >> message ID 0x20 DEC 32
Timing = (dataBuff[y][10] << 8) | dataBuff[y][9]; //convert from little endian. 100 bits per degree.
Timing = (float)((Timing) / 100); //
Serial.print(" Timing deg ");
Serial.print(Timing, 1);
//Fuel compute >> ID 0x20
FuelPCT = (dataBuff[y][6] << 8) | dataBuff[y][5];
FuelPCT = (float)(FuelPCT*100) / 4096; // 4095 is max fuel allowed by pump
Serial.print(" Fuel percent ");
Serial.print(FuelPCT, 1);
//second message from IP (0xA2 DEC 162) has other stuff in it.
//looks like a +/- offset or +/- error.
// hangs around 0x0001 - 0xFFFE
if(dataBuff[y][0] == 0xA2)
{
offSet = (dataBuff[y][6] << 8) | dataBuff[y][5];
Serial.print(" Offset? ");
Serial.print(offSet);
// This byte changes from 0 to 1 after a delay. Seems to check if the timing advance mechanism is
// able to match the commanded timing value
//0x22 message ID
(dataBuff[y][6] == 0x00) ? Serial.print(" timing locked ") : Serial.print(" timing error ");
//compute RPM from ID 20xx bytes 11 and 12
RPM = (dataBuff[y][12] << 8) | dataBuff[y][11]; //convert from little endian
RPM = RPM/4 ; //divide by 4