PCM Diagnostics & Tuning HP Tuners | Holley | Diablo

DIY: Getting data from Holley CAN BUS

Thread Tools
 
Search this Thread
 
Old Jan 21, 2025 | 03:29 PM
  #81  
cjohnson6772's Avatar
Teching In
10 Year Member
 
Joined: Nov 2012
Posts: 17
Likes: 0
Default

Originally Posted by LSswap
First thing I see is that you've got two different things named "sendCAN" One is a subroutine and the other is an instance of the CAN library. I don't think it's the cause of your problem but... change the subroutine name for less confusion.

You problem is that there is nothing on the receiving end of the canbus wires. Hook something up that expects the same speed and protocol and it should go away. I tested this with my current J1939 CANBUS encoder project.

What does that gear indicator cost anyway? Their we site seems to be hacked or someting.
Thank you for the quick reply! That gear indicator is around $250 retail. The application I am working on already has an electronic dial gauge set that has integrated the PCS gear indicator into the bezel/cluster. If possible I really need to stay with this gear indicator if at all possible to avoid having to redesign/manufacture the mounting/etc. I did go ahead and change the name of the subroutine with no improvement. Just to confirm, you were able to test and confirm that the code worked as intended? I have also tried using an OBD plug and HPT today as a diagnostic tool, but I am still getting the same error when trying to connect.
Reply
Old Jan 21, 2025 | 03:52 PM
  #82  
LSswap's Avatar
Thread Starter
TECH Fanatic
10 Year Member
Liked
Loved
Community Favorite
 
Joined: Nov 2014
Posts: 1,308
Likes: 660
Default

Originally Posted by cjohnson6772
Thank you for the quick reply! That gear indicator is around $250 retail. The application I am working on already has an electronic dial gauge set that has integrated the PCS gear indicator into the bezel/cluster. If possible I really need to stay with this gear indicator if at all possible to avoid having to redesign/manufacture the mounting/etc. I did go ahead and change the name of the subroutine with no improvement. Just to confirm, you were able to test and confirm that the code worked as intended? I have also tried using an OBD plug and HPT today as a diagnostic tool, but I am still getting the same error when trying to connect.
Not exactly, I ran your code on a standalone can setup and got the same error as you. Then I ran my own code in a setup where I was transmitting messages to the CAN encoder below. When I unplugged the CAN connection, I got the same exact error as you did. When I plugged the can back in, it stopped.

BTW, I'm working with a canbus display device, that can not only display what gear you are in, but has a touch screen and dial that has advanced haptic inputs like touch and swipe. It has a GUI builder that lets you put in any graphics or text and any number of screens. All kinds of canbus controlled stuff like screen dimming, progress bars, gauges, etc. It's a Grayhill Touch encoder. A single hole with a locking nut mounts it.



Reply
Old Jan 21, 2025 | 05:07 PM
  #83  
cjohnson6772's Avatar
Teching In
10 Year Member
 
Joined: Nov 2012
Posts: 17
Likes: 0
Default

That encoder looks very slick. Lots of potential in a small package. Did everything related to the can send function look like your implementation? Are you able to post any snippets of transmit code for comparison? I’m wondering if there is like an initialization frame or handshake or something that I’m missing. The gear indicator is connected to the other end of the CAN bus but so far no luck.
Reply
Old Jan 21, 2025 | 06:59 PM
  #84  
LSswap's Avatar
Thread Starter
TECH Fanatic
10 Year Member
Liked
Loved
Community Favorite
 
Joined: Nov 2014
Posts: 1,308
Likes: 660
Default

Originally Posted by cjohnson6772
That encoder looks very slick. Lots of potential in a small package. Did everything related to the can send function look like your implementation? Are you able to post any snippets of transmit code for comparison? I’m wondering if there is like an initialization frame or handshake or something that I’m missing. The gear indicator is connected to the other end of the CAN bus but so far no luck.
I never tried two MCP2515s on a single processor, but that shouldn't be a problem IMHO. Maybe check that you didn't mix up your CAN high and CAN Low. Also terminators should be in the circuit, but not critical for short distances.

