Hardware setup
Required components
Wiring diagram
The MCP2515 communicates with the Arduino over SPI. On the Arduino Mega, the hardware SPI pins are:
The CS pin is configurable in code. This implementation uses pin 53, the hardware SPI CS on the Mega.
Initialization code
cpp
#include <SPI.h>
#include <mcp_can.h>
const int SPI_CS_PIN = 53;
MCP_CAN CAN(SPI_CS_PIN);
void setup() {
while (CAN_OK != CAN.begin(MCP_ANY, CAN_250KBPS, MCP_8MHZ)) {
delay(100);
}
CAN.setMode(MCP_NORMAL);
}
CAN.begin() parameters:
MCP_ANY
—
No mask filter (receive all)
CAN_250KBPS
250 kbps
Standard J1939 speed for heavy vehicles
MCP_8MHZ
8 MHz
Crystal frequency on the module
Installing the library
Install mcp_can by Cory Fowler from the Arduino IDE library manager, or clone directly:
bash
cd ~/Documents/Arduino/libraries
git clone https://github.com/coryjfowler/MCP_CAN_lib
Important
Always place a 120 Ω resistor between CAN_H and CAN_L at each end of the bus. Without terminators, signal reflections will make the bus unstable.