Hallo, Ik ben Pieter Reynebeau en ik ben student aan de Thomas More hogeschool in Geel (België). Ik maak voor mijn bachelorproef een tractor implement management (TIM). Om mijn bachelorproef te doen slagen zou ik graag de CAN-bus van een tractor willen uitlezen. Hiervoor zou ik een MCP2515 willen gebruiken. Ik vond online al verschillende programma's maar tot dusver kan ik 2 MCP2515 modules niet met elkaar doen communiceren. Als dit lukt zou het uitlezen van de CAN-bus van de tractor moeten lukken. Ik gebruikte het onderstaande schema' en opstelling:
Het schema en programma komt van bij: arduino - MCP2515 CAN Transceivers can't go higher than 125kbps - Electrical Engineering Stack Exchange
Iemand een idee wat ik mis doe? Ik krijg steeds de melding dan mijn signaal verzonden wordt maar niet ontvangen. Omdat ik al verschillende systemen testte en verder geen echt probleem zie vermoed ik dat het aan mijn schakeling ligt. Of dat de arbitrage hier de CAN-bus om 1 of andere reden blokkeert.
Alvast bedankt
Pieter Reynebeau
Welkom op het forum; Installation and Troubleshooting is voor problemen met de IDE of het herkennen van je Arduin, niet voor problemen met (of advies voor) je project.
Je hebt je schema al hier geplaatsts, kun je a.u.b. je programma(s) hier ook plaatsen; gebruik a.u.b. zogenaamde code-tags (de </> knop in het antwoord scherm).
Ik heb geen verstand van CAN-bus, dus zal je waarschijnlijk niet verder kunnen helpen.
// demo: CAN-BUS Shield, send data
// loovee@seeed.cc
#include <SPI.h>
/*SAMD core*/
#ifdef ARDUINO_SAMD_VARIANT_COMPLIANCE
#define SERIAL SerialUSB
#else
#define SERIAL Serial
#endif
#define CAN_2515
// #define CAN_2518FD
// the cs pin of the version after v1.1 is default to D9
// v0.9b and v1.0 is default D10
// Set SPI CS Pin according to your hardware
// For Wio Terminal w/ MCP2518FD RPi Hat:
// Channel 0 SPI_CS Pin: BCM 8
// Channel 1 SPI_CS Pin: BCM 7
// Interupt Pin: BCM25
// *****************************************
// For Arduino MCP2515 Hat:
// SPI_CS Pin: D9
#ifdef CAN_2518FD
#include "mcp2518fd_can.h"
const int SPI_CS_PIN = 10;
const int CAN_INT_PIN = 2;
mcp2518fd CAN(SPI_CS_PIN); // Set CS pin
#endif
#ifdef CAN_2515
#include "mcp2515_can.h"
const int SPI_CS_PIN = 10;
const int CAN_INT_PIN = 2;
mcp2515_can CAN(SPI_CS_PIN); // Set CS pin
#endif // Set CS pin
void setup() {
SERIAL.begin(115200);
while(!Serial){};
#ifdef CAN_2518FD
while (0 != CAN.begin((byte)CAN_500K_1M)) { // init can bus : baudrate = 500k
#else
while (CAN_OK != CAN.begin(CAN_500KBPS)) { // init can bus : baudrate = 500k
#endif
SERIAL.println("CAN BUS Shield init fail");
SERIAL.println(" Init CAN BUS Shield again");
delay(100);
}
SERIAL.println("CAN BUS Shield init ok!");
}
unsigned char stmp[8] = {0, 0, 0, 0, 0, 0, 0, 0};
void loop() {
// send data: id = 0x00, standrad frame, data len = 8, stmp: data buf
stmp[7] = stmp[7] + 1;
if (stmp[7] == 100) {
stmp[7] = 0;
stmp[6] = stmp[6] + 1;
if (stmp[6] == 100) {
stmp[6] = 0;
stmp[5] = stmp[6] + 1;
}
}
CAN.sendMsgBuf(0x00, 0, 8, stmp);
delay(100); // send data per 100ms
SERIAL.println("CAN BUS sendMsgBuf ok!");
}
// END FILE
Het programma voor de ontvangende module is:
// demo: CAN-BUS Shield, receive data with check mode
// send data coming to fast, such as less than 10ms, you can use this way
// loovee, 2014-6-13
#include <SPI.h>
/*SAMD core*/
#ifdef ARDUINO_SAMD_VARIANT_COMPLIANCE
#define SERIAL SerialUSB
#else
#define SERIAL Serial
#endif
#define CAN_2515
// #define CAN_2518FD
// the cs pin of the version after v1.1 is default to D9
// v0.9b and v1.0 is default D10
// Set SPI CS Pin according to your hardware
// For Wio Terminal w/ MCP2518FD RPi Hat:
// Channel 0 SPI_CS Pin: BCM 8
// Channel 1 SPI_CS Pin: BCM 7
// Interupt Pin: BCM25
// *****************************************
// For Arduino MCP2515 Hat:
// SPI_CS Pin: D9
#ifdef CAN_2518FD
#include "mcp2518fd_can.h"
const int SPI_CS_PIN = 10;
const int CAN_INT_PIN = 2;
mcp2518fd CAN(SPI_CS_PIN); // Set CS pin
#endif
#ifdef CAN_2515
#include "mcp2515_can.h"
const int SPI_CS_PIN = 10;
const int CAN_INT_PIN = 2;
mcp2515_can CAN(SPI_CS_PIN); // Set CS pin
#endif
void setup() {
SERIAL.begin(115200);
#ifdef CAN_2518FD
while (0 != CAN.begin((byte)CAN_500K_1M)) { // init can bus : baudrate = 500k
#else
while (CAN_OK != CAN.begin(CAN_500KBPS)) { // init can bus : baudrate = 500k
#endif
SERIAL.println("CAN BUS Shield init fail");
SERIAL.println(" Init CAN BUS Shield again");
delay(100);
}
SERIAL.println("CAN BUS Shield init ok!");
}
void loop() {
unsigned char len = 0;
unsigned char buf[8];
if (CAN_MSGAVAIL == CAN.checkReceive()) { // check if data coming
CAN.readMsgBuf(&len, buf); // read data, len: data length, buf: data buf
unsigned long canId = CAN.getCanId();
SERIAL.println("-----------------------------");
SERIAL.print("Get data from ID: 0x");
SERIAL.println(canId, HEX);
for (int i = 0; i < len; i++) { // print the data
SERIAL.print(buf[i], HEX);
SERIAL.print("\t");
}
SERIAL.println();
}
}
/*********************************************************************************************************
END FILE
Bovendien heb je het in de Nederlandse taal geschreven en de meesten hier spreken / lezen / schrijven geen Nederlands en om alles door google translate te halen is ook zo iets Daarom is er een speciale sectie
Kun je a.u.b. de code-tags opnieuw proberen; je kunt je vorig post bewerken. Je hebt nu een enkele ` in het begin en een enkele aan het eind; dat moeten er drie zijn en ze moeten op hun eigen regel.