Arduino UNO и MCP2515 CAN

Discover0708
Offline
Зарегистрирован: 20.09.2020

vadiks пишет:

Discover0708 пишет:

Спасибо, vadiks!

Как мне кажется, скорости ардуины должно  было бы хватить на переброску пакетов в обе стороны. если дописать кусочки кода с учетом пина INT и  еще не совсем понятно как  в случае если это шлюз я ставлю между двумя блоками как организовать арбитраж..?

Как Вы думаете? Процедура арбитража соблюдается   в библиотеке МСР2515 или в библиотеке canhacker?

Арбитраж сделан на уровне железа МСР2515. При отправке сообщения будет ошибка. Вам нужно отлавливать такие ошибки и отправлять сообщение заново.


Понятно. а сообщение которое выиграло арбитраж. оно сохраняется в приемном буфере МСР? его же нужно передать дальше...

Discover0708
Offline
Зарегистрирован: 20.09.2020

vadiks пишет:

Discover0708 пишет:

Спасибо, vadiks!

Как мне кажется, скорости ардуины должно  было бы хватить на переброску пакетов в обе стороны. если дописать кусочки кода с учетом пина INT и  еще не совсем понятно как  в случае если это шлюз я ставлю между двумя блоками как организовать арбитраж..?

Как Вы думаете? Процедура арбитража соблюдается   в библиотеке МСР2515 или в библиотеке canhacker?

Арбитраж сделан на уровне железа МСР2515. При отправке сообщения будет ошибка. Вам нужно отлавливать такие ошибки и отправлять сообщение заново.


Понятно. а сообщение которое выиграло арбитраж. оно сохраняется в приемном буфере МСР? его же нужно передать дальше...

Discover0708
Offline
Зарегистрирован: 20.09.2020

sadman41 пишет:

Всё понятно: "что-то где-то теряет пакеты, найдите за меня проблему". Здесь это не работает.


Ваш Ник за себя все говорит... Я прошу помощи подсказать мне то что я не понимаю
 

vadiks
Offline
Зарегистрирован: 25.04.2020

Discover0708 пишет:

Понятно. а сообщение которое выиграло арбитраж. оно сохраняется в приемном буфере МСР? его же нужно передать дальше...

Неверно понимаете. Почитайте документацию по MCP и посмотрите другие примеры. В инете их полно.

Discover0708
Offline
Зарегистрирован: 20.09.2020

vadiks пишет:

Discover0708 пишет:

Понятно. а сообщение которое выиграло арбитраж. оно сохраняется в приемном буфере МСР? его же нужно передать дальше...

Неверно понимаете. Почитайте документацию по MCP и посмотрите другие примеры. В инете их полно.


Позвольте пояснить что я имею ввиду:
есть блок А.который отправляет сообщение с более высоким приоритетом, одновременно с этим модуль МСР проигрывает арбитраж помечает ошибку.. так сообщение от блока А которое выиграло арбитраж оно куда делось?

Discover0708
Offline
Зарегистрирован: 20.09.2020

схема такая : Модуль А  - МСР2515 - ардуино - МСР2515 - Модуль В
vadiks, спасибо.

sadman41
Offline
Зарегистрирован: 19.10.2016

Передатчик, проигравший арбитраж, хранит кадр в буфере, пока не сможет его отправить. Сегмент, в котором находится, модуль#1 никак не связан по арбитражу с сегментом, в котором находится модуль #2

vadiks
Offline
Зарегистрирован: 25.04.2020

Discover0708 пишет:

Позвольте пояснить что я имею ввиду:

есть блок А.который отправляет сообщение с более высоким приоритетом, одновременно с этим модуль МСР проигрывает арбитраж помечает ошибку.. так сообщение от блока А которое выиграло арбитраж оно куда делось?

Ну раз сообщение от блока А выиграло, то оно ушло по назначению.

Вы можете работать только со своими сообщениями которые отправляете !

vadiks
Offline
Зарегистрирован: 25.04.2020

Для информации

Режим One-Shot. Режим одиночной передачи (One-Shot mode) гарантирует, что будет осуществлена только одна попытка отправить сообщение. Обычно, если сообщение CAN проиграло арбитраж, или если его передача была уничтожена фреймом ошибки, то сообщение передается повторно. Когда разрешен режим One-Shot, то попытка отправить сообщение будет произведена только 1 раз, независимо от проигрыша арбитража или ошибки фрейма.

Режим One-Shot требуется для того, чтобы поддерживать времена слотов в детерминированных системах, таких как TTCAN.

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

Пробуем такой скетч. библиотека другая, тынц . INT одной mcp2515 цепляем на пин 2, другой - на пин 3.  CS ки тоже не путаем. 

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

#define CAN0_Message_available !((PIND & B100)>>2)        // Set CAN0 INT to pin 2
#define CAN1_Message_available !((PIND & B1000)>>3)       // Set CAN1 INT to pin 3
MCP_CAN CAN0(10);                                         // Set CAN0 CS to pin 10
MCP_CAN CAN1(9);                                          // Set CAN1 CS to pin 9

void setup()
{
  CAN0.begin(MCP_ANY, CAN_500KBPS, MCP_8MHZ);
  CAN1.begin(MCP_ANY, CAN_500KBPS, MCP_8MHZ);
  CAN0.setMode(MCP_NORMAL);                     
  CAN1.setMode(MCP_NORMAL);                     

  pinMode(2, INPUT);  
  pinMode(3, INPUT);  
}

void loop()
{
  while (1)
  {
     
     if(CAN0_Message_available)                       
     {
       uint32_t rxId; byte len = 0; byte rxBuf[8];
       CAN0.readMsgBuf(&rxId, &len, rxBuf);     
       CAN1.sendMsgBuf(rxId, 0, len, rxBuf); 
     }

     if(CAN1_Message_available)                       
     {
       uint32_t rxId; byte len = 0; byte rxBuf[8];
       CAN1.readMsgBuf(&rxId, &len, rxBuf);     
       CAN0.sendMsgBuf(rxId, 0, len, rxBuf); 
     }
  
  }
}

 

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

MaksVV, какая у ТС скорость? - по-моему, у ТС все "тормозит" вовсе не из-за отсутсвия прерываний. просто атмега328 , как мы знаем, даже одну МСР-шку не тянет. где уж ей две осилить

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

согласен, но вдруг такое небольшое ускорение даст эффект. Вот и хочу посмотреть. Ну и в общем то не тянет только на скоростях CAN 500 и выше. Думаю на 250кбит/с  уже должна более менее тянуть. 

Discover0708
Offline
Зарегистрирован: 20.09.2020

MaksVV, опробую твой код завтра в течении дня. Спасибо.

Я еще раз, хочу попросить разъяснить мне такой момент:
Та же схема:  Блок А  - МСР2515(1) - ардуино - МСР2515(2) - Блок В
допустим модуль МСР2515(1) передает сообщение, тут Блок А начинает передавать более важное сообщение. Модуль MCP2515(1)  проиграл арбитраж(или Frame error) и сообщение  Блоку А  осталось в буфере отправки MCP2515(1). А куда делось сообщение Блока А, которое выиграло арбитраж? оно сохранилось в буфере приема MCP2515(1) для дальнейшей отправки Блоку В?

П.С. Мне кажется наличие прерывания должно повысить точность передачи... 

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

Discover0708 пишет:

П.С. Мне кажется наличие прерывания должно повысить точность передачи... 

потенциально да. Но не рассчитывайте на прерывание, как на панацею. Известно, что на скорости 500 атмега328 не успевает даже просто вычитывать сообщения из буфера, так что справится с ролью ретранслятора шансов у нее мало

Discover0708
Offline
Зарегистрирован: 20.09.2020

b707 пишет:

Discover0708 пишет:

П.С. Мне кажется наличие прерывания должно повысить точность передачи... 

потенциально да. Но не рассчитывайте на прерывание, как на панацею. Известно, что на скорости 500 атмега328 не успевает даже просто вычитывать сообщения из буфера, так что справится с ролью ретранслятора шансов у нее мало


Принял к сведению. Как вы думаете может это все таки тяжелая библиотека?

Discover0708
Offline
Зарегистрирован: 20.09.2020

У меня есть готовый блок (компактный, с двумя физическими CAN, все необходимое на борту) только контроллер  там стоит ST10F269. Рассматриваю замену ардуине в этом  "проекте"  Кто-нибудь пробовал на нем работать?

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

Discover0708 пишет:
...допустим модуль МСР2515(1) передает сообщение, тут Блок А начинает передавать более важное сообщение. Модуль MCP2515(1)  проиграл арбитраж(или Frame error) и сообщение  Блоку А  осталось в буфере отправки MCP2515(1). А куда делось сообщение Блока А, которое выиграло арбитраж? оно сохранилось в буфере приема MCP2515(1) для дальнейшей отправки Блоку В?

Сообщение от блока А никуда не делось. Выигрывая арбитраж, оно просто продолжается передаваться в шину в нормальном режиме, поэтому да,  оно поступит на буфер приёма MCP2515(1), ну и в дальнейшем, по вашей задумке, пойдет на отправку блоку В, через ардуино и MCP2515(2).

Тут дело в физике процесса. Есть биты (доминантные). Они перебивают биты рецессивные. На этом и построен арбитраж. Арбитраж ведь происходит побитно. То сообщение, которое выигрывает арбитраж, имеет доминантный бит в данный момент времени.  А то, которое проиграло  - рецессивный. Проигравший блок узнает это так: Шлет на шину рецессивный бит (ну такой очередной бит сейчас ему пришелся к отправке), и слушает, если рецессивный на шине не установился, значит кто-то в этот момент на шину положил доминантный, всё, я проиграл значит. Отправляемое сообщение откладывается до освобождения шины. 

Fayton
Offline
Зарегистрирован: 10.12.2018

https://youtu.be/Ag4BDehOAc0

Функции CANBridgeIP Устройство предназначено для соединения устройств работающих по CAN шине на любое расстояние. Используется беспроводное соединение и IP протокол для передачи CAN пакетов любых форматов и скоростей. Данные проверяются при прохождении через CANBridgeIP для исключения искажения информации.

Прошивка https://drive.google.com/file/d/1wmG8NzFNeAYMBSDWBUw6VqBUCHqZHQXO/view?usp=sharing

Discover0708
Offline
Зарегистрирован: 20.09.2020

Я сегодня собрал схему на столе. сделал нормальное общее питание для всего снаряжения. И чудо все работает стабильно(с кодом из поста номер 3. правда на столе. Полагаю, что из-за ненадежного питания и наводок модули МСР настраивались неважно...
Машина пока уехала. в реалии не проверить.
MaksVV. Ваш код сохранил, опробую его, если "мой вариант" не пройдет. 

Еще хотел спросить у тех, кто знаком с модулем Blue pill stm32.
Все таки для компактности и надежности, хотелось бы иметь встроенный в контроллер CAN.
В каком то источнике было сказано о возможности переназначения ножек порта CAN.  Имеется ли возможность прямо в коде(во время исполнения программы), их переназначать? может таким образом  получится реализовать  DUAL CAN. повесить на них два драйвера шины и пересылать сообщения в обе стороны...

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

а на столе какой трафик по шине то подавали? в машине трафик CAN гораздо выше, поэтому возможно на столе все работало хорошо

sadman41
Offline
Зарегистрирован: 19.10.2016

"настраивались неважно"? Это что-то новенькое. 

Discover0708
Offline
Зарегистрирован: 20.09.2020

MaksVV пишет:

а на столе какой трафик по шине то подавали? в машине трафик CAN гораздо выше, поэтому возможно на столе все работало хорошо


Делал трейсером запись...воспроизведение по кругу работает норм.
в машине конечно еще чего нибудь добавится...буду пробовать. в процессе передачи на канхакере загорается ошибка (красный диод) если выборочно слать сообщение то все норм горит зеленый.
Но еще раз подчеркну, что сейчас работает стабильно. и не тормозит.
Вы по вопросу ST10 не сильны, случаем?

Discover0708
Offline
Зарегистрирован: 20.09.2020

sadman41 пишет:

"настраивались неважно"? Это что-то новенькое. 


Ааа..И Вы здесь?  )

