MCP2515 Can Module an Mega 2560

Hallo zusammen

Ich versuche zwei Mega’s mit zwei Can Modulen von joy-it miteinander zu verbinden.
Dazu verwende ich die mcp2515.h Library, das Test Programm von da und auch die Verbindungen wie angegeben. Im Tutorial wird aber ein Uno verwendet!

Anschlüsse
int => D2 5V
SCK => D13 0V
Sl => D11 0V
SO => D12 0V
CS => D10

Am CS Pin kann ich mit KO ein Signal messen. Ist aber unabhängig von der Baudrate!?! Ändert aber mit Anzahl Nachrichten und auch mit Abstand (delay 1 eingefügt) zwischen den zwei Nachrichten. An den anderen Pin’s messe ich nichts!?!?

GND => GND
VCC1=> 5V
VCC => 5V

CanH und CanL sind auf ca. 2.3 V. Hier messe ich keine “Signale”.

In einem anderen Post habe ich gelesen, das mit MEGA nicht alle Baudraten (500k nein, 250k ja) funktionieren sollen. Bei mir leider kein Unterschied.
Des weiteren sollen nicht alle Pins gehen?!? Umstecken auf 50, 51 oder so?

Herzlichen Dank für Eure Unterstützung!!!

Programm zu Senden: (Standard von Library!)

#include <SPI.h>
#include <mcp2515.h>

struct can_frame canMsg1;
struct can_frame canMsg2;
MCP2515 mcp2515(10);


void setup() {

 while (!Serial);
  Serial.begin(112500);
  SPI.begin();
  
  mcp2515.reset();
  mcp2515.setBitrate(CAN_250KBPS);
  mcp2515.setNormalMode();
  
  Serial.println("Example: Write to CAN");
  canMsg1.can_id  = 0x0FF;
  canMsg1.can_dlc = 8;
  canMsg1.data[0] = 0xFF;
  canMsg1.data[1] = 0xFF;
  canMsg1.data[2] = 0xFF;
  canMsg1.data[3] = 0xFF;
  canMsg1.data[7] = 0x00;

  canMsg2.can_id  = 0x000;
  canMsg2.can_dlc = 8;
  canMsg2.data[0] = 0x00;
  canMsg2.data[1] = 0x00;
  canMsg2.data[2] = 0x00;
  canMsg2.data[3] = 0x00;
  canMsg2.data[4] = 0x00;
  canMsg2.data[5] = 0x00;
  canMsg2.data[6] = 0x00;
  canMsg2.data[7] = 0x00; 
  
}

void loop() {
  
if (mcp2515.sendMessage(&canMsg1) == MCP2515::ERROR_OK){
  Serial.println("Messages sent");
}
else {
  Serial.println("Msg1 TX error");
}     
if (mcp2515.sendMessage(&canMsg2) == MCP2515::ERROR_OK) {
  Serial.println("Messages sent");
}
else {
  Serial.println("Msg2 TX error");
}

  
  delay(500);

}

Programm zum Empfangen:

#include <SPI.h>
#include <mcp2515.h>

struct can_frame canMsg;
MCP2515 mcp2515(10);


void setup() {
  Serial.begin(115200);
  SPI.begin();
  
  mcp2515.reset();
  mcp2515.setBitrate(CAN_10KBPS,MCP_8MHZ);
  mcp2515.setNormalMode();
  
  Serial.println("------- CAN Read ----------");
  Serial.println("ID  DLC   DATA");
}

void loop() {
  
  if (mcp2515.readMessage(&canMsg) == MCP2515::ERROR_OK) {
      
    Serial.print(canMsg.can_id, HEX); // print ID
    Serial.print(" "); 
    Serial.print(canMsg.can_dlc, HEX); // print DLC
    Serial.print(" ");
    
    for (int i = 0; i<canMsg.can_dlc; i++)  {  // print the data
        
      Serial.print(canMsg.data[i],HEX);
      Serial.print(" ");

    }

    Serial.println();      
  }

}
[code]

Baudraten natürlich schon bei beiden Programmen identisch!! :wink: :wink: :wink: