Arduino UNO и MCP2515 CAN

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

только что проверил пофиг на MCP_STDEXT можно и MCP_ANY оставить. Уже не помню что эта настройка значит, но явно что-то с типом ID. Но работает и то и то. 

передавать 29 битные ID все таки удобно в функции без второго параметра (т.е. всего 3 а не 4).

хотим отправить ID 0x00FFFFFE пишем так     CAN0.sendMsgBuf(0x80FFFFFE,  8, mirrow); 
хотим отправить ID 0x10FFFFFE пишем так     CAN0.sendMsgBuf(0x90FFFFFE,  8, mirrow);  

хотим отправить ID 0x00FFFFFE RTR пишем так CAN0.sendMsgBuf(0xC0FFFFFE,  0, 0);
хотим отправить ID 0x10FFFFFE RTR пишем так CAN0.sendMsgBuf(0xD0FFFFFE,  0, 0);
 
хотим отправить ID 0xFFE пишем так          CAN0.sendMsgBuf(0xFFE,  8, mirrow);  
хотим отправить ID 0xFFE RTR пишем так      CAN0.sendMsgBuf(0x40FFFFFE,  0, 0);
 

 

ak62
Offline
Зарегистрирован: 03.01.2019
/*          The followingn two functions of the MCP2515 do not work, there is a bug in the silicon.
            case (MCP_STD): 
            mcp2515_modifyRegister(MCP_RXB0CTRL,
            MCP_RXB_RX_MASK | MCP_RXB_BUKT_MASK,
            MCP_RXB_RX_STD | MCP_RXB_BUKT_MASK );
            mcp2515_modifyRegister(MCP_RXB1CTRL, MCP_RXB_RX_MASK,
            MCP_RXB_RX_STD);
            break;

            case (MCP_EXT): 
            mcp2515_modifyRegister(MCP_RXB0CTRL,
            MCP_RXB_RX_MASK | MCP_RXB_BUKT_MASK,
            MCP_RXB_RX_EXT | MCP_RXB_BUKT_MASK );
            mcp2515_modifyRegister(MCP_RXB1CTRL, MCP_RXB_RX_MASK,
            MCP_RXB_RX_EXT);
            break;
*/

Выдержка из mcp_can.cpp. Эти две функции не работают.

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

аа чето помнится это вроде как раз настройка для аппаратных фильтров.

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

можете на пальцах объяснить вот это? ID 0x00FFFFFE пишем так 0x80FFFFFE Потому что так канхакер понимает, что ему отослали 0x00FFFFFE. Но проблему не решит т.к. я подключал этот канхакер к своей шине и он молчал, как рыба. Не видел ничего из шины. И скетч на чтение из библиотеки канхакера не читал мою шину. А скетч из других читает.

П.С. вникаю в сообщение 26

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

возможно совпадение, в какой нибудь попытке вы просто забыли поставить в настройке 8мгц в setup(), поэтому не работало. По остальному читаем #26

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

В общем, такая история. Вчера вечером снова настроил две ардуино + МСР на прием канхакераом сообщений. Выключил компьютер. Сегодня с утра ничего не работает. Удивительные МСР! Залил скетчи прием/передача - работает. ЗАлил в одну скетч канхакера - не видит канхакер ничего. 

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

Закономерности не нашел. Работает или не работае по своему желанию. Пробовал и отделно питание подключать и на разные компы разносить. В большинстве случаев 29 бит ИД не читает. Можно сказать, что 99% не читает. Причем не важно кто приемник, а кто передатчик... С обычными ИД в 100% все ок.

 

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

залейте в оба модуля скетч кан хакер. Откройте две проги канхакер. всё будет работать скорее всего. Если скорость более 100кБит/с (эти модули на более медленной не работают). 

Дак не робит только на канхакере или примеры рид врайт тоже глючат на 29бит?  и какой либой в итоге пользуетесь? 

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

