Проблема с инициализацией CAN BUS Shield

yamkin
Offline
Зарегистрирован: 29.08.2017

Доброго дня!

Подскажите в чем может быть проблема связанная с инициализацией CAN BUS Shield. 

Он напрачь не хочет проходить инициализацию. Со вторым уже кан шилдом такая беда.

b707
Offline
Зарегистрирован: 26.05.2017

переживаем за вас.

А если серьезно - так вопрос не задают. Вы бы хоть ошибки иннициализации выложили, что ли...

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Написано же "напрачь". Какие вам еще ошибки?

yamkin
Offline
Зарегистрирован: 29.08.2017

Каким образом я это могу выложить ошибки инициализации?

yamkin
Offline
Зарегистрирован: 29.08.2017

Вместо того, что бы стебать людей с орфографией, помог бы лучше дельными советоми если такие вообще имеются.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

я не икстрасенсор.  Думаю, 90% здесь советующих - тоже. 

yamkin
Offline
Зарегистрирован: 29.08.2017

DetSimen пишет:

я не икстрасенсор.  Думаю, 90% здесь советующих - тоже. 

Ну лови.

В общем пробую почитать сообщения на кан шине  с помощью КАН шилда.

инициализацию шилда произвожу с помощью следующего года:

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

    START_INIT:

    if(CAN_OK == CAN.begin(CAN_500KBPS))                   // init can bus : baudrate = 500k
    {
        Serial.println("CAN BUS Shield init ok!");
    }
    else
    {
        Serial.println("CAN BUS Shield init fail");
        Serial.println("Init CAN BUS Shield again");
        delay(100);
        goto START_INIT;
    }

В мониторе порта выводятся следующие строки:

CAN BUS Shield init fail
Init CAN BUS Shield again

Пробовал заливать другие скетчи, проблема остается.

yamkin
Offline
Зарегистрирован: 29.08.2017

DetSimen пишет:

я не икстрасенсор.  Думаю, 90% здесь советующих - тоже. 

Икстрасенсор блин xD xD xD

nik182
Offline
Зарегистрирован: 04.05.2015

А чё? Если с первого раза не сработала так с 25 сработает? В чем идея? И что такое САN? Как определён? Кусочек скеча это конечно хорошо. А остальное как? Так же круто прописано?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

что отдает CAN.begin(CAN_500KBPS)?  чему равно это выражение?

MaksVV
Offline
Зарегистрирован: 06.08.2015

Выклалывай весь код. Шилд подключается через шину SPI и вот контакт CS этой шины на шилде иногда бывает на 10 пине, а иногда на 9. вот это и надо пробовать менять в коде.

yamkin
Offline
Зарегистрирован: 29.08.2017

MaksVV пишет:
Выклалывай весь код. Шилд подключается через шину SPI и вот контакт CS этой шины на шилде иногда бывает на 10 пине, а иногда на 9. вот это и надо пробовать менять в коде.

Пробовал не получается

 

MaksVV
Offline
Зарегистрирован: 06.08.2015

Блин по человечески весь код выложи, а. И ты пробовал так?
const int SPI_CS_PIN = 9; и как шилд подключен физически? Одет на ардуину? Какая у тебя ардуино?

MaksVV
Offline
Зарегистрирован: 06.08.2015

На фото не видно на какой микросхеме шилд. Должна быть mcp 2515

yamkin
Offline
Зарегистрирован: 29.08.2017

MaksVV пишет:
Блин по человечески весь код выложи, а. И ты пробовал так? const int SPI_CS_PIN = 9; и как шилд подключен физически? Одет на ардуину? Какая у тебя ардуино?

Вот скетч:

// demo: CAN-BUS Shield, send data
// loovee@seeed.cc

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

// the cs pin of the version after v1.1 is default to D9
// v0.9b and v1.0 is default D10
const int SPI_CS_PIN = 10;

MCP_CAN CAN(SPI_CS_PIN);                                    // Set CS pin

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

    while (CAN_OK != CAN.begin(CAN_500KBPS))              // init can bus : baudrate = 500k
    {
        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
}

// END FILE

 

шилд сидит с верху на ардуино

вот шилд

 

 

const int SPI_CS_PIN = 9; писать пробовал, не помогло

yamkin
Offline
Зарегистрирован: 29.08.2017

на шилде находится микросхема mcp 2515

MaksVV
Offline
Зарегистрирован: 06.08.2015

ну хз, попробуй тогда другую библиотеку mcp2515.h  

вот скетч 

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

struct can_frame canMsg;
MCP2515 mcp2515(10);   // это пин CS, пробуем также 9 поставить


void setup() {
  Serial.begin(115200);
  SPI.begin();
  
  mcp2515.reset();
  mcp2515.setBitrate(CAN_500KBPS);
  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();      
  }

}

 

MaksVV
Offline
Зарегистрирован: 06.08.2015

смотрим какой кварц на шилде. По умолчанию в библиотеке 16Мгц. если 8 например то строка 13 такая будет 

mcp2515.setBitrate(CAN_500KBPS, MCP_8MHZ); 

 

yamkin
Offline
Зарегистрирован: 29.08.2017

MaksVV пишет:

ну хз, попробуй тогда другую библиотеку mcp2515.h  

вот скетч 

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

struct can_frame canMsg;
MCP2515 mcp2515(10);   // это пин CS, пробуем также 9 поставить


void setup() {
  Serial.begin(115200);
  SPI.begin();
  
  mcp2515.reset();
  mcp2515.setBitrate(CAN_500KBPS);
  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();      
  }

}

 

При компиляции ругается на эту сторочку

struct can_frame canMsg;

 

MaksVV
Offline
Зарегистрирован: 06.08.2015

библиотеку то установил? если да, то пробуй обновить Arduino IDE  у меня версия 1.6.8 всё компилится, или перезагрузись, иногда помогает

yamkin
Offline
Зарегистрирован: 29.08.2017

MaksVV пишет:

библиотеку то установил? если да, то пробуй обновить Arduino IDE  у меня версия 1.6.8 всё компилится, или перезагрузись, иногда помогает

Можешь скинуть свою бибилиотеку?

MaksVV
Offline
Зарегистрирован: 06.08.2015
MaksVV
Offline
Зарегистрирован: 06.08.2015

в твоем коде из сообщения #14 если дело в кварце, то надо менять строку 17. Для 8 Мгц будет так 

while (CAN_OK == CAN.begin(CAN_500KBPS,MCP_8MHz))              // init can bus : baudrate = 500k

 

MaksVV
Offline
Зарегистрирован: 06.08.2015

и ещё к какой Can шине пытаешься подключиться? 

yamkin
Offline
Зарегистрирован: 29.08.2017

MaksVV пишет:

в твоем коде из сообщения #14 если дело в кварце, то надо менять строку 17. Для 8 Мгц будет так 

while (CAN_OK == CAN.begin(CAN_500KBPS,MCP_8MHz))              // init can bus : baudrate = 500k

 

Это понятно.

Скетч который ты скинул заработал после того как я добавил твою бибилиотеку! Спасибо!

Инициализация вроде бы прошла.

В мониторе порта вывелись строки:

"------- CAN Read ----------"
ID  DLC   DATA"

На машине пока не проверял. 

как я понял данный код инициализирует CAN BUS Shield?

struct can_frame canMsg;
MCP2515 mcp2515(10);   // это пин CS, пробуем также 9 поставить


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

 

MaksVV
Offline
Зарегистрирован: 06.08.2015

Этот код просто выбирает тип соединения кан, скорость кана. И не ждет подключения к кан шине. Поэтому на этом этапе проканало.