Welcome To Mopar1973Man.Com LLC
We are privately owned, with access to a professional Diesel Mechanic, who can provide additional support for Dodge Ram Cummins Diesel vehicles. Many detailed information is FREE and available to read. However, in order to interact directly with our Diesel Mechanic, Michael, by phone, via zoom, or as the web-based option, Subscription Plans are offered that will enable these and other features. Go to the Subscription Page and Select a desired plan. At any time you wish to cancel the Subscription, click Subscription Page, select the 'Cancel' button, and it will be canceled. For your convenience, all subscriptions are on auto-renewal.
- Replies 5
- Views 2.5k
- Created
- Last Reply
Top Posters In This Topic
-
Me78569 2 posts
-
Mopar1973Man 1 post
-
kzimmer 1 post
-
Great work! 1 post
Popular Days
Featured Replies
Did This Forum Post Help You?
Show the author some love by liking their post!
Welcome To Mopar1973Man.Com LLC
We are privately owned, with access to a professional Diesel Mechanic, who can provide additional support for Dodge Ram Cummins Diesel vehicles. Many detailed information is FREE and available to read. However, in order to interact directly with our Diesel Mechanic, Michael, by phone, via zoom, or as the web-based option, Subscription Plans are offered that will enable these and other features. Go to the Subscription Page and Select a desired plan. At any time you wish to cancel the Subscription, click Subscription Page, select the 'Cancel' button, and it will be canceled. For your convenience, all subscriptions are on auto-renewal.
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