Discover0708
Offline
Зарегистрирован: 20.09.2020

sadman41
Может быть Вы поможете мне пристроить мою платку в этот проект?

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

Discover0708 пишет:

 Имеется ли возможность прямо в коде(во время исполнения программы), их переназначать? может таким образом  получится реализовать  DUAL CAN. повесить на них два драйвера шины и пересылать сообщения в обе стороны...

переназначать можно, но дуал-контроллер так не сделать. Каждое переназначение - это новая переинициализация стека, ни о какой скорости приема в этом случае говорить нет смысла.

Если у вас в основном шлюз принимает данные с одного КАН и передает на другой - можно принимающую часть, как более критичную - реализовать на внутреннем контроллере, а передающую - на внешнем

zaza_small
Offline
Зарегистрирован: 07.10.2020

Ребят, доброго времени суток всем!

С Ардуино недавно познакомился, цель такая: я отправляю диагностический запрос, и пытаюсь отловить ответ, вот что у меня получилось, сильно не пинайте)

В примере, смотрим поднят ручник или нет.

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

struct can_frame canMsg; 
struct can_frame canMsg1;

MCP2515 mcp2515(10);

void setup() {  

  canMsg1.can_id  = 0x714;
  canMsg1.can_dlc = 8;
  canMsg1.data[0] = 0x03;
  canMsg1.data[1] = 0x22;
  canMsg1.data[2] = 0x22;
  canMsg1.data[3] = 0x05;
  canMsg1.data[4] = 0x55;
  canMsg1.data[5] = 0x55;
  canMsg1.data[6] = 0x55;
  canMsg1.data[7] = 0x55;

  SPI.begin(); 
  mcp2515.reset();
  mcp2515.setBitrate(CAN_500KBPS, MCP_8MHZ);
  mcp2515.setNormalMode();
}

void loop() {

  mcp2515.sendMessage(&canMsg1);
  
  if (mcp2515.readMessage(&canMsg) == MCP2515::ERROR_OK) 
  { 
     if (canMsg.can_id==0x77E && canMsg.data[2]==0x22 && canMsg.data[3]==0x05)
      {
       if (canMsg.data[4]==0x21)
      Serial.print("Yes");      
       if (canMsg.data[4]==0x20)
      Serial.print("No");    
      }
  }
  delay(5);
}

Когда отправляю запрос кан хакером, то все гуд, в ответ прилетает нужное сообщение с ИД 0x77E.

Если пробую так как в коде, в ответ либо вообще не валится сообщения с ИД 0x77E, либо что-то левое, подозреваю, что дело в моей криворукости)

Прошу помочь, заранее спасибо!)

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

проверьте поля отсылаемого запроса - точно там все верно? Что-то код запроса 0x714 при ответе 0x77E кажется мне ошибкой.

если все верно - попробуйте поставить задержку побольше. Вы же в коде бомбардируете шину запросами 200 раз в секунду, не слушая ответов

