Arduino Nano + CAN bus mcp2515

Добрый день!
Пытаюсь со штатной магнитолы авто (Hyundai ix35) снять запросы, которые магнитола отправляет в кан шину при включении - нужно для того, чтобы найти команду для включения штатного усилителя.
Для решения этой задачи нашел готовое решение:

Скачал IDE, установил библиотеки КанБас и Канхакера, скачал и запустил скетч. Все прошилось успешно.
На магнитолу подал питание, подключил выводные контакты CanH CanL к mcp2515, запустил CanHacker, соединение с ардуино прошло успешно. Но приема каких либо команд нет - тупо пусто. Выбирал все скорости, безрезультатно. Перемычку J1 на плате mcp2515 установил - толку 0.
Что не так делаю? Снять команду очень нужно для дальнейшего запуска усилителя. Без запуска усилителя нет звука в авто.
Что делаю не так? Все провода подключил в соответствии со схемой. Может нужно добавить резистор между CanH CanL?
Заранее спасибо!

Магнитола может банально ждать какого-нибудь запроса прежде чем начать вещать … (усилитель например должен оповестить голову что он вообще есть в системе и готов …)
Я же правильно понял что магнитола сейчас не в авто, а на столе ???

Да, Вы все верное написали - магнитола на столе лежит, с машиной не соединена. Но она включается, менюшки и крутилки работают… печаль, как же мне тогда понять эту команду…

@mrstorm , для начала посмотрите осциллографом, есть ли что-нибудь на входных контактах.
Ну и схему экспериментов следовало бы опубликовать. Как можно обсуждать неизвестно что!

А можно как то без осцилографа обойтись? Его просто нет :slight_smile: Может мультиметр чтото увидеть сможет?
Схема подключения вот такая:


Только использую Ардуино Нано

Из наблюдений я могу сказать следующее: сначала я делал подключение к магнитоле без перемычки на J1 (просто ни на одной схеме этого не указано, и я не знал что нужна перемычка). В итоге ардуинка периодически отваливалась от компа, зависала или отказывалась (на какое время, около 5 минут) работать. Вчера, узнав о том что перемычка на магнитоле, которая не подключена к авто, обязательна, я сделал перемычку на J1 и ардуино работала стабильно весь вечер, не отваливалась, не зависала - но данные с кан выводов не получала…
Может мне поможет резистор сопротивления на 120 Ом между CanH и CanL?

Я начал копать вчера и пытался получить что-то с каншины без кан хакера. В результате использовал вот такой пример из библиотеки:

Спойлер

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

struct can_frame canMsg;
MCP2515 mcp2515(10);

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

mcp2515.reset();
mcp2515.setBitrate(CAN_125KBPS);
mcp2515.setNormalMode();

Serial.println(“------- CAN Read ----------”);
Serial.println(“ID DLC DATA”);
}

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

}
}

И такое наблюдение заметил:
Если я в коде:

struct can_frame canMsg;
MCP2515 mcp2515(10);

значение

10

меняю на 2(два) - (а как я понял что это номер пина), то начинается какое то непонятное считывание информации, причем даже на отключенных выводах в момент “трогания” платы mcp2515 руками :slight_smile: Если же оставляю стандартно 10 (десять) то как бы не трогал и не крутил плату mcp2515 - значений никаких не принимается…

D2 - это прерывание, поднимается, если что-то принято из CAN.
D10 - CS для SPI шины. Без него нет контроля над устройством (модулем).
Прямого отношения друг к другу эти контакты не имеют и не взаимозаменяемы.
J1 подсаживает на CAN терминатор, дополнительно навешивать ничего с этой стороны не требуется.
В CAN могут ходить фреймы на такой низкой скорости, которую трансивер на модуле не понимает.

Просто чистое любопытство: а как Вы собрались без осциллографа налаживать электронную схему?
Или Вы уверены, что для того, чтобы сварить куриный бульон, достаточно только иметь только воду и курицу, а без кастрюли и огня можно обойтись?

или на высокой. Ардуино Уно не слишком мощный контроллер.

Но в первую очередь я бы проверил, какой резонатор стоит на MCP модуле и если там 8 МГц - нужна особая версия библиотеки. Или просто попробуйте выбрать частоту частоту КАН в 2 раза больше реальной.

попробовал кансканер подключить к каншине авто - тоже нет никаких данных, вообще. Явно чтото не правильно. резонатор 8 Мгц. надо искать эту особую библиотеку…буду пробывать…эх…
еще такой вопрос - есть разные скорость в настройках порта (в диспетчере устройств на ПК), Важно ли там чтото правильно выбирать ? я просто прошиваю скетчи на разную скорость и не меняю в настройках Ком порта…

В настройках КОМ-порта виндоуз ничего менять не надо. Ардуино ИДЕ само выбирает правильные настройки.
Но важно, чтобы скорость Serial.begin() в коде совпадала с настройками скорости Монитора консоли в Ардуино ИДЕ

Попробуйте в скетче выбрать скорость Кан-шины не 125, а 250

да я уже все возможные скорости перепробовал. Нашел скетч, где человек на похожей магнитолше, тоже Хундай, все запускает и у него сразу идут команды. скорости и т.д. один в один поставил - толку 0…

Эта mcp2515.h умеет с 8mhz работать. Законфигурить следует только.

mcp2515.setBitrate(CAN_125KBPS, MCP_8MHZ);

делал, без результатно к сожалению…нет никакой информации с кан шины…

Модуль может быть битый. Нужно всегда парочку иметь, чтобы проверять.

1 лайк

а какие то варианты проверки возможны ?

Ставите два комплекта в шину - один шлёт, другой ловит. Так и проверяете - живой ли модуль.

1 лайк

Добрый день Всем!
Всем спасибо за отклики и советы, получен бесценный опыт.
Проблема оказалось до банального простой - неправильное подключение к каншине авто.
Схема распиновки магнитолы, которая якобы оказалась правильной, по факту оказалась НЕправильной. Методом тыка нашел пины, при подключении в которым появилась информация в режиме чтения и канхакере.

Век живи - век учись! Сказал йожег, слезая с кактуса… :wink: