только что проверил пофиг на 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);
/* 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. Эти две функции не работают.
можете на пальцах объяснить вот это? ID 0x00FFFFFE пишем так 0x80FFFFFE Потому что так канхакер понимает, что ему отослали 0x00FFFFFE. Но проблему не решит т.к. я подключал этот канхакер к своей шине и он молчал, как рыба. Не видел ничего из шины. И скетч на чтение из библиотеки канхакера не читал мою шину. А скетч из других читает.
В общем, такая история. Вчера вечером снова настроил две ардуино + МСР на прием канхакераом сообщений. Выключил компьютер. Сегодня с утра ничего не работает. Удивительные МСР! Залил скетчи прием/передача - работает. ЗАлил в одну скетч канхакера - не видит канхакер ничего.
Закономерности не нашел. Работает или не работае по своему желанию. Пробовал и отделно питание подключать и на разные компы разносить. В большинстве случаев 29 бит ИД не читает. Можно сказать, что 99% не читает. Причем не важно кто приемник, а кто передатчик... С обычными ИД в 100% все ок.
залейте в оба модуля скетч кан хакер. Откройте две проги канхакер. всё будет работать скорее всего. Если скорость более 100кБит/с (эти модули на более медленной не работают).
Дак не робит только на канхакере или примеры рид врайт тоже глючат на 29бит? и какой либой в итоге пользуетесь?
Не работает только на канхакере. Залил в оба канхакер. Не общаются. Ни при каких обстоятельствах. Залил в один write, канхакер видит. Поменял ИД с 0x0F6 на 0x800FFFFE - не видит. Все терпение лопнуло. Буду ждать 16 МГц
скетч передатчика выложите. пин 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
*********************************************************************************************************/
П.С. в файле MCP2515.h в строке 13 поменял #define MCP2515_DEFAULT_CLOCK_FREQUENCY 16e6 на #define MCP2515_DEFAULT_CLOCK_FREQUENCY 8e6 и все зачиталось и на 500 и на 125.
глаза до дыр протер. Как так? Все работает, выключаю, ложусь спать, встаю, включаю не работает. День возишься туда сюда заливаешь, заработало. Пошел в гараж - не работает. П.С. Пин 2 соединен. Может нужно не на соплях, а спаять все...
Накупил 3 кан шилда (1 полноценный 16мГц и два маленьких на 8мц) и 5 ардуин разных видов для канхакерства. Как ни бился в попытке заставить всё это хозяйство работать - глухо... Ни в какой комбинации не фунциклировало хоть тресни. А причина как оказалось была банальна - нужен обязательно приёмник. Просто один передатчик почему-то адекватно не работает. Подавай ему приёмник и всё тут! Если в процессе работы программы "Канхакер" случайно отвалятся кановские провода, то всё... пипец... передатчик зависает и надо его по-новой перезагружать (вкл\выкл). Странно, но факт. Везде пишут что в авто даже с одним проводом всё работает.
Подсоединил к кан шине лог анализатор "Saleae Logic" чтоб посмотреть что хоть там творится. Ну и как всегда... происходят там непонятные вещщи. Несмотря на то что передатчик передаёт пакет... приёмник его нормально принимает... т.е. то что послали то и приняли, логанализатор почемуто не может нормально расшифровать пакеты. Странно...
Итак. Действие первое. Идем на github, набираем в поиске Canhacker и по первой ссылке качаем архив. https://github.com/autowp/arduino-canhacker Устанавливаем библиотеку в IDE.
поддерживаются модули с разными кварцами - 8, 16, 20 МГц. По умолчанию установлена частота 16 МГц, используйте функцию setClock если у вас модуль с другим кварцем.
Присвоение значения параметру функции 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 появляются две строки с данными из скетча передатчика и весело бегут счетчики количества раз Встаю, улыбаясь раскланиваюсь. Не надо бурных оваций. Я всего лишь прочитал и собрал в кучу то, над чем трудились другие люди не один день.
Но моя машина, в отличии от примера, работает с 29 бит ID. Поэтому иду в скетч CAN_write.ino и меняю 0x036 на 0x800FFFFE. Останавливаю Canhacker, чищу окно приема данных, снова компилирую и загружаю скетч CAN_write.ino. в плату передатчика. Включаю Canhacker и начинаю чухать голову. Фигня какая то... А где же первая строка данных?
Как вы можете прочитать дальше наши с ним сообщения, скетч у меня заработал и Canhacker увидел 29 битный ID. Жаль не сделал скрин, а то сам себе уже не верю.
И все же, продолжим. Останавливаю Canhacker, беру тот же скетч из 90 сообщения и снова лью в передатчик. Обращаю внимание на mcp2515.setBitrate(CAN_125KBPS, MCP_8MHZ);
Ну и, в общем то, тут и вокзал. Приехали. передатчик шлет в свой компорт
Из тойже библиотеки 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
И так неделю...
То идет, то не идет. Дальше начинаю думать. В принципе то получается, что проблема может быть как в передатчике, так и в приемнике. Для того, что бы понять где косяк нужны другие примеры с приемо/передатчиками.
Снова помог уважаемый 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. Может тут так нужно передавать? Пробую. Ни черта не нюхает. Прихожу к выводу, что косяк в приемнике из первой библиотеки. Меняю приемник на приемник из второй библиотеки.
ak62 все что вы написали в посте 121 описано мной по ссылке как сделать канхкер. Там же все библиотеки. Может у вас MCP2515.h кривая? скачайте у меня из того же архива.
ak62 все что вы написали в посте 121 описано мной по ссылке как сделать канхкер. Там же все библиотеки. Может у вас MCP2515.h кривая? скачайте у меня из того же архива.
Я читал и делал все по вашей ссылке. Сегодня уже пошел в, так сказать, оригинальные исходники и потратил полтора часа на описание и одновременную сборку.
вот только что потратил 2 минуты. Убрал ВСЕ библы из папки libreries моидокументы/ардуино и библы, связанные с кан, из папки в ProgrammFiles/Arduino. Разорхивировал в папку libreries моидокументы/ардуино архив по ссылке выше. Залил скетч из примера usb can . в оба модуля. Открыл две проги кан хакер. Всё работает. Что я делаю не так?
вот только что потратил 2 минуты. Убрал ВСЕ библы из папки libreries моидокументы/ардуино и библы, связанные с кан, из папки в ProgrammFiles/Arduino. Разорхивировал в папку libreries моидокументы/ардуино архив по ссылке выше. Залил скетч из примера usb can . в оба модуля. Открыл две проги кан хакер. Всё работает. Что я делаю не так?
Скетч использует 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
Залил скетч из примера usb can . в оба модуля. Открыл две проги кан хакер Все работает. Но остался вопрос, какого канхакер не читает 29 бит ID из примеров??? Забыл уже проверял я или не проверял именно это на машине. Думаю, что проверял. Но проверю еще раз.
Да насчет массы я вкурсе, чот забыл про нее... Не ожидал что передатчик без приемника мгновенно зависает и не отвисает... Итить твою мать... Как же все сложно- то... Макс, а можно ардуину запрограммировать так чтоб 2515 не can, а van протокол читал? Е манчестер.
Сегодня перед походом в гараж решил на столе проверить вчерашнюю связку.
Не видият они друг друга. Вчера перед выключением компьютера абсолютно ничего не трогал. Все usb кабели оставались в своих гнездах, сборки ардуино+мср на рассоединялись. Настроены канхакеры один на ком1, второй на ком 5. Приличных слов не осталось. Поэтому промолчу.
Про подготовительные операции писать больше не буду. Т.е. подразумевается, что все лишнее удалил, нужное добавил, скорости выставил.
Залил скетч отправки из другой библиотеки в один из модулей. Канхакер ожил на прием 11 бит ID. 29 бит хоть так CAN0.sendMsgBuf(0x800FFFFE, 8, data); хоть так CAN0.sendMsgBuf(0x000FFFFE, 1, 8, data); канхакер не видит, хотя модуль отправки рапортует 14:09:31.975 -> MCP2515 Initialized Successfully!
А теперь снова позаливал в оба модуля скетч из примера usb can
И канхакер все видит. Просто пи&ц...
Для того что бы канхакер заработал, сначала в модули нужно позаливать что нибудь, что бы работало между собой, а потом залить канхакеры? А как понять в машине какое настроение у канхакера?
ПС Выдернул из usb кабели от модулей, подключил кабели от модулей. НЕ работает!
Могу предположить только, что перед вытаскиванием юсб провода не нажимали «отключить» на кагхакере. Ну и , надеюсь, перезапустить прогу канхакер тоже пробовпли , когда глючит. Вообще можно купить хорошийи двухканальный кананализатор. Также им будете пробеги мотать на фордах и ключи писать.
Это было после слова также. А то что там двухканальный кан-анализатор вы не заметили? Он на стм32 и прошивку писал граммотный чел, поэтому пропуски кан сообщений очень маловероятны и работает стабильно.
только что проверил пофиг на MCP_STDEXT можно и MCP_ANY оставить. Уже не помню что эта настройка значит, но явно что-то с типом ID. Но работает и то и то.
передавать 29 битные ID все таки удобно в функции без второго параметра (т.е. всего 3 а не 4).
Выдержка из mcp_can.cpp. Эти две функции не работают.
аа чето помнится это вроде как раз настройка для аппаратных фильтров.
можете на пальцах объяснить вот это? ID 0x00FFFFFE пишем так 0x80FFFFFE Потому что так канхакер понимает, что ему отослали 0x00FFFFFE. Но проблему не решит т.к. я подключал этот канхакер к своей шине и он молчал, как рыба. Не видел ничего из шины. И скетч на чтение из библиотеки канхакера не читал мою шину. А скетч из других читает.
П.С. вникаю в сообщение 26
возможно совпадение, в какой нибудь попытке вы просто забыли поставить в настройке 8мгц в setup(), поэтому не работало. По остальному читаем #26
В общем, такая история. Вчера вечером снова настроил две ардуино + МСР на прием канхакераом сообщений. Выключил компьютер. Сегодня с утра ничего не работает. Удивительные МСР! Залил скетчи прием/передача - работает. ЗАлил в одну скетч канхакера - не видит канхакер ничего.
Закономерности не нашел. Работает или не работае по своему желанию. Пробовал и отделно питание подключать и на разные компы разносить. В большинстве случаев 29 бит ИД не читает. Можно сказать, что 99% не читает. Причем не важно кто приемник, а кто передатчик... С обычными ИД в 100% все ок.
залейте в оба модуля скетч кан хакер. Откройте две проги канхакер. всё будет работать скорее всего. Если скорость более 100кБит/с (эти модули на более медленной не работают).
Дак не робит только на канхакере или примеры рид врайт тоже глючат на 29бит? и какой либой в итоге пользуетесь?
Не работает только на канхакере. Залил в оба канхакер. Не общаются. Ни при каких обстоятельствах. Залил в один write, канхакер видит. Поменял ИД с 0x0F6 на 0x800FFFFE - не видит. Все терпение лопнуло. Буду ждать 16 МГц
скетч передатчика выложите. пин int кан модуля подключаете ?
также пробуем такой скетч залить в обе связки, а потом уже канхкеры.
Скетч Ваш из поста 69. И сейчас он не работает. А позавчера работал. А вот если взять вот этот
то работает. НИЧЕГО НЕ МЕНЯЮ В КАНХАКЕРЕ.
говорю позаливайте в оба модуля скетч выше постом и смотрите во вкладке filter проги канхкер не стоит ли галочка. убрать надо если стоит
А вот если взять вот этот. то работает. НИЧЕГО НЕ МЕНЯЮ В КАНХАКЕРЕ.
в этом скетче у вас нет настройки 8 мгц, а в моём есть. Скоре всего и канхакер у вас все таки 16 МГЦ залит
надеюсь это обратно сделали
Давайте уже завтра. На сегодня уже зла не хватает на них :(
нужно повнимательнее. Там все просто.
глаза до дыр протер. Как так? Все работает, выключаю, ложусь спать, встаю, включаю не работает. День возишься туда сюда заливаешь, заработало. Пошел в гараж - не работает. П.С. Пин 2 соединен. Может нужно не на соплях, а спаять все...
на #113 например что скажете?
Завтра все сниму на скрины, покажу. 8МГц в 113 просто открыл и скопировал, когда заливаю, то ставлю MCP_8MHZ
Приветствую.
Накупил 3 кан шилда (1 полноценный 16мГц и два маленьких на 8мц) и 5 ардуин разных видов для канхакерства. Как ни бился в попытке заставить всё это хозяйство работать - глухо... Ни в какой комбинации не фунциклировало хоть тресни. А причина как оказалось была банальна - нужен обязательно приёмник. Просто один передатчик почему-то адекватно не работает. Подавай ему приёмник и всё тут! Если в процессе работы программы "Канхакер" случайно отвалятся кановские провода, то всё... пипец... передатчик зависает и надо его по-новой перезагружать (вкл\выкл). Странно, но факт. Везде пишут что в авто даже с одним проводом всё работает.
Подсоединил к кан шине лог анализатор "Saleae Logic" чтоб посмотреть что хоть там творится. Ну и как всегда... происходят там непонятные вещщи. Несмотря на то что передатчик передаёт пакет... приёмник его нормально принимает... т.е. то что послали то и приняли, логанализатор почемуто не может нормально расшифровать пакеты. Странно...
Итак. Действие первое. Идем на github, набираем в поиске Canhacker и по первой ссылке качаем архив. https://github.com/autowp/arduino-canhacker Устанавливаем библиотеку в IDE.
Там же на сайте есть документация к Canhacker на русском https://github.com/autowp/arduino-canhacker/tree/master/docs/ru где в частности написано:
Присвоение значения параметру функции 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 появляются две строки с данными из скетча передатчика и весело бегут счетчики количества раз Встаю, улыбаясь раскланиваюсь. Не надо бурных оваций. Я всего лишь прочитал и собрал в кучу то, над чем трудились другие люди не один день.
Но моя машина, в отличии от примера, работает с 29 бит ID. Поэтому иду в скетч CAN_write.ino и меняю 0x036 на 0x800FFFFE. Останавливаю Canhacker, чищу окно приема данных, снова компилирую и загружаю скетч CAN_write.ino. в плату передатчика. Включаю Canhacker и начинаю чухать голову. Фигня какая то... А где же первая строка данных?
т.е. canMsg2 Canhacker видит а то, для чего я его собирал не видит? Уважаемый MaksVV скинул мне скетч в 90 сообщении и сказал, что у него он работает.
Как вы можете прочитать дальше наши с ним сообщения, скетч у меня заработал и Canhacker увидел 29 битный ID. Жаль не сделал скрин, а то сам себе уже не верю.
И все же, продолжим. Останавливаю Canhacker, беру тот же скетч из 90 сообщения и снова лью в передатчик. Обращаю внимание на mcp2515.setBitrate(CAN_125KBPS, MCP_8MHZ);
Ну и, в общем то, тут и вокзал. Приехали. передатчик шлет в свой компорт
Messages sent
Из тойже библиотеки mcp2515 открываю скетч Documents\Arduino\libraries\arduino-mcp2515-master\examples\CAN_read \CAN_read.ino Не забываю за секту и добавляю в функцию запись про восьмимегагерцевый кврц mcp2515.setBitrate(CAN_125KBPS, MCP_8MHZ); Плюю на, с таким трудом собранный канхакер, выключаю его и лью вместо него приемник. Открываю компорт приемника и офигеваю. Кроме
И так неделю...
То идет, то не идет. Дальше начинаю думать. В принципе то получается, что проблема может быть как в передатчике, так и в приемнике. Для того, что бы понять где косяк нужны другие примеры с приемо/передатчиками.
Снова помог уважаемый MaksVV в сообщении 75 дал ссылку на другую библиотеку. Удаляю все предыдущие, устанавливаю эту. В модулях ничего еще не трогаю. Из установленной вновь библиотеки заливаю скетч \Documents\Arduino\libraries\MCP_CAN_lib-masterPOSL\examples\CAN_send.ino в передатчик. Т.е. получается, что передатчик и приемник из разных библиотек. И какая разница??? В авто вообще библиотек нет! Пробую. В этой библиотеке и ее примере все наглядно. И скорость шины и частота кварца. Меняю на свои. CAN0.begin(MCP_ANY, CAN_125KBPS, MCP_8MHZ), заливаю. Эта библиотека более дружелюбна к таким, как я и когда передатчик отослал сообщение в шину, то он может еще и сказать успешно или нет. И в данный момент его все устроило.
Уже прогресс, а не тупое молчание
О!!! та эта связка просто героическая!
Обратные эксперименты. Приемник из второй библиотеки, передатчик из первой. Не забываем за секту, заливаем.
И?
Остается надеяться на то, что этот приемник заработает с моим авто. А за канхакера я буду.
ak62 все что вы написали в посте 121 описано мной по ссылке как сделать канхкер. Там же все библиотеки. Может у вас MCP2515.h кривая? скачайте у меня из того же архива.
ak62 все что вы написали в посте 121 описано мной по ссылке как сделать канхкер. Там же все библиотеки. Может у вас MCP2515.h кривая? скачайте у меня из того же архива.
вот только что потратил 2 минуты. Убрал ВСЕ библы из папки libreries моидокументы/ардуино и библы, связанные с кан, из папки в ProgrammFiles/Arduino. Разорхивировал в папку libreries моидокументы/ардуино архив по ссылке выше. Залил скетч из примера usb can . в оба модуля. Открыл две проги кан хакер. Всё работает. Что я делаю не так?
вот только что потратил 2 минуты. Убрал ВСЕ библы из папки libreries моидокументы/ардуино и библы, связанные с кан, из папки в ProgrammFiles/Arduino. Разорхивировал в папку libreries моидокументы/ардуино архив по ссылке выше. Залил скетч из примера usb can . в оба модуля. Открыл две проги кан хакер. Всё работает. Что я делаю не так?
Я сейчас сделаю тоже самое.
да один архив - папка CAN.rar из неё все извлечь в моиДокументы/ардуино/лайбрарис, ВСЁ!
хорошо пробую так. Я с этого начинал.
На это не обращать внимание?
у меня также пишет, не обращаю. Дак работает или нет?
update - убрал эту неверную библиотеку из архива, всё равно не нужна она там. Чтобы глаз не мазолила
Залил скетч из примера usb can . в оба модуля. Открыл две проги кан хакер Все работает. Но остался вопрос, какого канхакер не читает 29 бит ID из примеров??? Забыл уже проверял я или не проверял именно это на машине. Думаю, что проверял. Но проверю еще раз.
если GND модулей соединять то да, должно и с одним проводом.
а вы щас проверьте, всё будет работать, скорее всего.
ПС. залил в архив библу 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);
Да насчет массы я вкурсе, чот забыл про нее... Не ожидал что передатчик без приемника мгновенно зависает и не отвисает... Итить твою мать... Как же все сложно- то... Макс, а можно ардуину запрограммировать так чтоб 2515 не can, а van протокол читал? Е манчестер.
Сегодня перед походом в гараж решил на столе проверить вчерашнюю связку.
Не видият они друг друга. Вчера перед выключением компьютера абсолютно ничего не трогал. Все usb кабели оставались в своих гнездах, сборки ардуино+мср на рассоединялись. Настроены канхакеры один на ком1, второй на ком 5. Приличных слов не осталось. Поэтому промолчу.
Почередная заливка вчерашних скетчей из примера usb can в модули, ситуацию не изменила.
Про подготовительные операции писать больше не буду. Т.е. подразумевается, что все лишнее удалил, нужное добавил, скорости выставил.
Залил скетч отправки из другой библиотеки в один из модулей. Канхакер ожил на прием 11 бит ID. 29 бит хоть так CAN0.sendMsgBuf(0x800FFFFE, 8, data); хоть так CAN0.sendMsgBuf(0x000FFFFE, 1, 8, data); канхакер не видит, хотя модуль отправки рапортует 14:09:31.975 -> MCP2515 Initialized Successfully!
Залил скетч приема в другой модуль. Вот вывод
А теперь снова позаливал в оба модуля скетч из примера usb can
И канхакер все видит. Просто пи&ц...
Для того что бы канхакер заработал, сначала в модули нужно позаливать что нибудь, что бы работало между собой, а потом залить канхакеры? А как понять в машине какое настроение у канхакера?
ПС Выдернул из usb кабели от модулей, подключил кабели от модулей. НЕ работает!
На этом я заканчиваю эксперименты с этой связкой.
Могу предположить только, что перед вытаскиванием юсб провода не нажимали «отключить» на кагхакере. Ну и , надеюсь, перезапустить прогу канхакер тоже пробовпли , когда глючит. Вообще можно купить хорошийи двухканальный кананализатор. Также им будете пробеги мотать на фордах и ключи писать.
Это то, что удалось сделать на сейчас https://www.youtube.com/watch?v=kLJkS5OGb-8 Мне не нужно пробеги мотать. Я хочу в своем авто сделать доп функции.
Это было после слова также. А то что там двухканальный кан-анализатор вы не заметили? Он на стм32 и прошивку писал граммотный чел, поэтому пропуски кан сообщений очень маловероятны и работает стабильно.
Можно купить https://www.volvotech.eu/cfeplus А что самому потом делать?
20 тыщ против 2 две большие разницы. Тем более что вы эти 2 отобьете смотав пробег на паре фокусов или фиест.
Ак62, может плату какую сменить?... Мне однажды помогло