Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
8 years, 8 months ago.
LPC1768/1114 interfacing with a CAN Controller
Hello,
I am currently trying to write to a CAN controller (MCP2515) with SPI from a LPC1768 microcontroller with an intention to use the LPC1114 further on down the line. I had this code working and displaying accurate values using the LPC1768's CAN input and output pins. However, I read the SPI handbook and I was unable to corvert from the CAN input/output interface to using SPI. Here is my code:
#include "mbed.h"
#include <VL6180x.h>
#define VL6180X_ADDRESS 0x29
VL6180xIdentification identification;
// mbed uses 8bit addresses shift address by 1 bit left
VL6180x sensor(p28, p27, VL6180X_ADDRESS<<1);
//CAN can(p30, p29); //rd, td
SPI spi(p5,p6,p7);
DigitalOut cs(p8);
int main()
{
CANMessage messageOut; //formatting CANMessage
cs = 1;
messageOut.format = CANStandard;
messageOut.id = 0x720;
messageOut.len = 1;
uint8_t distance; //dataToSend
spi.format(8,0);
spi.frequency(1000000);
//can.reset(); moved to while loop to reset
cs=0;
wait_ms(10); // delay .1s
sensor.getIdentification(&identification); // Retrieve manufacture info from device memory
printIdentification(&identification); // Helper function to print all the Module information
if(sensor.VL6180xInit() != 0) {
printf("FAILED TO INITALIZE\n"); //Initialize device and check for errors
};
sensor.VL6180xDefautSettings(); //Load default settings to get started.
wait_ms(20); // delay
while(1) {
distance = sensor.getDistance();
printf("%u\n", distance);
messageOut.data[0] = distance;
spi.write(messageOut.data[0]); //in my CAN code it was 'can.write(messageOut);'
wait_ms(10); //100hz
//can.reset();
}
}
Any ideas?
1 Answer
8 years, 8 months ago.
Hello Fraser,
In order to communicate with the MCP2515 stand-alone CAN controller you better use a library like for instance this one.
Also have a look at this advice how to use it.
NOTE: As an alternative to LPC1114 + MCP2515 you may consider to use a low cost STM32F103C8T6 with built-in CAN controller. Have a look at CANnucleo_Hello for more details.