Не работает только на канхакере. Залил в оба канхакер. Не общаются. Ни при каких обстоятельствах. Залил в один write, канхакер видит. Поменял ИД с 0x0F6 на  0x800FFFFE - не видит. Все терпение лопнуло. Буду ждать 16 МГц

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

скетч передатчика выложите. пин int кан модуля  подключаете ? 

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


// MCP2515 Mask and Filter example for extended CAN message frames.
// Written by Cory J. Fowler (20140717)

/***********************************************************************************
If you send the following extended IDs below to an Arduino loaded with this sketch
you will find that 0x00FFCC00 and 0x00FF9900 will not get in.

   ID in Hex is the same as the Filter in Hex.
   0x00FFEE00
   0x00FFDD00
   0x00FFCC00  This example will NOT be receiving this ID
   0x00FFBB00
   0x00FFAA00
   0x00FF9900  This example will NOT be receiving this ID
   0x00FF8800
   0x00FF7700

   This mask will check the filters against ID bits 23 through 8.
   (Those familiar with J1939 might see why I used this mask.)
    MASK = 0x00FFFF00
   If there is an explicit filter match to those bits, the message will be passed to the
   receive buffer and the interrupt pin will be set.
   
   This example will NOT be exclusive to ONLY the above message IDs, for that a mask such
   as the below would be used: 
    MASK = 0x1FFFFFFF
   
   At the moment, to disable a filter or mask, copy the value of a used filter or mask.
   
***********************************************************************************/


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

long unsigned int rxId;
unsigned char len = 0;
unsigned char rxBuf[8];

MCP_CAN CAN0(10);                          // Set CS to pin 10

void setup()
{
  Serial.begin(115200);
  if(CAN0.begin(MCP_STDEXT, CAN_125KBPS, MCP_8MHZ) == CAN_OK) Serial.print("MCP2515 Init Okay!!\r\n");
  else Serial.print("MCP2515 Init Failed!!\r\n");
  pinMode(2, INPUT);                       // Setting pin 2 for /INT input

  CAN0.init_Mask(0,1,0x00000000);                // Init first mask...
  CAN0.init_Filt(0,1,0x00000000);                // Init first filter...
  CAN0.init_Filt(1,1,0x00000000);                // Init second filter...
  
  CAN0.init_Mask(1,1,0x00000000);                // Init second mask... 
  CAN0.init_Filt(2,1,0x00000000);                // Init third filter...
  CAN0.init_Filt(3,1,0x00000000);                // Init fouth filter...
  CAN0.init_Filt(4,1,0x00000000);                // Init fifth filter...
  CAN0.init_Filt(5,1,0x00000000);                // Init sixth filter...
  
  Serial.println("MCP2515 Library Mask & Filter Example...");
  CAN0.setMode(MCP_NORMAL);                // Change to normal mode to allow messages to be transmitted
}

void loop()
{
    if(!digitalRead(2))                    // If pin 2 is low, read receive buffer
    {
      CAN0.readMsgBuf(&rxId, &len, rxBuf); // Read data: len = data length, buf = data byte(s)
      Serial.print("ID: ");
      Serial.print(rxId, HEX);
      Serial.print(" Data: ");
      for(int i = 0; i<len; i++)           // Print each byte of the data
      {
        if(rxBuf[i] < 0x10)                // If data byte is less than 0x10, add a leading zero
        {
          Serial.print("0");
        }
        Serial.print(rxBuf[i], HEX);
        Serial.print(" ");
      }
      Serial.println();
    }
}

/*********************************************************************************************************
END FILE
*********************************************************************************************************/

 

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

Скетч Ваш из поста 69. И сейчас он не работает. А позавчера работал. А вот если взять вот этот

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

struct can_frame canMsg1;
struct can_frame canMsg2;
MCP2515 mcp2515(10);


