Arduino UNO и MCP2515 CAN

ak62
Offline
Зарегистрирован: 03.01.2019

Менял. У меня 2 модуля МСР и несколько ардуин. До вчерашнего дня думал, что проблема в MCP. А вчера перепробовал еще несколько вариаций в авто. Канхакер перестает принимать паекты практически сразу после того, как они начинают поступать. Т.е. я в мониторе после поступления пакетов вижу, к примеру, как появились четыре строки с разными ИД и количеством раз. Все. Канхакер замер. Дисконнект/коннект - еще штуки три добавится. Опять Дисконнект/Коннект - еще несколько добавилось. И так раз несколько. Максимум, что увидел - 14 разных ИД. Если подключить просто скетч ридера, то пакеты валят беспрерывно в течении 30 сек.(30 сек. и так должно быть).

Nikey
Offline
Зарегистрирован: 03.11.2017

Т.е. на столе у тебя работает нормально, а в машине глючит? Я правильно понимаю?... Блин, в любом случае нужен логический анализатор. Он как глаза... Без него заниматься электроникой нереал... В скетче, бывает, напишешь одно, а в реале в железе - совсем другое. Я себе купил saleae logic восьми канальный , теперь без горя...

Ещё напрашивается вариант -  компутер или юсб порт сменить, ну или на крайняк перезагрузить))) у меня, например, ноут, не выключается с момента покупки ))) а покупал я его лет 10 назад )))

ak62
Offline
Зарегистрирован: 03.01.2019

Nikey пишет:

Т.е. на столе у тебя работает нормально, а в машине глючит? Я правильно понимаю?... Блин, в любом случае нужен логический анализатор. Он как глаза... Без него заниматься электроникой нереал... В скетче, бывает, напишешь одно, а в реале в железе - совсем другое. Я себе купил saleae logic восьми канальный , теперь без горя...

Ещё напрашивается вариант -  компутер или юсб порт сменить, ну или на крайняк перезагрузить))) у меня, например, ноут, не выключается с момента покупки ))) а покупал я его лет 10 назад )))

На столе работает на прием двух фреймов с ИД 29 бит. Я не "спамил" его большим количеством :) А собираю я все на столе с одним ноутом, в гараж иду с другим. Вчера уже ходил и с первым. Результат одинаковый. Операционки менял. Тот, что гаражный, там 10, тот, что домашний 7, но на нем есть и VM XP. Под ХР вообще голяк.

Nikey
Offline
Зарегистрирован: 03.11.2017

Да, блин... Я думал у меня засада, столько времени убил чтоб запустить эту элементарную хрень... А у тебя ещё хуже.

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

на CAN модуле можно попробовать перепаять CAN драйвер с tja1050 на MCP2551. MCP шки вроде как более стабильные. Вот, например, tja1050 не работает на скорости ниже 125кбит/с. 

ak62
Offline
Зарегистрирован: 03.01.2019

MaksVV пишет:

на CAN модуле можно попробовать перепаять CAN драйвер с tja1050 на MCP2551. MCP шки вроде как более стабильные. Вот, например, tja1050 не работает на скорости ниже 125кбит/с. 

Не совсем понял совет. Что на что поменять?

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

8 лапый 1050 на MCP 2551 (не путать с MCP2515)

sotyi
Offline
Зарегистрирован: 05.01.2017

У них разные схемы включения и различные корпуса. Немного неудобно. Надо взять даташиты на обе м/с и перепаять. Я делал так, менял 1050 на 2551 для эксперимента.

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

что то вы путаете, друг. Одинаковая у них распиновка. И корпуса одинаковые бывают, т.е. soic8. На сколько знаю, почти у всех одинаковая распиновка в конкретном корпусе, иначе никто брать не будет. 

sotyi
Offline
Зарегистрирован: 05.01.2017

Да, я ошибся. У меня были tja1055. У них другой корпус.

ak62
Offline
Зарегистрирован: 03.01.2019

В общем я его победил.https://www.youtube.com/watch?v=s0D3JwAf5us

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

Очень информативный пост. Главное познавательный. Теперь все знают, что вы можете на вольво зеркалами рулить. 

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

А теперь представьте что вы это не вы. И ищете как решить проблему. Перечитав кучу постов в конце узнать что у ТС получилось, только как - он держит в секрете. 

ak62
Offline
Зарегистрирован: 03.01.2019

Согласен. Предыдущий пост был написан на радостях, что хоть что то получилось. И при наличии большой злобы на канхакер.