zaza_small
Offline
Зарегистрирован: 07.10.2020
Спасибо. Сейчас испробую. А что имелось в виду, не слушая ответов? 
Я их как раз таки и хочу услышать) Быть может делаю это неправильно)
В качестве примера использовал вот эту статью https://habr.com/ru/post/442184/.
 
Когда использовал кан-хакер, все работало.
 
Вот кусок из статьи:
 
// Ручник 714 03 22 22 05 55 55 55 55
 
77E 05 62 22 05 21 AA AA AA - нажат
 
77E 05 62 22 05 20 AA AA AA - не нажат
 
vadiks
Offline
Зарегистрирован: 25.04.2020

zaza_small пишет:

Когда использовал кан-хакер, все работало.
 
Так канхакером и посмотрите, правильный ли запрос отправляется в шину и какой ответ там появляется.
zaza_small
Offline
Зарегистрирован: 07.10.2020

vadiks пишет:

zaza_small пишет:

Когда использовал кан-хакер, все работало.
 
Так канхакером и посмотрите, правильный ли запрос отправляется в шину и какой ответ там появляется.

MCP2515 только одна)

vadiks
Offline
Зарегистрирован: 25.04.2020

zaza_small пишет:

vadiks пишет:

zaza_small пишет:

Когда использовал кан-хакер, все работало.
 
Так канхакером и посмотрите, правильный ли запрос отправляется в шину и какой ответ там появляется.

MCP2515 только одна)

Купите вторую. Не такая она и дорогая ))

А вопросов снимет кучу. И мы не будем гадать на кофейной гуще.

zaza_small
Offline
Зарегистрирован: 07.10.2020

vadiks пишет:

zaza_small пишет:

vadiks пишет:

zaza_small пишет:

Когда использовал кан-хакер, все работало.
 
Так канхакером и посмотрите, правильный ли запрос отправляется в шину и какой ответ там появляется.

MCP2515 только одна)

Купите вторую. Не такая она и дорогая ))

А вопросов снимет кучу. И мы не будем гадать на кофейной гуще.

 

В свободной продаже их нет, заказал в Китае, жду, неизвестно когда приедет)

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

как верно подметил коллега, зачем так часто слать запросы? так можно всю шину задосить. шлите запросы ну раз в секунду, например.  Это раз. Во-вторых, вы не инициализировали Serial, так ничего туда печататься не будет. Также внимательнее - скорости Serial в скетче и мониторе порта должны совпадать. 

В случае всё равно неудачи можно все сообщения в монитор порта распечатать, чтобы понять вообще что-нибудь ловит ваш МК или нет. (для этого раскомментировать строку 36)

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

struct can_frame canMsg; 
struct can_frame canMsg1;

MCP2515 mcp2515(10);

void setup() {  
Serial.begin(9600);
  canMsg1.can_id  = 0x714;
  canMsg1.can_dlc = 8;
  canMsg1.data[0] = 0x03;
  canMsg1.data[1] = 0x22;
  canMsg1.data[2] = 0x22;
  canMsg1.data[3] = 0x05;
  canMsg1.data[4] = 0x55;
  canMsg1.data[5] = 0x55;
  canMsg1.data[6] = 0x55;
  canMsg1.data[7] = 0x55;

  SPI.begin(); 
  mcp2515.reset();
  mcp2515.setBitrate(CAN_500KBPS, MCP_8MHZ);
  mcp2515.setNormalMode();
}




void readBUS()
{
  if (mcp2515.readMessage(&canMsg) == MCP2515::ERROR_OK) 
  { 
    // посмотрим вообще что на шине творится: 
 //   for (int i=0; i<8; i++) {Serial.print (canMsg.data[i], HEX); Serial.print (" "); }
  
     
     if (canMsg.can_id==0x77E && canMsg.data[2]==0x22 && canMsg.data[3]==0x05)
      {
       if (canMsg.data[4]==0x21)
      Serial.print("      Yes");      
       if (canMsg.data[4]==0x20)
      Serial.print("      No");    
      }
  Serial.println();
  }
}

void sendRequest()
{
static uint32_t prevtime = 0;
if (millis()- prevtime>1000)
  { 
    mcp2515.sendMessage(&canMsg1);
    prevtime= millis();
  }
}

void loop() 
{
readBUS();
sendRequest();
}

 

zaza_small
Offline
Зарегистрирован: 07.10.2020

MaksVV пишет:

как верно подметил коллега, зачем так часто слать запросы? так можно всю шину задосить. шлите запросы ну раз в секунду, например.  Это раз. Во-вторых, вы не инициализировали Serial, так ничего туда печататься не будет. Также внимательнее - скорости Serial в скетче и мониторе порта должны совпадать. 

В случае всё равно неудачи можно все сообщения в монитор порта распечатать, чтобы понять вообще что-нибудь ловит ваш МК или нет. (для этого раскомментировать строку 36)

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

struct can_frame canMsg; 
struct can_frame canMsg1;

MCP2515 mcp2515(10);

void setup() {  
Serial.begin(9600);
  canMsg1.can_id  = 0x714;
  canMsg1.can_dlc = 8;
  canMsg1.data[0] = 0x03;
  canMsg1.data[1] = 0x22;
  canMsg1.data[2] = 0x22;
  canMsg1.data[3] = 0x05;
  canMsg1.data[4] = 0x55;
  canMsg1.data[5] = 0x55;
  canMsg1.data[6] = 0x55;
  canMsg1.data[7] = 0x55;

  SPI.begin(); 
  mcp2515.reset();
  mcp2515.setBitrate(CAN_500KBPS, MCP_8MHZ);
  mcp2515.setNormalMode();
}




void readBUS()
{
  if (mcp2515.readMessage(&canMsg) == MCP2515::ERROR_OK) 
  { 
    // посмотрим вообще что на шине творится: 
 //   for (int i=0; i<8; i++) {Serial.print (canMsg.data[i], HEX); Serial.print (" "); }
  
     
     if (canMsg.can_id==0x77E && canMsg.data[2]==0x22 && canMsg.data[3]==0x05)
      {
       if (canMsg.data[4]==0x21)
      Serial.print("      Yes");      
       if (canMsg.data[4]==0x20)
      Serial.print("      No");    
      }
  Serial.println();
  }
}

void sendRequest()
{
static uint32_t prevtime = 0;
if (millis()- prevtime>1000)
  { 
    mcp2515.sendMessage(&canMsg1);
    prevtime= millis();
  }
}

void loop() 
{
readBUS();
sendRequest();
}

 

Спасибо огромное! Сегодня испробую, а что имелось в виду под инициализацией Serial?

Serial.begin(9600); ?

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

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

zaza_small пишет:
а что имелось в виду под инициализацией Serial?

Serial.begin(9600); ?

да

SeregaJ82
Offline
Зарегистрирован: 22.11.2020

Привет. Собрал схему на uno. Подключаю напрямую к диагностическому сканеру шину. Скорость 500, кристал 8. Скеч can read в мониторе порта отображает как положено запросы от сканера. Заливаю код под канхакер. Скорости порта и указанная в канхакере совпадают. Подключается кан хакер к сборке без проблем. Но при всем этом, канхакер ничего не отображает... Не принемает... При этом в кан шине осциллографом видны фреймы... Почему софтина может не видеть поток из порта?

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

На кан хакере установить скорость в два раза ниже и два раза выше. Если заработало - библиотеку не ту взяли

SeregaJ82
Offline
Зарегистрирован: 22.11.2020

MaksVV пишет:
На кан хакере установить скорость в два раза ниже и два раза выше. Если заработало - библиотеку не ту взяли

Если речь о кварце, в библиотеке задано 8мгц. Скорость задается самой программой кан-хакер в настройках. Так же?