I added some of your code to mine to check the error message. Here is a little routine that send a request to the encoder to see what screen it's on every half a second. I use this to see when the encoder finally boots up (takes a few seconds) before I send it more data and also to make sure we haven't lost communication. The encoder then sends back a response and if I don't get the screen number back, I'll know it's FUBAR.



Your code looks fine otherwise

Last edited by LSswap; Jan 21, 2025 at 07:07 PM.
Reply
Old Feb 5, 2025 | 11:41 PM
  #85  
NoStepOnSnek's Avatar
Teching In
 
Joined: Feb 2025
Posts: 3
Likes: 0
From: Bloomington IL
Default

Wait, so something like this could be made into a dash?
Reply
Old Feb 6, 2025 | 08:04 AM
  #86  
LSswap's Avatar
Thread Starter
TECH Fanatic
10 Year Member
Liked
Loved
Community Favorite
 
Joined: Nov 2014
Posts: 1,308
Likes: 660
Default

Yes, absolutely! But...... you're probably going to need an intermediary processor with 2 can bus interfaces and lots of code in between. The reason for 2 canbus interfaces is because most automotive canbus are are 500kb or 1000kb. This one appears to be 250kb.

That looks like an industrialized intelligent display similar to the 7" one in my setup (post 78 in this thread) only it talks canbus instead of a simple serial interface and it doesn't have a touch screen. Probably a bit brighter which is a plus.

A CANBUS interface is great for industrial apps because of it's inherent noise immunity, but for simplicity of interfacing a serial one is simpler.

The code in your intermediary processor will have to translate the can data from the source can input (or just from sensors) and decide how often to update the can display so as not to overload it. In my touch screen, there are about 7000 lines of code that are for the most part dedicated to the display. Doesn't need to be that complicated for just displaying data but mine has full live editing capability, and is more of a user interface than just a display.

Almost all of these new intelligent devices, like this display, and the touch encoder and my 7" touch screen have a GUI that runs on a PC to help set up the graphics and the location and the appearance of each of the variables you will need to address on the screen. That makes the setup of the display easier.

Maybe post the actual link to this display so we can look at the details.

Last edited by LSswap; Feb 6, 2025 at 08:13 AM.
Reply
Old Feb 6, 2025 | 09:07 AM
  #87  
NoStepOnSnek's Avatar
Teching In
 
Joined: Feb 2025
Posts: 3
Likes: 0
From: Bloomington IL
Default

Originally Posted by LSswap
.

Maybe post the actual link to this display so we can look at the details.

I'll try and do that today. Maybe I posted the wrong one. I swore the one I found initially was 1mb/s
Reply
Old Feb 6, 2025 | 11:22 AM
  #88  
LSswap's Avatar
Thread Starter
TECH Fanatic
10 Year Member
Liked
Loved
Community Favorite
 
Joined: Nov 2014
Posts: 1,308
Likes: 660
Default

If you find one that can work at the same speed as your CAN and it can be taught to translate certain PIDS to variables, on the screen, then you should be able to make it work as a display. The GUI would have to be told what the pids it's interested in and how to convert that data to variables on the screen. I havn't seen any like that yet, but that's how I would design the GUI if I were creating a general purpose display. But I assume these are more for custom medical equipment where the developers have the ability to customize the protocol messages to the display and not the other way around. Curios to see what you find.

However if then interface is like the on in the Grayhill Touch encoder I played with, it expects the messages with specific addresses and specific contents and I don't believe it can be trained to understand foreign commands other than the specific ones defined in the documents Here is the Grahill Touch Encoder CAN protocol

Last edited by LSswap; Feb 6, 2025 at 11:29 AM.
Reply
LS1 Tech Stories

The Best V8 Stories One Small Block at Time

story-0

Amazing '71 Camaro Restomod Is Modern Muscle Car Under the Skin

 Verdad Gallardo
story-1

6 Common C5 Corvette Failures and What's Involved In Repairing Them

 Pouria Savadkouei
story-2

Retro Modern Bandit Pontiac Trans AM Comes With Burt Reynolds' Autograph

 Verdad Gallardo
story-3

Top 10 Greatest Cadillac V Series Performance Models Ever, Ranked

 Pouria Savadkouei
story-4

Top 10 Most Powerful Chevy Trucks Ever Made!

 
story-5