Проблема решилась пропайкой обеих плат (после этого чудеса с канхакером как были так и продолжались). Выкидыванием на свалку канхакера. Использовал библиотеку и скетчи из вашей ссылки в посте №75. Жаль потраченного времени и нервов на этот канхакер. Скорее всего он просто не работает с 29 битными кодами. За время борьбы с канхакером пришла еще одна плата с 16МГц кварцем. Она вела себя точно так же, как и 8-ми Мгц платы.

Сделал вывод лично для себя - не использовать канхакер. Возможно он и рабочий, но не с этими скетчами.

ЗЫ Купил и MCP 2551, но не успел запаять.

ak62
Offline
Зарегистрирован: 03.01.2019

MaksVV, 

к вам есть просьба личного характера. Научите, как рассчитывать фильтры. Хотя бы ссылку на несколько примеров. Не могу понять. Ни как на ID поставить, ни на содержимое. Может тему новую открыть. Думаю, что ни один я этим интересусь.

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

я до конца тоже не разобрался, но вроде нужно так: 

там есть две маски и шесть фильтров. первые два фильтра  (0-вой и 1-вый) работают по первой (0-вой) маске. Фильтры 2,3,4,5 работают по второй маске (1-вой). 

Маской выбирается какие разряды ID задействуются под фильтры. Допустим нам нужно фильтравать самый младший (правый) разряд. Маска будет такая. CAN0.init_Mask(0,1,0x0000000F); заметим, что жирным указана единица, т.е. для 29битных ID (0 - для 11-битных). 

самый левый ноль в скобках это значит нулевая маска. Например мы хотим принимать сообщения с младшим разрядом 3 и 4. Тогда настройка будет такая 

CAN0.begin(MCP_STDEXT, CAN_500KBPS, MCP_8MHZ)

CAN0.init_Mask     (0,1,0x0000000F);                // Init first mask...
CAN0.init_Filt     (0,1,0x00000003);                // Init first filter...
CAN0.init_Filt     (1,1,0x00000004);                // Init second filter...

 

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

на содержимое тела сообщения (поля данных) фильтры можно настраивать только, по-моему, для 11 битных ID, и то для левых двух байт. 

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

вот ещё пример 

CAN0.begin(MCP_STDEXT, CAN_500KBPS, MCP_8MHZ)
  pinMode(2, INPUT);                       // Setting pin 2 for /INT input
  
  CAN0.init_Mask(0,1,0x00FFFF00);                // Init first mask...
  CAN0.init_Filt(0,1,0x00FFEE00);                // Init first filter...
  CAN0.init_Filt(1,1,0x00FFDD00);                // Init second filter...
  
  CAN0.init_Mask(1,0,0x0F00FFFF);                // Init second mask... 
  CAN0.init_Filt(2,0,0x07001123);                // Init third filter...
  CAN0.init_Filt(3,0,0x07001124);                // Init fouth filter...
  CAN0.init_Filt(4,0,0x07001126);                // Init fifth filter...
  CAN0.init_Filt(5,0,0x07000048);                // Init sixth filter...
  
  CAN0.setMode(MCP_NORMAL);                // Change to normal mode to allow messages to be transmitted

В данном примере приниматься будут

из 29 битных ID такие :   ххFFEEхх  и ххFFDDхх

из 11 битных  такие:  7хх   11 23 хх хх хх хх хх хх

                                 7хх   11 24 хх хх хх хх хх хх

                                 7хх   11 26 хх хх хх хх хх хх

                                 7хх   00 48 хх хх хх хх хх хх

где х - любые значения. 

Замечание. В 11-битных ID нельзя настроить фильтр только по байтам поля данных, (сам ID нужно тоже фильтром обязательно захватывать, иначе не будет работать)

Nikey
Offline
Зарегистрирован: 03.11.2017

ak62 пишет:

Сделал вывод лично для себя - не использовать канхакер. 

А что теперь будешь использовать вместо канхакера? Или всё... хорош, нафик?...

 

ak62
Offline
Зарегистрирован: 03.01.2019

MaksVV, Спасибо. Буду пробовать.

ak62
Offline
Зарегистрирован: 03.01.2019

Nikey пишет:

ak62 пишет:

Сделал вывод лично для себя - не использовать канхакер. 

А что теперь будешь использовать вместо канхакера? Или всё... хорош, нафик?...

 

Как можно "нафик", если начало получаться? Использую немного переписанные скетчи из поста №75, эксель и фильтры в нем.

Nikey
Offline
Зарегистрирован: 03.11.2017

