I have a working code that uses MCP2515 CAN module. Wanted to minimize the size of required modules, so I went with VP230 CAN transceiver and I'm having trouble relaying the same data through different libraries. All it has to do is log in with the first ''payload1'' and send voltage instruction with ''setdefaultvolt''. Any help is greatly appreciated.
MCP2515 code:
#include <mcp_can.h>
#include <mcp_can_dfs.h>
#include <SPI.h>
#include <Wire.h>
//pins:
#define CAN_INT 17 // Set INT to pin 2
MCP_CAN CAN(5); // Set CS to pin 4 (D2)
void setup()
{
Serial.begin(115200);
delay(100);
pinMode(17, INPUT); //Setting pin 2 for /INT input
START_INIT:
if(CAN_OK == CAN.begin(MCP_ANY, CAN_125KBPS, MCP_8MHZ))
{
}
else
{
delay(100);
goto START_INIT;
}
CAN.setMode(MCP_NORMAL); //set operation mode to normal so the MCP2515 sends acks to received data.
unsigned char payload1[8] = {0x16, 0x50, 0x71, 0x07, 0x97, 0x089, 0x00, 0x00}; //login data with serial number
CAN.sendMsgBuf(0x05004804, 1, 8, payload1); //send login data
unsigned char setdefaultvolt[5] = {0x29, 0x15, 0x00, 0xFE, 0x10}; //this is the command for setting the default output voltage (Last two bytes, LSB first). 16 80 is the maximum voltage of 57.6 V
CAN.sendMsgBuf(0x05019C00, 1, 5, setdefaultvolt); //send setup data
}
void loop()
{
}
VP230 code:
#include <CAN_config.h>
#include <ESP32CAN.h>
CAN_device_t CAN_cfg;
#include <SPI.h>
#include <Wire.h>
void setup()
{
Serial.begin(115200);
CAN_cfg.speed=CAN_SPEED_1000KBPS;
CAN_cfg.tx_pin_id = GPIO_NUM_19;
CAN_cfg.rx_pin_id = GPIO_NUM_23;
CAN_frame_t my_frame;
CAN_frame_t my_frame2;
ESP32Can.CANInit();
my_frame.FIR.B.FF = CAN_frame_ext;
my_frame.MsgID = 0x05004804;
my_frame.FIR.B.DLC = 8;
my_frame.data = {0x16, 0x50, 0x71, 0x07, 0x97, 0x089, 0x00, 0x00};
ESP32Can.CANWriteFrame(&my_frame);
my_frame.FIR.B.FF = CAN_frame_ext;
my_frame.MsgID = 0x05019C00;
my_frame.FIR.B.DLC = 5;
my_frame2.data = {0x29, 0x15, 0x00, 0xFE, 0x10};
ESP32Can.CANWriteFrame(&my_frame2);
}
void loop()
{
}