vadiks
Offline
Зарегистрирован: 25.04.2020
В файле usb_cdc.ino SPI_CS_PIN и INT_PIN правильно указали?
Попробуйте раскомментировать код под uncomment that lines for Leonardo, Pro Micro or Esplora
 
MaksVV
Offline
Зарегистрирован: 06.08.2015

SeregaJ82 пишет:
MaksVV пишет:
На кан хакере установить скорость в два раза ниже и два раза выше. Если заработало - библиотеку не ту взяли
Если речь о кварце, в библиотеке задано 8мгц. Скорость задается самой программой кан-хакер в настройках. Так же?

да в настройках. Я имел ввиду не скорость ком порта (это понятно, что в скетче и настройках кан хакера они должны быть одинаковые), а скороcть "CAN baudrate".  также убрать галку listen only если стоит. У меня вроде было, что с этой галкой не работало. 

SeregaJ82
Offline
Зарегистрирован: 22.11.2020

vadiks пишет:

В файле usb_cdc.ino SPI_CS_PIN и INT_PIN правильно указали?
Попробуйте раскомментировать код под uncomment that lines for Leonardo, Pro Micro or Esplora
 


попробую. Спасибо. Пины заданы верно. Чтение и вывод в ком порт пакетов работает. А вот сама прога канхакер не хочет отображать их. Как то можно дебажить, что в порте происходит во время работы приложения? Дебаг режим нигде в опциях не нашел. Т.е.подозреваю, что косяк какой то работе протокола, по которому софтинка общается с ардуинкой

SeregaJ82
Offline
Зарегистрирован: 22.11.2020

MaksVV пишет:

SeregaJ82 пишет:
MaksVV пишет:
На кан хакере установить скорость в два раза ниже и два раза выше. Если заработало - библиотеку не ту взяли
Если речь о кварце, в библиотеке задано 8мгц. Скорость задается самой программой кан-хакер в настройках. Так же?

да в настройках. Я имел ввиду не скорость ком порта (это понятно, что в скетче и настройках кан хакера они должны быть одинаковые), а скороcть "CAN baudrate".  также убрать галку listen only если стоит. У меня вроде было, что с этой галкой не работало. 


понял. Сейчас буду дальше "страдать"... ) но вроде пробовал и так

vadiks
Offline
Зарегистрирован: 25.04.2020

Какой номер COM порта в системе?

Если больше 4-го, поменяйте номер.

SeregaJ82
Offline
Зарегистрирован: 22.11.2020

vadiks
Offline
Зарегистрирован: 25.04.2020

Посмотрите обмен канхакера с ардуиной каким нибудь монитором COM порта.

SeregaJ82
Offline
Зарегистрирован: 22.11.2020

Все, всем спасибо!!! Ничего не понял, почему вчера не получалось... Сейчас, ничего не меняя, попробовал повторно - пакеты канхакер ловить начал. Супер...

SeregaJ82
Offline
Зарегистрирован: 22.11.2020

MaksVV пишет:

  также убрать галку listen only если стоит. У меня вроде было, что с этой галкой не работало. 

Проверил, именно так. Не хочет слушать, если эта опция включена. Ошибка в протоколе где-то походу... 

SeregaJ82
Offline
Зарегистрирован: 22.11.2020

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

bezzeb
Offline
Зарегистрирован: 02.11.2013

Добрый день

Подскажите ,пожалуйста,есть скетч,в котором сначала идет два запроса по кану,а потом считывание 2 ответов.

Все отлично работает,за исключением того,что при отключении от сети кана(тест на обрыв проводов),он запоминает последние значения,а хотелось бы,чтобы писал ошибку.

Каким образом можно проверять наличие соединения кан?

Пробовал через if(CAN0_Message_available) но сообщения постоянно доступны

Может есть еще какие-то методы проверки?

sadman41
Offline
Зарегистрирован: 19.10.2016

Есть методы. Три раза пульнуть посылку и получить "Все буфера заняты".