I am currently using the mcp_2515 library provided by cory fowler as posted. GitHub - coryjfowler/MCP_CAN_lib: MCP_CAN Library I am running into issues sending an extended CANBUS message. I have a CANBUS shield with a 16MHz Crystal with a MCP2515 and TJA1050. I have attached how I have the MCP2515 connected to the Mega as well as my code. Any help on how to get this working would be helpful!
Serial.println(sndStat,DEC); is returning a Timeout message
`// CAN Send Example
//
#include <mcp_can.h>
#include <SPI.h>
MCP_CAN CAN0(53); // Set CS to pin 10
void setup()
{
Serial.begin(115200);
// Initialize MCP2515 running at 16MHz with a baudrate of 500kb/s and the masks and filters
disabled.
while(CAN0.begin(MCP_ANY, CAN_500KBPS, MCP_16MHZ) != CAN_OK)
Serial.println("MCP2515 Initializing");
Serial.println("Initialized MCP2515");
CAN0.setMode(MCP_NORMAL); // Change to normal mode to allow messages to be
transmitted
}
byte data[8] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07};
void loop()
{
// send data: ID = 0x100, Standard CAN Frame, Data length = 8 bytes, 'data' = array of data
bytes to send
byte sndStat = CAN0.sendMsgBuf(0xFFA1, 1, 8, data);
if(sndStat == CAN_OK){
Serial.println("Message Sent Successfully!");
} else {
Serial.println(sndStat,DEC);
}
delay(3000); // send data per 100ms
}
/******************
END FILE
*******/`
It is initializing fine. When it enters the main loop, it fails sending the message with an extended ID of "FFA1" with a code of 7 which is #define CAN_SENDMSGTIMEOUT (7). No idea why the message wont send
Are you testing in isolation or is it connected to a second MCP2515 or a CAN bus with active devices?
To test a sender you also need a receiver otherwise ACKS don't get set.
The outline of the board you posted looks like a Niren board and they ship with a 8MHz crystal. Have you made your own version of a Niren board with a 16MHz crystal?