Проблема с CAN-шилдом MCP2515 (Niren)

ivpo
Offline
Зарегистрирован: 07.01.2014

Здравствуйте

1. Имеется два MCP2515 (Niren), вот таких:

2. Один подключаю к Nano, другой - к Leo (просто из того, что есть в наличии, было бы два Nano под рукой - использовал бы их). С Nano пытаюсь отправить, на Leo - принять.

3. Не работает совсем. Уже все перепробовал.

4. Библиотеку использую вот эту: https://github.com/p1ne/CAN_BUS_Shield

(об этом прочитал вот здесь: https://www.drive2.ru/l/460733581140951184/, в целом руководствовался этой статьей).

5. Схема подключения примерно соответствует этой (за исключением, что у меня Leo + Nano, а не два Nano):

6. Про отличие кварца и нюансы с библиотекой знаю. Но как я понимаю, если используются именно два одинкавых MCP2515, то это не играет роли.

7. Разные скорости и положения терминирующего резистора пробовал.

8. Код для отправки (Nano):

// demo: CAN-BUS Shield, send data
#include <mcp_can.h>
#include <SPI.h>

const int SPI_CS_PIN = 10;
MCP_CAN CAN(SPI_CS_PIN);

void setup()
{
    Serial.begin(9600);

    if(CAN_OK == CAN.begin(1)) 
    {
        Serial.println("CAN BUS Shield init ok!");
    }
}

unsigned char stmp[8] = {0, 1, 2, 3, 4, 5, 6, 7};
void loop()
{
    CAN.sendMsgBuf(0x00, 0, 8, stmp);
    Serial.print(".");
    delay(100);                       
}

Код для получения (Leonardo)

#include <SPI.h>
#include "mcp_can.h"

const int SPI_CS_PIN = 9;
MCP_CAN CAN(SPI_CS_PIN);

void setup()
{
    Serial.begin(9600);

    if(CAN_OK == CAN.begin(1))                   
    {
        Serial.println("CAN BUS Shield init ok!");
    }
}

void loop()
{  
    if(CAN_MSGAVAIL == CAN.checkReceive()) {
      Serial.println("received");                 
    }
}

Буду благодарен за любые мнения и советы. 

Заранее спасибо!

 

 

evgeniy063
Offline
Зарегистрирован: 08.03.2017

CAN.begin(1) - это что? какая скорость? 5kbps ?

6. Про отличие кварца и нюансы с библиотекой знаю. Но как я понимаю, если используются именно два одинкавых MCP2515, то это не играет роли.

Еще как играет. Попробуйте:

CAN.begin(CAN_500KBPS, MCP_8MHZ);

И еще, не увидел в схеме куда подключен вывод INT. подключите на 2 вывод ардуины.

lasthead
Offline
Зарегистрирован: 18.07.2017

Конечно, уже не к месту, но INT вообще рояли не играет в данном случае.

PooH71
Offline
Зарегистрирован: 19.07.2017

Добрый день. Собрал схему, как у автора темы. С библиотеками по ссылке https://github.com/p1ne/CAN_BUS_Shield, запустить не удалось. Инициализация модулей проходила, но данные не передавались. Загрузил библиотеки от шилда Seeed CAN_BUS_Shield https://github.com/Seeed-Studio/CAN_BUS_Shield, и о чудо данные побежали...