Arduino UNO и MCP2515 CAN

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

-NMi- пишет:

А зачем менять кан трансивер??? чем 1050 не нравится???

Чтоб питание можно было 3 в. подать.

А так, у Fayton всё платно.

-NMi-
Онлайн
Зарегистрирован: 20.08.2018

То есть все мои "попытки" создать то, что продаётся за >10к "нахалтай" - это фейк??? Уотт я повёлся...          ))))))))))))))))))0

kulibih
Offline
Зарегистрирован: 19.03.2020

-NMi- пишет:

То есть все мои "попытки" создать то, что продаётся за >10к "нахалтай" - это фейк??? Уотт я повёлся...          ))))))))))))))))))0

А чем нормальный канхакер или анализер не устраивает который работает ОЧЕНЬ стабильно без глюков?
цена три копейки на PRo MINI c Ft232 и Mpc но всё работает

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

Всем привет.

Собрал UNO + MCP2515. Залил скетч canhacker, тот что в #3 посте. Подключил к панели приборов на столе.

Так вот на столе всё работает отлично, а в машине полный провал.

Сanhacker принимает несколько пакетов и затыкается.

Наличие перемычки на can плате не влияет на результат.

Заметил, что после затыкания очень долго происходит disconnect в canhacker. Такое ощущение, что MCP2515 зависает.

Подскажите в какой стороне искать причину?

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

взять уно оригинал, у нее usb-ttl стоит FTDI, а в китайской уно - ch340 ( который не вытягивает). Либо брать про мини + внешнюю ftdi

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

Взял про мини и ftdi. Ничего не изменилось. На столе работает, на машине 3-8 пакетов и затык.

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

Бери есп ей сил хватит

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

Не вывозит канхакер на ардуине поток из машины. Машина приус альфа.

Пришлось нужные пакеты искать в интернете.

Настроив маски и фильтры на нужные сообщения мой скеч работает нормально.

Но канхакер всё равно еще нужен.

Переходить на STM?

Что посоветуете из бюджетного?

-NMi-
Онлайн
Зарегистрирован: 20.08.2018

vadiks пишет:

Не вывозит канхакер на ардуине поток из машины. Машина приус альфа.

Переходить на STM?

Отт ано каг. А каг-же посты выше???

пирихади.

Komandir
Offline
Зарегистрирован: 18.08.2018

Кто то запускал 328PB с кварцем на 32 МГц.

-NMi-
Онлайн
Зарегистрирован: 20.08.2018

Komandir пишет:

Кто то запускал 328PB с кварцем на 32 МГц.

Датышо, ачё как мало, 32? 128 не?

Komandir
Offline
Зарегистрирован: 18.08.2018

-NMi-

http://arduino.ru/forum/obshchii/vse-pro-atmega328pb-0#comment-466046

dimax пробовал ! Только нежен не кварц, а генератор - сам камень не может раскачать генерацию на 32.

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

Собрал CanHacker на STM. Теперь затыков нет. Поток идет очень плотный.

Komandir
Offline
Зарегистрирован: 18.08.2018

И какие именно пакеты превалируют ?

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

С каким ID или что-то другое имеете ввиду?

Komandir
Offline
Зарегистрирован: 18.08.2018

Ну да - кто/что там гоняет что 328 не хватило ???

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

ID разные. Штук 20 с периодом 20-30 милисек. Всего гуляет под сотню штук.

-NMi-
Онлайн
Зарегистрирован: 20.08.2018

Komandir пишет:

Кто то запускал 328PB с кварцем на 32 МГц.

Вот кагда сам запустишь, да ишшо фото/видео приложишь - уотт тагда буит от тя толк а пейсать букавы и несвои ссылки любой д.е.б смагёт)))

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

vadiks пишет:

ID разные. Штук 20 с периодом 20-30 милисек. Всего гуляет под сотню штук.

Программа Car BUS Analyzer показала максимальную скорость обмена 1050 frame/sec

Точное кол-во пакетов = 94

mrzl
Offline
Зарегистрирован: 04.05.2020

Здравствуйте. Имею Arduino nano + шилд с MCP2515 с 8 МГЦ. Пользую программу can hacker. Подскажите, как в программе can hacker выcчитывать User def. скорость ?
мне нужно перепробовать все: 33.333, 31,25, 40, 80. Заранее спасибо.

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

vadiks пишет:

Собрал CanHacker на STM. Теперь затыков нет. Поток идет очень плотный.

под СТМ сами писали или готовое переделывали?

CAN интерфейс встроенный в СТМ или внешний модуль?

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

b707 пишет:

vadiks пишет:

Собрал CanHacker на STM. Теперь затыков нет. Поток идет очень плотный.

под СТМ сами писали или готовое переделывали?

CAN интерфейс встроенный в СТМ или внешний модуль?

Переделал всеми используемую библиотеку MCP2515 под второй канал SPI.

У него выводы +5 толерантны, MCP2515 питается от USB +5В.

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

vadiks пишет:

Переделал всеми используемую библиотеку MCP2515 под второй канал SPI.