void setup() {

  canMsg1.can_id  = 0x0F6;
  canMsg1.can_dlc = 8;
  canMsg1.data[0] = 0x8E;
  canMsg1.data[1] = 0x87;
  canMsg1.data[2] = 0x32;
  canMsg1.data[3] = 0xFA;
  canMsg1.data[4] = 0x26;
  canMsg1.data[5] = 0x8E;
  canMsg1.data[6] = 0xBE;
  canMsg1.data[7] = 0x86;

  canMsg2.can_id  = 0x036;
  canMsg2.can_dlc = 8;
  canMsg2.data[0] = 0x0E;
  canMsg2.data[1] = 0x00;
  canMsg2.data[2] = 0x00;
  canMsg2.data[3] = 0x08;
  canMsg2.data[4] = 0x01;
  canMsg2.data[5] = 0x00;
  canMsg2.data[6] = 0x00;
  canMsg2.data[7] = 0xA0;
  
  while (!Serial);
  Serial.begin(115200);
  SPI.begin();
  
  mcp2515.reset();
  mcp2515.setBitrate(CAN_125KBPS);
  mcp2515.setNormalMode();
  
  Serial.println("Example: Write to CAN");
}

void loop() {
  
  mcp2515.sendMessage(&canMsg1);
  mcp2515.sendMessage(&canMsg2);

  Serial.println("Messages sent");
  
  delay(100);

}

то работает. НИЧЕГО НЕ МЕНЯЮ В КАНХАКЕРЕ. 

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

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

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

ak62 пишет:

 А вот если взять вот этот.   то работает. НИЧЕГО НЕ МЕНЯЮ В КАНХАКЕРЕ. 

в этом скетче у вас нет настройки 8 мгц, а в моём есть. Скоре всего и канхакер у вас все таки 16 МГЦ залит

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

ak62 пишет:
П.С. в файле MCP2515.h в строке 13 поменял #define MCP2515_DEFAULT_CLOCK_FREQUENCY 16e6 на #define MCP2515_DEFAULT_CLOCK_FREQUENCY 8e6 и все зачиталось и на 500 и на 125.

надеюсь это обратно сделали

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

Давайте уже завтра. На сегодня уже зла не хватает на них :(

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

нужно повнимательнее. Там все просто. 

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

глаза до дыр протер. Как так? Все работает, выключаю, ложусь спать, встаю, включаю не работает. День возишься туда сюда заливаешь, заработало. Пошел в гараж - не работает. П.С. Пин 2 соединен. Может нужно не на соплях, а спаять все...

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

на #113 например что скажете? 

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

Завтра все сниму на скрины, покажу. 8МГц в 113 просто открыл и скопировал, когда заливаю, то ставлю MCP_8MHZ

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

Приветствую.

Накупил 3 кан шилда (1 полноценный 16мГц и два маленьких на 8мц) и 5 ардуин разных видов для канхакерства. Как ни бился в попытке заставить всё это хозяйство работать - глухо... Ни в какой комбинации не фунциклировало хоть тресни. А причина как оказалось была банальна - нужен обязательно приёмник. Просто один передатчик почему-то адекватно не работает. Подавай ему приёмник и всё тут! Если в процессе работы программы "Канхакер" случайно отвалятся  кановские провода, то всё... пипец... передатчик зависает и надо его по-новой перезагружать (вкл\выкл). Странно, но факт. Везде пишут что в авто даже с одним проводом всё работает.

Подсоединил к кан шине лог анализатор "Saleae Logic" чтоб посмотреть что хоть там творится. Ну и как всегда... происходят там непонятные вещщи. Несмотря на то что передатчик передаёт пакет... приёмник его нормально принимает... т.е. то что послали то и приняли,  логанализатор почемуто не может нормально расшифровать пакеты. Странно...

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

Итак. Действие первое. Идем на github, набираем в поиске Canhacker и по первой ссылке качаем архив. https://github.com/autowp/arduino-canhacker  Устанавливаем библиотеку в IDE.

Там же на сайте есть документация к Canhacker на русском https://github.com/autowp/arduino-canhacker/tree/master/docs/ru где в частности написано: 

  • поддерживаются модули с разными кварцами - 8, 16, 20 МГц. По умолчанию установлена частота 16 МГц, используйте функцию setClock если у вас модуль с другим кварцем.
  • поддержка CanHacker (приложение для Windows)
  •  
  •  

Присвоение значения параметру функции setClock находится в строке 68 файла CanHacker.h и выглядит после моего изменения уже вот так:        CAN_CLOCK canClock = MCP_8MHZ;

Считаю, что этим я перевел библиотеку на восьмимегагерцевый кварц. Если неправ, то поправьте меня.

Действие второе. Открываем пример из библиотеки Canhacker, а именно Documents\Arduino\libraries\arduino-canhacker-master\examples\usb_cdc\usb_cdc\usb_cdc.ino и компилируем его. Тут нас поджидает огорчение в виде сообщения can.h: No such file or directory. Т.е. нет такого файла. 

Действие третье. Возвращаемся на страницу канхакера и дочитываем Использует БИБЛИОТЕКУ для связи с MCP2515. Тыкаем в ссылку и снова качаем библиотеку. https://github.com/autowp/arduino-mcp2515 и подключаем ее к IDE.

Действие четвертое. Возвращаемся к нашему скетчу usb_cdc.ino и снова компилируем его. Проверяем в какой порт и в какой модуль ардуино заливаем и жмем "Загрузка". Считаю, что на этом модготовка модуля к работе с Canhacker.exe закончена.

Действие пятое. Кто не скачал, тот качает по ссылке из документации саму программу Canhacker. У меня она скачана и инсталирована. Поэтому я просто запускаю ее. В настройках (Setting) выбираю тот же самый порт, в который только что заливал скетч usb_cdc.ino, устанавливаю скорость компорта такую же как в скетче (115200 bit/s), устанавливаю скорость шины которую мне, ну очччень, хочется считать (125 Kbit/s), оставляю одну единственную калку Time Stamp. Жму Ок и перехожу к шестому действию.

Действие шестое. Настройка модуля передатчика. Открываем из примеров скетч на запись \Documents\Arduino\libraries\arduino-mcp2515-master\examples\CAN_write\CAN_write.ino. Обращаю внимание на то, что в setup присутствует такая функция setBitrate(), которая как минимум имеет две перегрузки. Т.е. может принимать один параметр, а может два. Так вот мученникам секты восьмимегагерцевых модулей необходимо добавить в эту функцию второй параметр MCP_8MHZ и будет эта функция выглядеть вот так: mcp2515.setBitrate(CAN_125KBPS, MCP_8MHZ); Больше ничего не меняем. Проверяем настройки выгрузки скетча, что бы случайно не залить в модуль с уже установленным скетчем для канхакера, наш скетч записи в шину. Компилируем и заливаем в другой модуль.

После шести несложных действий мы получили что то наподобие эмулятора каншины и устройства для чтения данных с кан шины. Проверяем. Т.е. просто в программе Canhacker нажимаем Connect. И вижу как в окне Receve появляются две строки с данными из скетча передатчика и весело бегут счетчики количества раз Встаю, улыбаясь раскланиваюсь. Не надо бурных оваций. Я всего лишь прочитал и собрал в кучу то, над чем трудились другие люди не один день. 

 

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

Но моя машина, в отличии от примера,  работает с 29 бит ID. Поэтому иду в скетч CAN_write.ino и меняю 0x036 на 0x800FFFFE. Останавливаю Canhacker, чищу окно приема данных, снова компилирую и загружаю скетч CAN_write.ino. в плату передатчика. Включаю Canhacker и начинаю чухать голову. Фигня какая то... А где же первая строка данных?

  canMsg1.can_id  = 0x800FFFFE;
  canMsg1.can_dlc = 8;
  canMsg1.data[0] = 0x8E;
  canMsg1.data[1] = 0x87;
  canMsg1.data[2] = 0x32;
  canMsg1.data[3] = 0xFA;
  canMsg1.data[4] = 0x26;
  canMsg1.data[5] = 0x8E;
  canMsg1.data[6] = 0xBE;
  canMsg1.data[7] = 0x86;

  canMsg2.can_id  = 0x036;
  canMsg2.can_dlc = 8;
  canMsg2.data[0] = 0x0E;
  canMsg2.data[1] = 0x00;
  canMsg2.data[2] = 0x00;
  canMsg2.data[3] = 0x08;
  canMsg2.data[4] = 0x01;
  canMsg2.data[5] = 0x00;
  canMsg2.data[6] = 0x00;
  canMsg2.data[7] = 0xA0;

т.е. canMsg2 Canhacker видит а то, для чего я его собирал не видит? Уважаемый MaksVV скинул мне скетч в 90 сообщении и сказал, что у него он работает.

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

struct can_frame canMsg1;
struct can_frame canMsg2;
MCP2515 mcp2515(10);


void setup() {

  canMsg1.can_id  = 0x800FFFFE;
  canMsg1.can_dlc = 8;
    
  while (!Serial);
  Serial.begin(115200);
  SPI.begin();
  
  mcp2515.reset();
  mcp2515.setBitrate(CAN_125KBPS, MCP_8MHZ);
  mcp2515.setNormalMode();
  
 }

void loop() {
  canMsg1.data[0] = 0x8F;
  canMsg1.data[1] = 0x43;
  canMsg1.data[2] = 0xB1;
  canMsg1.data[3] = 0x00;
  canMsg1.data[4] = 0x11;
  canMsg1.data[5] = 0x01;
  canMsg1.data[6] = 0x01;
  canMsg1.data[7] = 0x00;
  
  mcp2515.sendMessage(&canMsg1);
  delay (500);
  canMsg1.data[0] = 0x49;
  canMsg1.data[1] = 0x06;
  canMsg1.data[2] = 0x00;
  canMsg1.data[3] = 0x00;
  canMsg1.data[4] = 0x00;
  canMsg1.data[5] = 0x00;
  canMsg1.data[6] = 0x00;
  canMsg1.data[7] = 0x00;
  mcp2515.sendMessage(&canMsg1);
  
  Serial.println("Messages sent");
  
  delay(500);

}

Как вы можете прочитать дальше наши с ним сообщения, скетч у меня заработал и Canhacker увидел 29 битный ID. Жаль не сделал скрин, а то сам себе уже не верю. 

И все же, продолжим. Останавливаю Canhacker, беру тот же скетч из 90 сообщения и снова лью в передатчик. Обращаю внимание на  mcp2515.setBitrate(CAN_125KBPS, MCP_8MHZ);

Ну и, в общем то, тут и вокзал. Приехали. передатчик шлет в свой компорт

Messages sent

Messages sent
а Canhacker-у пофигу.
ak62
Offline
Зарегистрирован: 03.01.2019

Из тойже библиотеки mcp2515 открываю скетч Documents\Arduino\libraries\arduino-mcp2515-master\examples\CAN_read \CAN_read.ino Не забываю за секту и добавляю в функцию запись про восьмимегагерцевый кврц mcp2515.setBitrate(CAN_125KBPS, MCP_8MHZ); Плюю на, с таким трудом собранный канхакер, выключаю его и лью вместо него приемник. Открываю компорт приемника и офигеваю. Кроме 

------- CAN Read ----------
18:57:43.244 -> ID  DLC   DATA
 там ничего нет. Начинаю уже психовать. Лихорадочно резетить и один и другой модуль. Нифига. Передачик пишет, что Message Sent, а приемнику пофиг. Ну так же не быват, блин. Открываю скетч передатчика и возвращаю все в зад. Заливаю в передатчик.
------- CAN Read ----------
18:57:43.244 -> ID  DLC   DATA
F6 8 8E 87 32 FA 26 8E BE 86 
19:02:21.803 -> 36 8 E 0 0 8 1 0 0 A0 
F6 8 8E 87 32 FA 26 8E BE 86 
19:02:21.871 -> 36 8 E 0 0 8 1 0 0 A0 
побежало! Но не с 29 битным ID

И так неделю... 

То идет, то не идет. Дальше начинаю думать. В принципе то получается, что проблема может быть как в передатчике, так и в приемнике. Для того, что бы понять где косяк нужны другие примеры с приемо/передатчиками.  

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

Снова помог уважаемый MaksVV в сообщении 75 дал ссылку на другую библиотеку. Удаляю все предыдущие, устанавливаю эту. В модулях ничего еще не трогаю. Из установленной вновь библиотеки заливаю скетч \Documents\Arduino\libraries\MCP_CAN_lib-masterPOSL\examples\CAN_send.ino в передатчик. Т.е. получается, что передатчик и приемник из разных библиотек. И какая разница??? В авто вообще библиотек нет! Пробую. В этой библиотеке и ее примере все наглядно. И скорость шины и частота кварца. Меняю на свои. CAN0.begin(MCP_ANY, CAN_125KBPS, MCP_8MHZ), заливаю. Эта библиотека более дружелюбна к таким, как я и когда передатчик отослал сообщение в шину, то он может еще и сказать успешно или нет. И в данный момент его все устроило.

19:42:11.918 -> MCP2515 Initialized Successfully!
19:42:11.918 -> Message Sent Successfully!
 а отправляет он 
------- CAN Read ----------
19:44:25.019 -> ID  DLC   DATA
100 8 0 1 2 3 4 5 6 7 
отять же короткий ID
Меняю ID 0x100 на все тот же 0x800FFFFE, заливаю в передатчик.

Уже прогресс, а не тупое молчание

7FE 8 0 1 2 3 4 5 6 7 
7FE 8 0 1 2 3 4 5 6 7 
7FE 8 0 1 2 3 4 5 6 7 
7FE 8 0 1 2 3 4 5 6 7 
7FE 8 0 1 2 3 4 5 6 7 
только ID чего то покрутило..
Еще один добрый человек, не с этого форума, подсказал, что в функции отправки byte sndStat = CAN0.sendMsgBuf(0x800FFFFE, 0, 8, data); для 29 бит ID нужно 0 поменять на 1. Меняю. byte sndStat = CAN0.sendMsgBuf(0x800FFFFE, 1, 8, data);
Блин. Стало и не нюхает ничерта. Так, но мой то ID 0x000FFFFE. Может тут так нужно передавать? Пробую. Ни черта не нюхает. Прихожу к выводу, что косяк в приемнике из первой библиотеки. Меняю приемник на приемник из второй библиотеки.
НЕ ЗАБЫВАЮ ЗА свои 125 8!

О!!! та эта связка просто героическая!

20:00:05.171 -> MCP2515 Initialized Successfully!
20:00:05.171 -> MCP2515 Library Receive Example...
20:00:05.171 -> Extended ID: 0x000FFFFE  DLC: 8  Data: 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07
Что отослал, то и принял! (а почему нет? и приемник и передатчик из одной библиотеки, хотя предыдущая то не принимала!)
Получается что косячит ПРИЕМНИК? из версии для Canhacker?
ak62
Offline
Зарегистрирован: 03.01.2019

Обратные эксперименты. Приемник из второй библиотеки, передатчик из первой. Не забываем за секту, заливаем.

20:06:52.584 -> MCP2515 Initialized Successfully!
20:06:52.584 -> MCP2515 Library Receive Example...
20:06:52.584 -> Standard ID: 0x0F6       DLC: 8  Data: 0x8E 0x87 0x32 0xFA 0x26 0x8E 0xBE 0x86
20:06:52.618 -> Standard ID: 0x036       DLC: 8  Data: 0x0E 0x00 0x00 0x08 0x01 0x00 0x00 0xA0
 Принимает. Меняю ID на 0x000FFFFE
20:09:08.167 -> MCP2515 Initialized Successfully!
20:09:08.167 -> MCP2515 Library Receive Example...
Standard ID: 0x7FE       DLC: 8  Data: 0x8E 0x87 0x32 0xFA 0x26 0x8E 0xBE 0x86
20:09:08.235 -> Standard ID: 0x036       DLC: 8  Data: 0x0E 0x00 0x00 0x08 0x01 0x00 0x00 0xA0
принимает, но фигню. Слушаем совет MaksVV и подставляем 0x800FFFFE
 
Вообще бомба!
20:10:55.712 -> MCP2515 Initialized Successfully!
20:10:55.712 -> MCP2515 Library Receive Example...
20:10:55.712 -> Extended ID: 0x000FFFFE  DLC: 8  Data: 0x8E 0x87 0x32 0xFA 0x26 0x8E 0xBE 0x86
20:10:55.712 -> Standard ID: 0x036       DLC: 8  Data: 0x0E 0x00 0x00 0x08 0x01 0x00 0x00 0xA0
 
Так косяк таки в приемнике для библиотеки канхакера?

И?

Остается надеяться на то, что этот приемник заработает с моим авто. А за канхакера я буду.

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

ak62 все что вы написали в посте 121 описано мной по ссылке  как сделать канхкер. Там же все библиотеки. Может у вас MCP2515.h кривая? скачайте у меня из того же архива. 

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

MaksVV пишет:

ak62 все что вы написали в посте 121 описано мной по ссылке  как сделать канхкер. Там же все библиотеки. Может у вас MCP2515.h кривая? скачайте у меня из того же архива. 

Я читал и делал все по вашей ссылке. Сегодня уже пошел в, так сказать, оригинальные исходники и потратил полтора часа на описание и одновременную сборку.

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

вот только что потратил 2 минуты.  Убрал ВСЕ библы из папки libreries моидокументы/ардуино и библы, связанные с кан, из папки в ProgrammFiles/Arduino. Разорхивировал в папку libreries моидокументы/ардуино архив по ссылке выше. Залил скетч из примера usb can . в оба модуля. Открыл две проги кан хакер. Всё работает. Что я делаю не так? 

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

MaksVV пишет:

вот только что потратил 2 минуты.  Убрал ВСЕ библы из папки libreries моидокументы/ардуино и библы, связанные с кан, из папки в ProgrammFiles/Arduino. Разорхивировал в папку libreries моидокументы/ардуино архив по ссылке выше. Залил скетч из примера usb can . в оба модуля. Открыл две проги кан хакер. Всё работает. Что я делаю не так? 

Два архива?

Я сейчас сделаю тоже самое.

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

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

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

да один архив - папка CAN.rar из неё все извлечь в моиДокументы/ардуино/лайбрарис, ВСЁ!

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

хорошо пробую так. Я с этого начинал.

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

На это не обращать внимание?

Скетч использует 9550 байт (29%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 275 байт (13%) динамической памяти, оставляя 1773 байт для локальных переменных. Максимум: 2048 байт.
Неверная библиотека найдена в C:\Users\Alex\Documents\Arduino\libraries\can-usb-master: нет заголовочных файлов (.h), найденных в C:\Users\Alex\Documents\Arduino\libraries\can-usb-master
Неверная библиотека найдена в C:\Users\Alex\Documents\Arduino\libraries\can-usb-master: нет заголовочных файлов (.h), найденных в C:\Users\Alex\Documents\Arduino\libraries\can-usb-master
я писал об этом в 48 сообщении.
MaksVV
Offline
Зарегистрирован: 06.08.2015

у меня также пишет, не обращаю. Дак работает или нет? 

update - убрал эту неверную библиотеку из архива, всё равно не нужна она там. Чтобы глаз не мазолила

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

Залил скетч из примера usb can . в оба модуля. Открыл две проги кан хакер Все работает. Но остался вопрос, какого канхакер не читает 29 бит ID из примеров??? Забыл уже проверял я или не проверял именно это на машине. Думаю, что проверял. Но проверю еще раз.

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

Nikey пишет:
Везде пишут что в авто даже с одним проводом всё работает.

если GND модулей соединять то да, должно и с одним  проводом. 

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

ak62 пишет:
Но остался вопрос, какого канхакер не читает 29 бит ID из примеров???

а вы щас проверьте, всё будет работать, скорее всего. 

ПС. залил в архив библу POSL она более адекватная. Так что проверяйте примеры MCP2515.h и mcp_can.h

должно всё работать. Не забываем настраивать скорость, кварц и пин CS 10. 

и да. Если используем функцию из 4 параметров, то  для ID 000FFFFE пишем так:

CAN0.sendMsgBuf(0x000FFFFE, 1, 8, data);  (единичка это 29 бит ID, соотвественно  "0" это 11 бит ID)

Если используем функцию из 3 параметров, то для ID 000FFFFE пишем так:

CAN0.sendMsgBuf(0x800FFFFE, 8, data); 

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

Да насчет массы я вкурсе, чот забыл про нее... Не ожидал что передатчик без приемника мгновенно зависает и не отвисает... Итить твою мать... Как же все сложно- то... Макс, а можно ардуину запрограммировать так чтоб 2515 не can, а van протокол читал? Е манчестер. 

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

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

Не видият они друг друга. Вчера перед выключением компьютера абсолютно ничего не трогал. Все usb кабели оставались в своих гнездах, сборки ардуино+мср на рассоединялись. Настроены канхакеры один на ком1, второй на ком 5. Приличных слов не осталось. Поэтому промолчу.

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

Почередная заливка вчерашних скетчей из примера usb can в модули, ситуацию не изменила.

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

Про подготовительные операции писать больше не буду. Т.е. подразумевается, что все лишнее удалил, нужное добавил, скорости выставил.

Залил скетч отправки из другой библиотеки в один из модулей. Канхакер ожил на прием 11 бит ID. 29 бит хоть так CAN0.sendMsgBuf(0x800FFFFE, 8, data); хоть так CAN0.sendMsgBuf(0x000FFFFE, 1, 8, data); канхакер не видит, хотя модуль отправки рапортует 14:09:31.975 -> MCP2515 Initialized Successfully!

14:09:31.975 -> Message Sent Successfully!
Message Sent Successfully!
Message Sent Successfully!
Message Sent Successfully!
Message Sent Successfully!
Message Sent Successfully!
 
Если отключить канхакер, то 
Message Sent Successfully!
Error Sending Message...
Error Sending Message...
Error Sending Message...
 

 

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

Залил скетч приема в другой модуль. Вот вывод

14:15:19.552 -> MCP2515 Initialized Successfully!
14:15:19.552 -> MCP2515 Library Receive Example...
Extended ID: 0x000FFFFE  DLC: 8  Data: 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07
Extended ID: 0x000FFFFE  DLC: 8  Data: 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07
 все принимает.
ak62
Offline
Зарегистрирован: 03.01.2019

А теперь снова позаливал в оба модуля скетч  из примера usb can

И канхакер все видит. Просто пи&ц...

Для того что бы канхакер заработал, сначала в модули нужно позаливать что нибудь, что бы работало между собой, а потом залить канхакеры? А как понять в машине какое настроение у канхакера?

ПС Выдернул из usb кабели от модулей, подключил кабели от модулей. НЕ работает!

На этом я заканчиваю эксперименты с этой связкой.

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

Могу предположить только, что перед вытаскиванием юсб провода не нажимали «отключить» на кагхакере. Ну и , надеюсь, перезапустить прогу канхакер тоже пробовпли , когда глючит. Вообще можно купить хорошийи двухканальный кананализатор. Также им будете пробеги мотать на фордах и ключи писать. 

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

Это то, что удалось сделать на сейчас https://www.youtube.com/watch?v=kLJkS5OGb-8 Мне не нужно пробеги мотать. Я хочу в своем авто сделать доп функции.

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

Это было после слова также. А то что там двухканальный кан-анализатор вы не заметили? Он на стм32 и прошивку писал граммотный чел, поэтому пропуски кан сообщений очень маловероятны и работает стабильно. 

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

Можно купить https://www.volvotech.eu/cfeplus А что самому потом делать? 

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

20 тыщ против 2 две большие разницы. Тем более что вы эти 2 отобьете смотав пробег на паре фокусов или фиест. 

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

Ак62, может плату какую сменить?... Мне однажды помогло