Ты ж вроде говорил что выкинул канхакер... или я чота путаю?...

 

ak62
Offline
Зарегистрирован: 03.01.2019

Nikey пишет:

Ты ж вроде говорил что выкинул канхакер... или я чота путаю?...

 

Канхакер это программа. В данном контексте "Выкинул" значит перестал пользоваться этой программой.

Nikey
Offline
Зарегистрирован: 03.11.2017

ну и... что вместо неё-то?!... блин, клещами не вынешь...

ak62
Offline
Зарегистрирован: 03.01.2019

Nikey пишет:

ну и... что вместо неё-то?!... блин, клещами не вынешь...

В сообщении №171, вроде, как все рассказал.

ak62
Offline
Зарегистрирован: 03.01.2019

MaksVV пишет:

вот ещё пример 

CAN0.begin(MCP_STDEXT, CAN_500KBPS, MCP_8MHZ)
  pinMode(2, INPUT);                       // Setting pin 2 for /INT input
  
  CAN0.init_Mask(0,1,0x00FFFF00);                // Init first mask...
  CAN0.init_Filt(0,1,0x00FFEE00);                // Init first filter...
  CAN0.init_Filt(1,1,0x00FFDD00);                // Init second filter...
  
  CAN0.init_Mask(1,0,0x0F00FFFF);                // Init second mask... 
  CAN0.init_Filt(2,0,0x07001123);                // Init third filter...
  CAN0.init_Filt(3,0,0x07001124);                // Init fouth filter...
  CAN0.init_Filt(4,0,0x07001126);                // Init fifth filter...
  CAN0.init_Filt(5,0,0x07000048);                // Init sixth filter...
  
  CAN0.setMode(MCP_NORMAL);                // Change to normal mode to allow messages to be transmitted

В данном примере приниматься будут

из 29 битных ID такие :   ххFFEEхх  и ххFFDDхх

из 11 битных  такие:  7хх   11 23 хх хх хх хх хх хх

                                 7хх   11 24 хх хх хх хх хх хх

                                 7хх   11 26 хх хх хх хх хх хх

                                 7хх   00 48 хх хх хх хх хх хх

где х - любые значения. 

Замечание. В 11-битных ID нельзя настроить фильтр только по байтам поля данных, (сам ID нужно тоже фильтром обязательно захватывать, иначе не будет работать)

Проверил на столе с 29 бит ID. Работает! Спасибо. Правда, с такой маской и фильтром

  CAN0.init_Mask(0,1,0x00FFF000);                // Init first mask...
  CAN0.init_Filt(0,1,0x00217FFC);                // Init first filter...

при отправке  0x00217FFC на входе принимает ID: 80217FFC 

Отправляю:

 CAN0.sendMsgBuf(0x00217FFC, 1, 8, data)

принимаю:

CAN0.readMsgBuf(&rxId, &len, rxBuf);
 Serial.print("ID: ");
 Serial.print(rxId, HEX); 

 

 

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

Да не бывает 80217FFC. Старший (левый) ниббл может быть только 0 и 1. Что соответствует 8 и 9. Просто 8 и 9 это показывает со служебными битами. Так что все правильно.

77777_777
Offline
Зарегистрирован: 22.02.2019

Добрые люди, подскажите как заставить ардуинку и мср2515 принимать сообщение с 29 битным ID? С 11битным всё гут.

ak62
Offline
Зарегистрирован: 03.01.2019

77777_777 пишет:
Добрые люди, подскажите как заставить ардуинку и мср2515 принимать сообщение с 29 битным ID? С 11битным всё гут.
В скетчах примеров принимет без проблем. В канхакере мне не удалось принять 29 битные.

77777_777
Offline
Зарегистрирован: 22.02.2019

Все скетчи с форума 29битные не принииают. Весь день сегодня упражнялся. С11 ми работают?

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

а может просто никто не шлёт 29  битные ID?

77777_777
Offline
Зарегистрирован: 22.02.2019

В том то и дело, что сам шлю,

77777_777
Offline
Зарегистрирован: 22.02.2019

Наверно есть какая нить команда? Библиотеки пытался править, но там для меня тёмный лес.

ak62
Offline
Зарегистрирован: 03.01.2019

77777_777 пишет:
Все скетчи с форума 29битные не принииают. Весь день сегодня упражнялся. С11 ми работают?
в 177 сообщениия указал, что даже фильтры работают с 29 битными

ak62
Offline
Зарегистрирован: 03.01.2019

CAN0.sendMsgBuf(0x00217FFC, 1, 8, data)