У него выводы +5 толерантны, MCP2515 питается от USB +5В.

Понятно.

Просто в СТМ уже есть свой встроенный КАН

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

b707 пишет:

vadiks пишет:

Переделал всеми используемую библиотеку MCP2515 под второй канал SPI.

У него выводы +5 толерантны, MCP2515 питается от USB +5В.

Понятно.

Просто в СТМ уже есть свой встроенный КАН

Да, знаю.

В рабочей версии желязики я им и воспользовался. Но это уже был не CanHacker.

Под встроенный Can я уже писал не на Arduino.

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

vadiks пишет:

В рабочей версии желязики я им и воспользовался. Но это уже был не CanHacker.

Под встроенный Can я уже писал не на Arduino.

если планируете куда-нить выкладывать код - сбросьте ссылку :)  Код "не под ардуино" не пугает.

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

b707 пишет:

vadiks пишет:

В рабочей версии желязики я им и воспользовался. Но это уже был не CanHacker.

Под встроенный Can я уже писал не на Arduino.

если планируете куда-нить выкладывать код - сбросьте ссылку :)  Код "не под ардуино" не пугает.

:) Коммерческий проект однако.

Использование встроенного Can можно найти в инете и в примерах на оф. сайте. Главное, на начальном этапе, правильно сконфигурить в STM32CubeMX.

vgus
Offline
Зарегистрирован: 22.08.2020

Добрый день! Раньше программировал только с чипами Atmel и только в Studio. Хочу разобраться и сделать на авто пару игрушек с CAN. Почитал форум. Я правильно понял, что STM хорошо работает с MCP2551, а если хочешь работать с Atmel, например Nano, надо брать MCP 2515. Т.е. совместить чисто приемник 2551 напрямую с Nano сложно и еще никому не удавалось? В STM контролер СAN BUS есть, а в Atmel  - нет?

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

vgus пишет:

...Т.е. совместить чисто приемник 2551 напрямую с Nano сложно и еще никому не удавалось?

Сложно, можно. НО зачем?!

vgus пишет:

...В STM контролер СAN BUS есть, а в Atmel  - нет?

Если обобщать, то неверно. Есть ATmega32M1 с CAN на борту. Ардуино поддерживает этот чип.

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

vgus
Offline
Зарегистрирован: 22.08.2020

Спасибо! Все выстраивается в логическую цепочку.

t39m
Offline
Зарегистрирован: 11.09.2020

Здравствуйте!

Помогите разобраться. Ардуино Nano 328  V3.0 + MCP2515 + кнопка.

Хочу сделать чтобы при нажатии на кнопку висящую на D6 светился светодиод на ноге D13. Проблема в том, что если закомментить //MCP2515 mcp2515(10) кнопка работает, как только я его раскомменчиваю - данные с порта не читаются. Не важно цифровой это порт или аналоговый. Кто то сталкивался с аналогичной проблемой? Может я где то что то не так делаю?

#include <SPI.h>
#include <mcp2515.h>
//MCP2515 mcp2515(10);
void setup() {
  pinMode(6, INPUT_PULLUP); 
  pinMode(13, OUTPUT);
}
void loop() {
if(digitalRead(6)==LOW)//если кнопка нажата то   
     {
      digitalWrite(13,HIGH);
     } else {
      digitalWrite(13,LOW);
      }
}

 

nik182
Онлайн
Зарегистрирован: 04.05.2015

МСР забирает ногу 13 себе.

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

t39m пишет:

Здравствуйте!

Помогите разобраться. Ардуино Nano 328  V3.0 + MCP2515 + кнопка.

Хочу сделать чтобы при нажатии на кнопку висящую на D6 светился светодиод на ноге D13. Проблема в том, что если закомментить //MCP2515 mcp2515(10) кнопка работает, как только я его раскомменчиваю - данные с порта не читаются. Не важно цифровой это порт или аналоговый. Кто то сталкивался с аналогичной проблемой? Может я где то что то не так делаю?

#include <SPI.h>
#include <mcp2515.h>
//MCP2515 mcp2515(10);
void setup() {
  pinMode(6, INPUT_PULLUP); 
  pinMode(13, OUTPUT);
}
void loop() {
if(digitalRead(6)==LOW)//если кнопка нажата то   
     {
      digitalWrite(13,HIGH);
     } else {
      digitalWrite(13,LOW);
      }
}

 

 

Данные читаются, это можно проверить поместив Serial.print(digitalRead(6)); А вот светодиод не горит, потому что mcp2515 используе хардверный SPI который использует 13 пин, а так же 11 и 12. 

t39m
Offline
Зарегистрирован: 11.09.2020

Огромное спасибо!

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

По примеру из постов собрал шлюз. опробовал на столе. Сильно тормозит. У меня используется связка из двух MCP2515.
На них есть вывод INT. один из них подключается, согласно примерам интернета на 2 пин. А со второго модуля куда его подключать? В какой библиотеке описывается нумерация и функционал пинов?

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

Discover0708 пишет:

В какой библиотеке описывается нумерация и функционал пинов?

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

Discover0708 пишет:

По примеру из постов собрал шлюз. опробовал на столе. Сильно тормозит.

Покажите код.

Discover0708
Offline
Зарегистрирован: 20.09.2020
#include <SPI.h>
#include <mcp2515.h>

struct can_frame can1Msg;
struct can_frame can2Msg;

MCP2515 CAN1(9);
MCP2515 CAN2(10);

void setup() {
  SPI.begin();
  
  CAN1.reset();
  CAN1.setBitrate(CAN_500KBPS);
  CAN1.setNormalMode();

  CAN2.reset();
  CAN2.setBitrate(CAN_500KBPS);
  CAN2.setNormalMode();
 
}

void loop() {
  
  if (CAN1.readMessage(&canMsg1) == MCP2515::ERROR_OK) {
    CAN2.sendMessage(&canMsg1);
  }

   if (CAN2.readMessage(&canMsg2) == MCP2515::ERROR_OK) {
    CAN1.sendMessage(&canMsg2);
  }

}

 

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

Код из поста №10
Мне кажется если использовать в программе этот вывод, то не тратилось бы столько ресурсов на постоянный опрос...
на схеме подключения МСР2515. этот пин участвует в работе. в какой библиотеке описывается его функционал? именно как вывод  INT..

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

Discover0708 пишет:

На них есть вывод INT. один из них подключается, согласно примерам интернета на 2 пин. А со второго модуля куда его подключать? В какой библиотеке описывается нумерация и функционал пинов?


точно также. Обе модуля подключаются одинаково

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

В смысле к этому же пину ( 2)?
А как же он тогда понимать будет, какое направление инициализировало посылку?

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

Вы что не то говорите. У вас, надеюсь два 2515 не к одной ардуине приделаны, а к разным? Ну и подключайте INT одного модуля к одной ардуине пин2, INT другого - к другому пину2

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

Discover0708 пишет:

Код из поста №10
Мне кажется если использовать в программе этот вывод, то не тратилось бы столько ресурсов на постоянный опрос...
на схеме подключения МСР2515. этот пин участвует в работе. в какой библиотеке описывается его функционал? именно как вывод  INT..

В этом коде INT НЕ участвует.

Еще раз повторяю - вход INT и его обработка задается в основной программе!

Вот код CanHacker. Изучайте.

#include <can.h>
#include <mcp2515.h>

#include <CanHacker.h>
#include <CanHackerLineReader.h>
#include <lib.h>

#include <SPI.h>

const int SPI_CS_PIN = 10;
const int INT_PIN = 2;

CanHackerLineReader *lineReader = NULL;
CanHacker *canHacker = NULL;

void setup() {
    Serial.begin(115200);
    SPI.begin();
    
    canHacker = new CanHacker(&Serial, NULL, SPI_CS_PIN);
    lineReader = new CanHackerLineReader(canHacker);
    
    pinMode(INT_PIN, INPUT);
}

void loop() {
    if (digitalRead(INT_PIN) == LOW) {
        canHacker->processInterrupt();
    }

    // uncomment that lines for Leonardo, Pro Micro or Esplora
    // if (Serial.available()) {
    //   lineReader->process();    
    // }
}

// serialEvent handler not supported by Leonardo, Pro Micro and Esplora
void serialEvent() {
    lineReader->process();
}

 

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

b707 пишет:
Вы что не то говорите. У вас, надеюсь два 2515 не к одной ардуине приделаны, а к разным? Ну и подключайте INT одного модуля к одной ардуине пин2, INT другого - к другому пину2

Это Вы не поняли. У него как раз одна ардуина и два модуля подключенных к ней.

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

Что такое "тормозит"? 

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

b707 пишет:
Вы что не то говорите. У вас, надеюсь два 2515 не к одной ардуине приделаны, а к разным? Ну и подключайте INT одного модуля к одной ардуине пин2, INT другого - к другому пину2

К одной... Я из него для начала пытаюсь сделать шлюз, а потом добавить фильтр к определенным сообщениям, если потянет...конечно.
в посте номер 10 описывается случай как раз шлюза, но без пина INT. и поэтому он в моем автомобиле "тормозит"
В моем случае это шина из двух блоков и мне нужно менять значение одного (двух) байтов  в потоке...
шина работает в обе стороны( назовем это двунаправленностью)

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

sadman41 пишет:

Что такое "тормозит"? 


в моем понимании это теряет пакеты...

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

Discover0708 пишет:

sadman41 пишет:

Что такое "тормозит"? 


в моем понимании это теряет пакеты...

Как вы это установили? Может МК их не получает вовсе или второй MCP их не может отправить.

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

Спасибо, vadiks!

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

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

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

sadman41 пишет:

Discover0708 пишет:

sadman41 пишет:

Что такое "тормозит"? 


в моем понимании это теряет пакеты...

Как вы это установили? Может МК их не получает вовсе или второй MCP их не может отправить.


в моем случае это Gateway и панель приборов. если нет кан сообщения, то на панели это видно

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

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

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

Discover0708 пишет:

Спасибо, vadiks!

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

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

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