Hennessey's New Supercharged Silverado ZR2 Has 700 HP

 Verdad Gallardo
story-6

Coachbuilt N2A Anteros Is an LS2-Powered C6 Corvette In Italian Clothes

 Verdad Gallardo
story-7

Awesome K5 Blazer Restomod Comes With C7 Corvette Power

 Verdad Gallardo
story-8

10 Camaros You Should Never Buy

 
story-9

10 LS Engine Myths That Refuse to Die

 Verdad Gallardo
Old Feb 6, 2025 | 01:09 PM
  #89  
LSswap's Avatar
Thread Starter
TECH Fanatic
10 Year Member
Liked
Loved
Community Favorite
 
Joined: Nov 2014
Posts: 1,308
Likes: 660
Default

Found the tech dataset for your display: https://mm.digikey.com/Volume0/opasd...0FGAAASA01.pdf

Couple of takeaways. It says it has a capacitive touchscreen. It got lots of other interface options like rs232 and more. It says 250k is default, but no way to change it.

They even hard arduino code examples for it: https://github.com/Smart-Display-Ser...duino_Examples

Digikey does not stock it. They also make one in 7"
Reply
Old Feb 6, 2025 | 05:39 PM
  #90  
Project GatTagO's Avatar
TECH Senior Member
20 Year Member
Liked
Loved
Top Answer: 1
iTrader: (7)
 
Joined: Mar 2003
Posts: 10,615
Likes: 1,883
From: Little Austin
Default

Originally Posted by LSswap
Found the tech dataset for your display: https://mm.digikey.com/Volume0/opasd...0FGAAASA01.pdf

Couple of takeaways. It says it has a capacitive touchscreen. It got lots of other interface options like rs232 and more. It says 250k is default, but no way to change it.

They even hard arduino code examples for it: https://github.com/Smart-Display-Ser...duino_Examples

Digikey does not stock it. They also make one in 7"
Scanning through some of the Winstar documentation it says that they can work with existing DBC files. The little 3.5" screen would make for a nifty dash to display transmission channels that are brought into Holley EFI.

Andrew
Reply
Old Feb 10, 2025 | 09:59 AM
  #91  
justinmlloyd's Avatar
Teching In
 
Joined: Jan 2025
Posts: 4
Likes: 2
Default

Hi all,
Just wanted to say thank you for this post. I've been wanting to make a gas mileage computer for my Holley Sniper for a few years now and finally took on the project.
With the help of this post in particular, I was able to finally crack the Holley Sniper with my Arduino and get live data from the ECU.
Extremely exciting and rewarding to see the numbers that pop up in the Serial Monitor match the values that are on the handheld display!

Not sure how to post the code as it says it's too long.

Reply
Old Feb 10, 2025 | 10:42 AM
  #92  
exiled350's Avatar
Teching In
 
Joined: Sep 2024
Posts: 10
Likes: 1
Default

Originally Posted by justinmlloyd
Not sure how to post the code as it says it's too long.
This looks quite promising, my project got back burnered due to an unscheduled engine rebuild but I'd really like to see your code. Maybe try zipping the INO file and naming it something simple the. Reattaching it.
Reply
Old Feb 10, 2025 | 11:34 AM
  #93  
justinmlloyd's Avatar
Teching In
 
Joined: Jan 2025
Posts: 4
Likes: 2
Default

#include <Arduino.h>
#include <mcp_can.h>

float RPM, pulseWidth, dutyCycle, closedLoopComp, targetAFR, AFR, lbPerHour, timing, IAC, MAP, TPS, MAT, CTS, battery;

union CANData
{
unsigned char arr[4];
float value;
};

MCP_CAN CANBus(53); //CS Pin. 10 for UNO
int CANStatus;

void setup()
{
Serial.begin(115200);
Initialize();
}

void loop()
{
if (CANStatus == CAN_OK)
{
CheckForCANMessage();
Serial.println("RPM: " + String(RPM) + " MAP: " + String(MAP) + " CTS: " + String(CTS));
}
}

void Initialize()
{
CANStatus = CANBus.begin(MCP_ANY, CAN_1000KBPS, MCP_8MHZ);

if (CANStatus == CAN_OK)
{
pinMode(2, INPUT);
CANBus.setMode(MCP_NORMAL);
}
else
{
Serial.println("Init fail: " + String(CANStatus));
}
}

void CheckForCANMessage()
{
if (!digitalRead(2))
{
unsigned long int ID;
unsigned char len;
unsigned char buff[8];

CANBus.readMsgBuf(&ID, &len, buff);

ID = ID & 0xFFFFF800;

union CANData val;

val.arr[3] = buff[0];
val.arr[2] = buff[1];
val.arr[1] = buff[2];
val.arr[0] = buff[3];

float newVal = (float)(val.value);

switch (ID)
{
case 0x9E005000: RPM = newVal; break;
case 0x9E009000: pulseWidth = newVal; break;
case 0x9E00D000: dutyCycle = newVal; break;
case 0x9E011000: closedLoopComp = newVal; break;
case 0x9E015000: targetAFR = newVal; break;
case 0x9E019000: AFR = newVal; break;
case 0x9E039000: lbPerHour = newVal; break;
case 0x9E049000: timing = newVal; break;
case 0x9E059000: IAC = newVal; break;
case 0x9E05D000: MAP = newVal; break;
case 0x9E061000: TPS = newVal; break;
case 0x9E065000: MAT = newVal; break;
case 0x9E069000: CTS = newVal; break;
case 0x9E06D000: battery = newVal; break;
}
}
}
Reply
Old Feb 10, 2025 | 11:37 AM
  #94  
justinmlloyd's Avatar
Teching In
 
Joined: Jan 2025
Posts: 4
Likes: 2
Default

I was able to strip it down to its most basic form, so looks like I got it to fit.
Holley's documentation doesn't seem to line up, but the main thing that I discerned from their documentation is that the value for the Sniper CAN Bus data is that it's a float. Once it's cast to a float, everything works as it should.
This code is set up for a Mega 2560 board, so the Chip Select (CS) pin is set for 53. An UNO would need it set to 10.
Reply
Old Feb 10, 2025 | 12:28 PM
  #95  
exiled350's Avatar
Teching In
 
Joined: Sep 2024
Posts: 10
Likes: 1
Default

Originally Posted by justinmlloyd
I was able to strip it down to its most basic form, so looks like I got it to fit.
Holley's documentation doesn't seem to line up, but the main thing that I discerned from their documentation is that the value for the Sniper CAN Bus data is that it's a float. Once it's cast to a float, everything works as it should.
This code is set up for a Mega 2560 board, so the Chip Select (CS) pin is set for 53. An UNO would need it set to 10.
Good to know. I'm guessing you are tapped into the four pin connection, what's the pinout on it? I haven't have much luck finding a good answer and can't check mine as it's sitting on the floor right now.
Reply
Old Feb 10, 2025 | 12:49 PM
  #96  
LSswap's Avatar
Thread Starter
TECH Fanatic
10 Year Member
Liked
Loved
Community Favorite
 
Joined: Nov 2014
Posts: 1,308
Likes: 660
Default

BTW, I'd like to post the code for the standard Holley bus, but I don't have a Holley ECU to test with. If someone lends me one for a short period of time, I'll write the sample code and test it, and then drop it here. Then I'll return the Holley.

I built an engine simulator, so I can plug this in the Holley to test out the code.
Reply
Old Feb 10, 2025 | 05:55 PM
  #97  
justinmlloyd's Avatar
Teching In
 
Joined: Jan 2025
Posts: 4
Likes: 2
Default

Originally Posted by exiled350
Good to know. I'm guessing you are tapped into the four pin connection, what's the pinout on it? I haven't have much luck finding a good answer and can't check mine as it's sitting on the floor right now.
Yes. I got a splitter off of Amazon for about $15 (much better than Holley's version for $45). It works great for keeping my handheld connected and sending data to the Arduino.
The power and ground aren't needed for this setup as everything is already powered. Just need the High / Low to the CAN Bus transceiver.

Reply
Old Feb 11, 2025 | 05:34 AM
  #98  
exiled350's Avatar
Teching In
 
Joined: Sep 2024
Posts: 10
Likes: 1
Default

Originally Posted by justinmlloyd
Yes. I got a splitter off of Amazon for about $15 (much better than Holley's version for $45). It works great for keeping my handheld connected and sending data to the Arduino.
The power and ground aren't needed for this setup as everything is already powered. Just need the High / Low to the CAN Bus transceiver.
That's perfect, thanks. Now I can finally ditch the y cable in the engine compartment and integrate it into the engine harness and run it into the interior.
Reply
Old Mar 8, 2025 | 09:34 PM
  #99  
patracy's Avatar
Teching In
15 Year Member
 
Joined: May 2009
Posts: 14
Likes: 0
From: West Georgia
Default

Anyone figured out how to pull the ethanol content from the flex fuel sensor over canbus?
Reply
Old Mar 9, 2025 | 12:17 AM
  #100  
NoStepOnSnek's Avatar
Teching In
 
Joined: Feb 2025
Posts: 3
Likes: 0
From: Bloomington IL
Default

Originally Posted by LSswap
Found the tech dataset for your display: https://mm.digikey.com/Volume0/opasd...0FGAAASA01.pdf

Couple of takeaways. It says it has a capacitive touchscreen. It got lots of other interface options like rs232 and more. It says 250k is default, but no way to change it.

They even hard arduino code examples for it: https://github.com/Smart-Display-Ser...duino_Examples

Digikey does not stock it. They also make one in 7"
This is definitely getting outside my wheelhouse. Lol
Reply



All times are GMT -5. The time now is 08:04 PM.

story-0
Amazing '71 Camaro Restomod Is Modern Muscle Car Under the Skin

Slideshow: This heavily modified 1971 Camaro mixes classic muscle car styling with a fifth-generation Camaro interior and modern LS3 power.

By Verdad Gallardo | 2026-05-12 18:06:42


VIEW MORE
story-1
6 Common C5 Corvette Failures and What's Involved In Repairing Them

Slideshow: From wobbling harmonic balancers to failed EBCMs, these are the issues that define long-term C5 ownership and what repairs typically involve.

By Pouria Savadkouei | 2026-05-07 18:44:57


VIEW MORE
story-2
Retro Modern Bandit Pontiac Trans AM Comes With Burt Reynolds' Autograph

Slideshow: A modern Camaro transformed into a retro icon, this limited-run "Bandit" build blends nostalgia with brute force in a way few revivals manage.

By Verdad Gallardo | 2026-04-21 13:57:02


VIEW MORE
story-3
Top 10 Greatest Cadillac V Series Performance Models Ever, Ranked

Slideshow: Cadillac didn't just crash the high-performance luxury vehicle party, it showed up loud, supercharged, and occasionally a little unhinged...

By Pouria Savadkouei | 2026-04-16 10:05:15


VIEW MORE
story-4
Top 10 Most Powerful Chevy Trucks Ever Made!

Slideshow: Top ten most powerful Chevy trucks ever made

By | 2026-03-25 09:22:26


VIEW MORE
story-5
Hennessey's New Supercharged Silverado ZR2 Has 700 HP

Slideshow: Hennessey has turned the Silverado ZR2 into a 700-hp off-road monster with supercharged V8 power and a limited production run.

By Verdad Gallardo | 2026-03-24 18:57:52


VIEW MORE
story-6
Coachbuilt N2A Anteros Is an LS2-Powered C6 Corvette In Italian Clothes

Slideshow: A one-off sports car that looks like a vintage Italian exotic-but hides a C6 Corvette underneath-just sold for the price of a new mid-engine Corvette.

By Verdad Gallardo | 2026-03-23 18:53:41


VIEW MORE
story-7
Awesome K5 Blazer Restomod Comes With C7 Corvette Power

Slideshow: A heavily reworked 1972 K5 Blazer swaps its off-road roots for a low-slung street-focused build with modern V8 power.

By Verdad Gallardo | 2026-03-09 18:08:45


VIEW MORE
story-8
10 Camaros You Should Never Buy

Slideshow: There are thousands of used Camaros on the market but we think you should avoid these 10

By | 2026-02-17 17:09:30


VIEW MORE
story-9
10 LS Engine Myths That Refuse to Die

Slideshows: Which one of these myths do you believe?

By Verdad Gallardo | 2026-01-28 18:10:11


VIEW MORE