так шлете? вторым параметром единица?

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

чел даже не удосужился сказать какую библиотеку юзает, че нельзя в одном посто все сразу подробно изложить что делал. Нет надо на 180 постов щас демагогию развезти. 

77777_777
Offline
Зарегистрирован: 22.02.2019

Конечно

77777_777
Offline
Зарегистрирован: 22.02.2019

Хорошо. С каким скетчем приёмника будут приниматься сообщения с 29битными ID? В остальном вопросов нет. Спасибо.

ak62
Offline
Зарегистрирован: 03.01.2019

ak62 пишет:

Согласен. Предыдущий пост был написан на радостях, что хоть что то получилось. И при наличии большой злобы на канхакер.

Проблема решилась пропайкой обеих плат (после этого чудеса с канхакером как были так и продолжались). Выкидыванием на свалку канхакера. Использовал библиотеку и скетчи из вашей ссылки в посте №75. Жаль потраченного времени и нервов на этот канхакер. Скорее всего он просто не работает с 29 битными кодами. За время борьбы с канхакером пришла еще одна плата с 16МГц кварцем. Она вела себя точно так же, как и 8-ми Мгц платы.

Сделал вывод лично для себя - не использовать канхакер. Возможно он и рабочий, но не с этими скетчами.

ЗЫ Купил и MCP 2551, но не успел запаять.

Читайте внимательно.

77777_777
Offline
Зарегистрирован: 22.02.2019

Проблема чисто программная,с железом всё ок

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

77777_777 пишет:
Хорошо. С каким скетчем приёмника будут приниматься сообщения с 29битными ID? В остальном вопросов нет. Спасибо.

пример из библиотеки на приём. mcp_can.h или mcp2515.h

Другой разговор,  если вы неправильно их отправляете, то  и не получите на приёмнике ничего. 

77777_777
Offline
Зарегистрирован: 22.02.2019

Из библов все перипробовал. Есть ли у кого конкретный проверенный скетч? В передатчика, да всё чётко, ставишь 1 после ID при отправки

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

скетч сектретный чтоли я не пойму

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

sadman41 пишет:

Огрызок - он и есть огрызок. Стандартная бухта 300м, осталось 100.

305

77777_777
Offline
Зарегистрирован: 22.02.2019


#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_250KBPS);
  mcp2515.setNormalMode();
 
  Serial.println("------- CAN Read ----------");
  Serial.println("ID  DLC     DATA");
}

void loop() {
  
  if (mcp2515.readMessage(&canMsg) == MCP2515::ERROR_OK) 
  {
    
    // if (canMsg.can_id==43,HEX)
     //{ 
    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();      
  //}
  }
}

Всем доброго дня. Эти приёмники не хочет принимать с 29 битным id.с 11 всё ок .Почему? Что не так? 




#include <mcp_can.h>

#include <SPI.h>


const int spiCSPin = 10;


MCP_CAN CAN(spiCSPin);

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

    while (CAN_OK != CAN.begin(CAN_125KBPS))
    {
        Serial.println("CAN BUS Init Failed");
        delay(100);
    }
    Serial.println("CAN BUS  Init OK!");
}


void loop()
{
    unsigned char len = 0;
    unsigned char buf[8];

    if(CAN_MSGAVAIL == CAN.checkReceive())
    {
        CAN.readMsgBuf(&len, buf);

        unsigned long canId = CAN.getCanId();

        Serial.println("-----------------------------");
        Serial.print("Data from ID: 0x");
        Serial.println(canId );

        for(int i = 0; i<len; i++)
        {
            Serial.print(buf[i]);
            Serial.print(" ");
            
        }
        Serial.println();
    }
}

 

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

дружище твои скетчи не компилируются. Почитай головную тему песочницы. И внимательно эту тему. Тебе нужны нормальные библиотеки. 

77777_777
Offline
Зарегистрирован: 22.02.2019

всё компилируеться,видать я криво скопировал,сейчас всё ровно.я же говорю 11 битный принимает,посылаю 29.... тишина?????? 

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

только что проверил. верхний скетч #195 нормально принимает 29 битные ID

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

отправляю на эту тестируемую ардуину сообщения с канхакера.

может все таки

MaksVV пишет:
Другой разговор,  если вы неправильно их отправляете, то  и не получите на приёмнике ничего.

77777_777
Offline
Зарегистрирован: 22.02.2019

Итересно.....может правда библы кривые,ссылку не  кините? а отправляю правильно,заводской сканер видит