Hello!
I want to put a BMW E90 instrument cluster into a car that only has digital display. So I bought one off ebay thinking it would be a fairly straightforward job. To my mistake, most of people who did this years ago have posted links that are dead now and they themselves are not available any longer.
I found the following resources
- a blog with start CAN message
- a wiring diagram
- a forum thread where someone applied power to it (and another)
- a list of sniffed CAN messages
Several YT videos
I bought a Seeed Can Bus Shield V2.0 and connected it to my Arduino Uno:
and connected CAN-HI pin to supposed CAN-HI pin on the cluster and CAN-LO pin to CAN-LO of the cluster. I also connected 12V adapter to the cluster (+ to +, - to -)
the cluster does power on by wiggling the needles a bit and if I press the button on it, display turns on for about 15 seconds
but when I try to use the suggested turn-on CAN message, nothing happens. I tried both 500KBPS and 100KBPS, but still nothing. This is the code I used:
#include <mcp_can.h>
#include <SPI.h>
/*SAMD core*/
#ifdef ARDUINO_SAMD_VARIANT_COMPLIANCE
#define SERIAL SerialUSB
#else
#define SERIAL Serial
#endif
const int SPI_CS_PIN = 9;
MCP_CAN CAN(SPI_CS_PIN); // Set CS pin
void setup()
{
SERIAL.begin(115200);
while (CAN_OK != CAN.begin(CAN_100KBPS))
{
SERIAL.println("CAN BUS Shield init fail");
SERIAL.println(" Init CAN BUS Shield again");
delay(100);
}
SERIAL.println("CAN BUS Shield init ok!");
}
byte data[8] = {0, 0, 0, 0, 0, 0, 0, 0};
void loop()
{
data[0] = 0x45; //0x45; /Key Status
data[1] = 0x42; // 0x40; //Transponder Detected
data[2] = 0x69; // 0x21; //Terminal Status
data[3] = 0x8F; // Steering lock?
data[4] = 0xE2; //Counter and Checksum
CAN.sendMsgBuf(0x130, 0, 5, data);
delay(100); // send data per 100ms
}
It is a direct combination of Seeed’s example and start code from that blog, where I put in the wake-up message from that guy’s blog, listed above. I checked the output of CAN shield with an oscilloscope and can confirm that it does look like something is being sent. Also, Arduino Uno sends me this message via serial
Enter setting mode success
set rate success!!
Enter Normal Mode Success!!
CAN BUS Shield init ok!
I also tried the read example to see if the cluster sends any messages but I got nothing back. Im a bit puzzled. Does anybody have any suggestion please? Thank you!