Не пойму, - чего ты так завёлся? Тема вроде в разделе для начинающих. Мне то нужно, чтобы вы (те которые хорошо разбираются) указали на мои ошибки, да подсказали где-то как сделать правильней. Полезную ссылочку может какую дали, где можно почитать, да получить знания. А ты начинаешь сравнивать меня с болваном, сочиняешь про какой-то навоз, говоришь что я полный ноль...
Не пойму, - чего ты так завёлся? Тема вроде в разделе для начинающих. Мне то нужно, чтобы вы (те которые хорошо разбираются) указали на мои ошибки, да подсказали где-то как сделать правильней.
Вот именно это тут и происходит - тебе указывают на ошибки подскащывают, куда двигаться. Но двигаться ты должен сам, жевать за тебя никто не станет
Поищи хотя бы картинки в гугле по фразе "mcp2515 arduino".
Ну да, поискал, посмотрел, проанализировал. Все подключают по одной схеме. Некоторые не подключают INT. Про CS вычитал где-то что по умолчанию он может быть 9, а не 10. Подключение остальных пинов модуля 2515 похоже где-то прописано. Короче, один фиг, мало чего понял, но схему поправил:
Еще прочитал, что на 1 пине разъема OBD-II на автомобилях семейства VAG приходит +12V от зажигания. Нужно будет проверить этот момент. Если действительно так и будет, по запитаюсь от этого пина, а не от 16.
Это на преобразователе что ли?
По факту там нарисовано In+ и In+. Я в пэйтбраше исправил один плюс на минус. Ой, только сейчас заметил, что не тот плюс ))
OBD-II там коряво нарисован. В верхнем ряду наименования пинов соответствует картинке 16..9. А нижний ряд пинов назван 1..8, а нарисован 8..1. Я соединил провода в соответствии с картинкой. По факту этот разъем так и выглядит, если смотреть на него снаружи
По питанию можно взять простой и надёжный dc-dc 7805 в любом магазине и навесить на входе и выходе по паре конденсаторов (по одному электролиту 25В 47 uF и по одному керамику 1uF неполярную до 50В) и подавать на 5В ардуино, не верьте что там пишут. 12В на вход DC-DC на всякий случай лучше через предохранитель в 2А.
Вешать все это только на зажигание (НЕ на постоянный плюс), иначе АКБ разрядится.
По питанию можно взять простой и надёжный dc-dc 7805 в любом магазине и навесить на входе и выходе по паре конденсаторов (по одному электролиту 25В 47 uF и по одному керамику 1uF неполярную до 50В) и подавать на 5В ардуино, не верьте что там пишут. 12В на вход DC-DC на всякий случай лучше через предохранитель в 2А.
Вешать все это только на зажигание (НЕ на постоянный плюс), иначе АКБ разрядится.
Я заказал такие штуки: сначала на 5В, а потом, подумав что 5 Вольт возможно будет мало, заказал еще и с регулировкой, в расчете выставить там 7-8 Вольт.
Что значит 5В мало? Я говорю вам - подавайте на пин "5V" ардуины, там и должно быть 5В.
Это бред 12В преобразовывать в 7В, а потом, подав на их Vin, уже в 5В стабом ардуины. Регулировка со временем окисляется и напряжение убегает.
Тем более по ссылке такой же DC-DC заказали, как на борту у ардуины. С таким успехом можно просто 12В на Vin заводить и всё, только ардуина так долго не протянет. 14, а то и 15 бывает в бортовой сети, а ей даже 12В много - греется. Всегда в машину ставил либо 7805 (1000мА), либо младшие братья - 78M05 (500мА) или 78L05 (100мА). Проблем не было ниразу.
... С таким успехом можно просто 12В на Vin заводить и всё, только ардуина так долго не протянет ...
Хм, я тут взял и измерил мультиметром напряжение на китайском блоке питания, которым питаю свою первую ардуино-поделку. Про неё написал тут. На блоке питания написано 12 Вольт. А мультиметр показал что-то около 18! Вот такие пироги. Ардуино (уно) работает, не знаю тяжело ли ей приходится. Шаговые движки ппц какие горячие.
Полагаю, что с "нано"-версией ардуины нужно поаккуратней с напряжением )) Спасибо за совет, буду питать 5V на одноименный пин.
Попробовал подключиться к машине используя код из поста 21, только строку 92 поправил на if(CAN0.begin(MCP_NORMAL, CAN_500KBPS, MCP_8MHZ) == CAN_OK) В изначально варианте у меня мср не инициализировалась. В остальном работает без проблем. Код из поста 26 у меня при подключении к шине Рт-Can (моторник, коробка, джойстик акпп и dsc) не увидел температуру. Хотелось бы конечно использовать вариант без запросов в OBD.
MaksVV, а Вы с BMW работали? Не поможете с вариантом без запросов? Очень уж хочется обзавестись индикатором температуры, т. к. сигнализатор перегрева срабатывает когда уже "почки отвалились". А стрелочного индикатора нет.
ЗЫ Наверно правильнее будет if(CAN0.begin(MCP_STDEXT, CAN_500KBPS, MCP_8MHZ) == CAN_OK)
Код из поста 26 предназначен именно для VW Polo. Если у вас другой авто - снимаете разъем с датчика температуры ДВС. Вставляете туда переменный резистор 0...100кОм. Запускаете CANHacker. Крутите резистор - смотрите какой байт начинает изменяться. Так определяется какой байт отвечает за t двс.
Код из поста 26 предназначен именно для VW Polo. Если у вас другой авто - снимаете разъем с датчика температуры ДВС. Вставляете туда переменный резистор 0...100кОм. Запускаете CANHacker. Крутите резистор - смотрите какой байт начинает изменяться. Так определяется какой байт отвечает за t двс.
Спасибо за подсказку! Обязательно попробую.
А то я наснимал логов CANHaker'ом при разных температурах и пытаюсь из этой мешанины что-то выудить. Пока из моей затеи ничего не вышло.
Если у вас другой авто - снимаете разъем с датчика температуры ДВС. Вставляете туда переменный резистор 0...100кОм. Запускаете CANHacker. Крутите резистор - смотрите какой байт начинает изменяться. Так определяется какой байт отвечает за t двс.
Пробовал по Вашей методике, не вышло. Сразу заметил, какие три байта меняются практически синхронно с вращением резистора, но оказалось не то. Что скрывается за этими байтами, так и не выяснил. Может температурные коррекции, которые используются другими блоками.
В итоге нужны байт нашелся под ID 1D0. Из первого байта надо вычесть 48 что бы получить температуру двигателя. Теперь хочу отыскать температуру масла в двигателе и акпп. Определенный алгоритм поиска вроде понятен. Очень помогает обычный Excel с его функцией фильтрации.
Кстати в обмене приборной панели (она висит на другой шине) температура присутствует с тем же ID и в том же формате.
Мне совсем непонятен алгоритм работы фильтров и масок mcp2515. Может, кто плотно с ними общался, сможет доходчиво и простым языком с примерами объяснить их работу?
Фильтр работает по совпадению с ID. Если в обоих биты совпадают - пакет переносится в буфер. Маска определяет какие биты должны сравниваться. Таким образом часть ID может быть исключена из сравнения и не учитываться
не путайте получение температуры при помощи диагностических запросов и просто её выуживание из рабочего потока данных между блоками, понятно что формулы из рабочего потока могут быть любые, а вот диагностика стандартизирована.
Фильтр работает по совпадению с ID. Если в обоих биты совпадают - пакет переносится в буфер. Маска определяет какие биты должны сравниваться. Таким образом часть ID может быть исключена из сравнения и не учитываться
Не могли бы Вы накидать пару произвольных примеров с разбором? Что то понимание этой части мне никак не дается.
Температура масла в двигателе 0x1D0 второй байт минус 48.
Какой мне интерес накидывать несколько примеров с разбором? Посмотрите в примерах к библиотеке, поэкспериментируйте. Это же ваше хобби и оно должно ваше время поглощать, а не мое.
Итак, есть и мне что рассказать. Протестировал свой разъем ОБД, на первом пине у меня появляется напряжение при включении зажигания, посему переделал схему на такую:
Ну и наконец-то дождался всех комплектующих, собрал:
Загрузил код из 26 поста и пошел в гараж.
Либо я где-то накосячил, либо что-то еще, но похоже что связь с шиной установить не получается...
Монитор порта выглядит так:
И спустя некоторое время светодиод начинает перемигивать тремя цветами по очереди...
Что можно сделать, как проверить что я ничего не спалил (ну или спалил)?
Скажу честно, когда собирал перепутал два провода. С платы ардуино D6 соединил с VCC модуля MCP2515_CAN. Ну и когда тестировал RGB светодиод подавал туда напряжение... (хотя туда так и так надо подавать напряжение)
#include <mcp_can.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET -1
#define TEMP_ID 0x1D0 // ID где лежит температура
#define Light_On 0x21A // ID где включение света
#define CAN0_INT 2 // подключить пинINT MCP2515 to pin 2 arduino
Adafruit_SSD1306 display(OLED_RESET);
MCP_CAN CAN0(10); // Set CS to pin 10
int Dim = 0; //переменная затемнения в функции display.dim()
int CoolTemp = 0; // температура ДВС
int OilTemp = 0; // температура масла двигателя
bool CANFail = 0; // флаг ошибки чтения из CAN
uint32_t curmillis = 0; // снимок системного времени
uint32_t prevcheck = 0; // таймер контроля CAN
//------------------------------чтение из CAN
void CANread()
{
if (!digitalRead(CAN0_INT)) // если пришло сообщение из CAN
{
uint32_t rxId = 0; byte len = 0; byte rxBuf[8] = {0};
CAN0.readMsgBuf(&rxId, &len, rxBuf);
if (rxId == Light_On) //если получили сообщение со светом
{
if (rxBuf[0] > 2 && rxBuf[0] < 66) {
Dim = 1;
}
else {
Dim = 0 ;
}
}
if (rxId == TEMP_ID) //если получили сообщение с температурой
{
CoolTemp = rxBuf[0] - 48; // расчёт t охл жидкости
OilTemp = rxBuf[1] - 48; // расчет t масла двигателя
Serial.print (F("COOLTemp = ")); Serial.println (CoolTemp); // печать t в отладку
Serial.print (F("Oil-Temp = ")); Serial.println (OilTemp); // печать t в отладку
Serial.print (F("Flag of dim ")); Serial.println (Dim); // печать Dim в отладку
display.clearDisplay();
display.dim(Dim); // 1 - тускло 0 - ярко
display.setCursor(0, 0);
display.print("COOL T "); display.println(CoolTemp);
display.print("OIL T "); display.println(OilTemp);
display.display();
CANFail = 0; // контроль CAN переводим в норму
prevcheck = curmillis; // и сбрасываем таймер контроля CAN
}
}
}
//------------------------------контроль CAN
void CANcheck()
{
if (curmillis - prevcheck > 5000) // через 5 сек
{
CANFail = 1; //переводим в аварию (если не поступают сообщения t из CAN)
prevcheck = curmillis;
}
if (CANFail) // предупреждение, что из CAN температура не читается
{
Serial.println("Error");
display.clearDisplay();
display.setCursor(0, 0);
display.println("CONNECTION");
display.println(" LOST ");
display.display();
}
}
//------------------------------ SETUP
void setup()
{
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.println("CONNECTING");
display.println(" ...... ");
display.display();
pinMode(CAN0_INT, INPUT); // Configuring pin for /INT input (D2 arduino)
Serial.begin(115200);
if (CAN0.begin(MCP_STDEXT, CAN_100KBPS, MCP_8MHZ) == CAN_OK)
Serial.println("MCP2515 Initialized Successfully!");
else Serial.println("Error Initializing MCP2515...");
CAN0.init_Mask(0, 0, 0x0FFF0000);
CAN0.init_Filt(0, 0, 0x01D00000); // аппаратный фильтр чтобы получать только нужные нам сообщения
CAN0.init_Filt(1, 0, 0x021A0000);
CAN0.init_Mask(1, 0, 0x0FFF0000);
CAN0.init_Filt(2, 0, 0x021A0000); // аппаратный фильтр чтобы получать только нужные нам сообщения
CAN0.init_Filt(3, 0, 0x021A0000);
CAN0.init_Filt(4, 0, 0x021A0000);
CAN0.init_Filt(5, 0, 0x021A0000);
CAN0.setMode(MCP_NORMAL);
}
//------------------------------ LOOP
void loop()
{
curmillis = millis();
CANread();
CANcheck()
Убрал индикацию на светодиодах, добавил индикацию температуры масла двигателя. Использовал дисплей 128х32. Спасибо b707 за разъяснения по фильтрам! Скорость CAN 100кбит потому что в итоге подключился к приборке. Странные фильтры обусловлены особенностью обмена, указывающего на включение головного света. Кому по БМВ интересно, опишу отдельно.
Кстати, связка нанопро+мср2515 не в состоянии адекватно отлавливать единичные пакеты из обмена ни по моторной шине (PT-CAN, 500кбит), ни по шине К-САN (100кбит).
По спецификации CAN на "концах" линиЙ должны стоять "терминаторы" - резисторы по ~120 Ом. Вот этой перемычкой ты включаешь терминатор. Если модуль "стоит" в середине линии CAN - перемычку ставить не нужно. Общее сопротивление линии CAN = ~60 Ом.
Как вообще понять что плата MCP работает? Может заказать еще одну?
блин, а вы одну чтоль купили? Что за крохоборство? Надо было брать две-три.
Вы ветку читали? - всем новичкам НАСТОЯТЕЛЬНО рекомендуется для начала попытаться установить связь между двумя КАН-модулями. А только когда схема на столе заработает - пробовать на машине.
Как вообще понять что плата MCP работает? Может заказать еще одну?
блин, а вы одну чтоль купили? Что за крохоборство? Надо было брать две-три.
Вы ветку читали? - всем новичкам НАСТОЯТЕЛЬНО рекомендуется для начала попытаться установить связь между двумя КАН-модулями. А только когда схема на столе заработает - пробовать на машине.
Ок хорошо, я понял, спасибо.
Строка в коде CAN0.begin(MCP_STD, CAN_500KBPS, MCP_8MHZ) == CAN_OK) что проверяет?
Ну или, по другому сформулирую вопрос, - будет ли разница в результате её работы при подключенной или отключенной кан-шине?
Спсаибо, в очередной раз убеждаюсь, что пайка мне даётся с трудом (вот такой я руко*оп). Закажу еще ))
Заказывайте сразу пару или тройку.
и еще - судя по фото, вы провода прямо в ардуину и в модуль впаиваете... А что, штырьковых контактов разве в комплекте не было? Для моделирования они удобнее
Не пойму, - чего ты так завёлся? Тема вроде в разделе для начинающих. Мне то нужно, чтобы вы (те которые хорошо разбираются) указали на мои ошибки, да подсказали где-то как сделать правильней. Полезную ссылочку может какую дали, где можно почитать, да получить знания. А ты начинаешь сравнивать меня с болваном, сочиняешь про какой-то навоз, говоришь что я полный ноль...
Привыкайте искать информацию сами. Уж такие простые вещи гуглятся за три секунды. Форум чуть для другого.
Вот именно это тут и происходит - тебе указывают на ошибки подскащывают, куда двигаться. Но двигаться ты должен сам, жевать за тебя никто не станет
Поищи хотя бы картинки в гугле по фразе "mcp2515 arduino".
Ну да, поискал, посмотрел, проанализировал. Все подключают по одной схеме. Некоторые не подключают INT. Про CS вычитал где-то что по умолчанию он может быть 9, а не 10. Подключение остальных пинов модуля 2515 похоже где-то прописано. Короче, один фиг, мало чего понял, но схему поправил:
Еще прочитал, что на 1 пине разъема OBD-II на автомобилях семейства VAG приходит +12V от зажигания. Нужно будет проверить этот момент. Если действительно так и будет, по запитаюсь от этого пина, а не от 16.
Это на модели фритцинга In- и In+ перепутаны или схема таки не до конца выверена?
Это на преобразователе что ли?
По факту там нарисовано In+ и In+. Я в пэйтбраше исправил один плюс на минус. Ой, только сейчас заметил, что не тот плюс ))
OBD-II там коряво нарисован. В верхнем ряду наименования пинов соответствует картинке 16..9. А нижний ряд пинов назван 1..8, а нарисован 8..1. Я соединил провода в соответствии с картинкой. По факту этот разъем так и выглядит, если смотреть на него снаружи
5V после преобразователя нужно не на Vin, а на Vcc (5v) arduino.
5V после преобразователя нужно не на Vin, а на Vcc (5v) arduino.
О, точно. Спасибо!
Т.е. на VIN нужно подавать 7..12V? И соответственно 5 Вольт будет мало...
Но, судя по схеме, контакт 5V может быть и вход и выходом.
А что лучше преобразователь 7V подключить на контакт VIN или преобразователь 5V на контакт 5V?
Хотя вот тут написано:
Буду искать регулятор напряжения
------------------------------
И еще у меня возник вопрос. Критичная ли разница в чипах ATMEGA168 и ATMEGA328P?
И еще у меня возник вопрос. Критичная ли разница в чипах ATMEGA168 и ATMEGA328P?
Изучай. http://avr.ru/docs/d-sheet/atmega
И еще у меня возник вопрос. Критичная ли разница в чипах ATMEGA168 и ATMEGA328P?
Изучай. http://avr.ru/docs/d-sheet/atmega
Спасибо! Разница ATMEGA168 и ATMEGA328P в объеме памяти, полагаю что для моей задачи вполне хватит и 168 ))
Спасибо! Разница ATMEGA168 и ATMEGA328P в объеме памяти, полагаю что для моей задачи вполне хватит и 168 ))
разница в обьеме памяти - в 2 раза, а в цене - хорошо если процентов 15. Так что делаем выводы.
А если потом вдруг захочется повесить вместо светодиодов экранчик - сразу поймешь, как промахнулся, выбрав 168
Эх, заказал ещё и 328, посмотрим что приедет быстрее.
Пока читаю литературу по ардуино, да учусь паять ))
По питанию можно взять простой и надёжный dc-dc 7805 в любом магазине и навесить на входе и выходе по паре конденсаторов (по одному электролиту 25В 47 uF и по одному керамику 1uF неполярную до 50В) и подавать на 5В ардуино, не верьте что там пишут. 12В на вход DC-DC на всякий случай лучше через предохранитель в 2А.
Вешать все это только на зажигание (НЕ на постоянный плюс), иначе АКБ разрядится.
По питанию можно взять простой и надёжный dc-dc 7805 в любом магазине и навесить на входе и выходе по паре конденсаторов (по одному электролиту 25В 47 uF и по одному керамику 1uF неполярную до 50В) и подавать на 5В ардуино, не верьте что там пишут. 12В на вход DC-DC на всякий случай лучше через предохранитель в 2А.
Вешать все это только на зажигание (НЕ на постоянный плюс), иначе АКБ разрядится.
Я заказал такие штуки: сначала на 5В, а потом, подумав что 5 Вольт возможно будет мало, заказал еще и с регулировкой, в расчете выставить там 7-8 Вольт.
Что значит 5В мало? Я говорю вам - подавайте на пин "5V" ардуины, там и должно быть 5В.
Это бред 12В преобразовывать в 7В, а потом, подав на их Vin, уже в 5В стабом ардуины. Регулировка со временем окисляется и напряжение убегает.
Тем более по ссылке такой же DC-DC заказали, как на борту у ардуины. С таким успехом можно просто 12В на Vin заводить и всё, только ардуина так долго не протянет. 14, а то и 15 бывает в бортовой сети, а ей даже 12В много - греется. Всегда в машину ставил либо 7805 (1000мА), либо младшие братья - 78M05 (500мА) или 78L05 (100мА). Проблем не было ниразу.
... С таким успехом можно просто 12В на Vin заводить и всё, только ардуина так долго не протянет ...
Хм, я тут взял и измерил мультиметром напряжение на китайском блоке питания, которым питаю свою первую ардуино-поделку. Про неё написал тут. На блоке питания написано 12 Вольт. А мультиметр показал что-то около 18! Вот такие пироги. Ардуино (уно) работает, не знаю тяжело ли ей приходится. Шаговые движки ппц какие горячие.
Полагаю, что с "нано"-версией ардуины нужно поаккуратней с напряжением )) Спасибо за совет, буду питать 5V на одноименный пин.
MaksVV, не поделитесь библиотекой mcp_can, которую Вы использовали. Она под 8 или 16МГц?
Она под обе частоты. Выбирается это при ините mcp
Ссылочкой на библиотеку киньтесь пожалуйста)
Да, без нагрузки.
Попробовал подключиться к машине используя код из поста 21, только строку 92 поправил на if(CAN0.begin(MCP_NORMAL, CAN_500KBPS, MCP_8MHZ) == CAN_OK) В изначально варианте у меня мср не инициализировалась. В остальном работает без проблем. Код из поста 26 у меня при подключении к шине Рт-Can (моторник, коробка, джойстик акпп и dsc) не увидел температуру. Хотелось бы конечно использовать вариант без запросов в OBD.
MaksVV, а Вы с BMW работали? Не поможете с вариантом без запросов? Очень уж хочется обзавестись индикатором температуры, т. к. сигнализатор перегрева срабатывает когда уже "почки отвалились". А стрелочного индикатора нет.
ЗЫ Наверно правильнее будет if(CAN0.begin(MCP_STDEXT, CAN_500KBPS, MCP_8MHZ) == CAN_OK)
Код не видит температуру.... А хоть что видит?
Код из поста 26 предназначен именно для VW Polo. Если у вас другой авто - снимаете разъем с датчика температуры ДВС. Вставляете туда переменный резистор 0...100кОм. Запускаете CANHacker. Крутите резистор - смотрите какой байт начинает изменяться. Так определяется какой байт отвечает за t двс.
А что он может увидеть, если настроен на отлов только адреса 0х288.
Код из поста 26 предназначен именно для VW Polo. Если у вас другой авто - снимаете разъем с датчика температуры ДВС. Вставляете туда переменный резистор 0...100кОм. Запускаете CANHacker. Крутите резистор - смотрите какой байт начинает изменяться. Так определяется какой байт отвечает за t двс.
Спасибо за подсказку! Обязательно попробую.
А то я наснимал логов CANHaker'ом при разных температурах и пытаюсь из этой мешанины что-то выудить. Пока из моей затеи ничего не вышло.
Короче - не надо питать от пинов. У Вас для этого БП существует. А 2-3 транзистора стоят копейки.
Если у вас другой авто - снимаете разъем с датчика температуры ДВС. Вставляете туда переменный резистор 0...100кОм. Запускаете CANHacker. Крутите резистор - смотрите какой байт начинает изменяться. Так определяется какой байт отвечает за t двс.
Пробовал по Вашей методике, не вышло. Сразу заметил, какие три байта меняются практически синхронно с вращением резистора, но оказалось не то. Что скрывается за этими байтами, так и не выяснил. Может температурные коррекции, которые используются другими блоками.
В итоге нужны байт нашелся под ID 1D0. Из первого байта надо вычесть 48 что бы получить температуру двигателя. Теперь хочу отыскать температуру масла в двигателе и акпп. Определенный алгоритм поиска вроде понятен. Очень помогает обычный Excel с его функцией фильтрации.
Кстати в обмене приборной панели (она висит на другой шине) температура присутствует с тем же ID и в том же формате.
Мне совсем непонятен алгоритм работы фильтров и масок mcp2515. Может, кто плотно с ними общался, сможет доходчиво и простым языком с примерами объяснить их работу?
Фильтр работает по совпадению с ID. Если в обоих биты совпадают - пакет переносится в буфер. Маска определяет какие биты должны сравниваться. Таким образом часть ID может быть исключена из сравнения и не учитываться
не путайте получение температуры при помощи диагностических запросов и просто её выуживание из рабочего потока данных между блоками, понятно что формулы из рабочего потока могут быть любые, а вот диагностика стандартизирована.
Не могли бы Вы накидать пару произвольных примеров с разбором? Что то понимание этой части мне никак не дается.
Температура масла в двигателе 0x1D0 второй байт минус 48.
Какой мне интерес накидывать несколько примеров с разбором? Посмотрите в примерах к библиотеке, поэкспериментируйте. Это же ваше хобби и оно должно ваше время поглощать, а не мое.
Не могли бы Вы накидать пару произвольных примеров с разбором?
http://www.cse.dmu.ac.uk/~eg/tele/CanbusIDandMask.html
https://forum.arduino.cc/index.php?topic=156069.0
b707, спасибо, буду изучать.
Итак, есть и мне что рассказать. Протестировал свой разъем ОБД, на первом пине у меня появляется напряжение при включении зажигания, посему переделал схему на такую:
Ну и наконец-то дождался всех комплектующих, собрал:
Загрузил код из 26 поста и пошел в гараж.
Либо я где-то накосячил, либо что-то еще, но похоже что связь с шиной установить не получается...
Монитор порта выглядит так:
И спустя некоторое время светодиод начинает перемигивать тремя цветами по очереди...
Что можно сделать, как проверить что я ничего не спалил (ну или спалил)?
Скажу честно, когда собирал перепутал два провода. С платы ардуино D6 соединил с VCC модуля MCP2515_CAN. Ну и когда тестировал RGB светодиод подавал туда напряжение... (хотя туда так и так надо подавать напряжение)
Нет обмена МК с MCP.
В итоге у меня родился следующий код
Убрал индикацию на светодиодах, добавил индикацию температуры масла двигателя. Использовал дисплей 128х32. Спасибо b707 за разъяснения по фильтрам! Скорость CAN 100кбит потому что в итоге подключился к приборке. Странные фильтры обусловлены особенностью обмена, указывающего на включение головного света. Кому по БМВ интересно, опишу отдельно.
gumeldiman выложите свой код
Кстати, связка нанопро+мср2515 не в состоянии адекватно отлавливать единичные пакеты из обмена ни по моторной шине (PT-CAN, 500кбит), ни по шине К-САN (100кбит).
не в состоянии адекватно отлавливать единичные пакеты из обмена ни по моторной шине (PT-CAN, 500кбит), ни по шине К-САN (100кбит).
100+ кбит должно сдюжить на дурдуине. Смотря как парсить. А 500+ "синяя таблЭтка" фпомощь.
gumeldiman выложите свой код
...
Да я пока ничего не выдумывал, использую код из 26 поста.
...
Блин, нашел у себя косяк, опять перепутал провода... Перепаял, теперь монитор порта выдает следущее:
Сильно смущет "Error Initializing MCP2515...", получается что не работает CAN0.begin(MCP_STD, CAN_500KBPS, MCP_8MHZ) == CAN_OK)
пробовал
(CAN0.begin(MCP_EXT, CAN_100KBPS, MCP_8MHZ) == CAN_OK), результат аналогичный..
проверил еще раз все провода, подключено по схеме.
Возник вопрос, - для чего нужны эти контакты?:
Как вообще понять что плата MCP работает? Может заказать еще одну?
По спецификации CAN на "концах" линиЙ должны стоять "терминаторы" - резисторы по ~120 Ом. Вот этой перемычкой ты включаешь терминатор. Если модуль "стоит" в середине линии CAN - перемычку ставить не нужно. Общее сопротивление линии CAN = ~60 Ом.
Как вообще понять что плата MCP работает? Может заказать еще одну?
блин, а вы одну чтоль купили? Что за крохоборство? Надо было брать две-три.
Вы ветку читали? - всем новичкам НАСТОЯТЕЛЬНО рекомендуется для начала попытаться установить связь между двумя КАН-модулями. А только когда схема на столе заработает - пробовать на машине.
Как вообще понять что плата MCP работает? Может заказать еще одну?
блин, а вы одну чтоль купили? Что за крохоборство? Надо было брать две-три.
Вы ветку читали? - всем новичкам НАСТОЯТЕЛЬНО рекомендуется для начала попытаться установить связь между двумя КАН-модулями. А только когда схема на столе заработает - пробовать на машине.
Ок хорошо, я понял, спасибо.
Строка в коде CAN0.begin(MCP_STD, CAN_500KBPS, MCP_8MHZ) == CAN_OK) что проверяет?
Ну или, по другому сформулирую вопрос, - будет ли разница в результате её работы при подключенной или отключенной кан-шине?
Строка в коде CAN0.begin(MCP_STD, CAN_500KBPS, MCP_8MHZ) == CAN_OK) что проверяет?
Ну или, по другому сформулирую вопрос, - будет ли разница в результате её работы при подключенной или отключенной кан-шине?
строка проверяет инициализацию (ответ ) КАН-модуля. Если не отвечает, как у вас - либо соединение неверное, либо плата дохлая.
Насколько я знаю, для инициализации подключение КАН-шины не обязательно.
Спсаибо, в очередной раз убеждаюсь, что пайка мне даётся с трудом (вот такой я руко*оп). Закажу еще ))
Спсаибо, в очередной раз убеждаюсь, что пайка мне даётся с трудом (вот такой я руко*оп). Закажу еще ))
Заказывайте сразу пару или тройку.
и еще - судя по фото, вы провода прямо в ардуину и в модуль впаиваете... А что, штырьковых контактов разве в комплекте не было? Для моделирования они удобнее
...и еще - судя по фото, вы провода прямо в ардуину и в модуль впаиваете... А что, штырьковых контактов разве в комплекте не было? ...
Один очень умный человек посоветовал делать на пайке:
...Шилды покупать не советую, они дороги, большие по размеру и ненадежны в реальной жизни, лучше собирать систему на пайке...
На самом деле, все хорошо! Заодно научусь паять ))
подловили :)
Но для моделирования штырьки и правда удобнее.