![]() |
Вот, навоял. Реагирует на изменения двух байт
void can() { if (mcp2515.readMessage(&canMsg) == MCP2515::ERROR_OK) { if (canMsg.can_id == 0x32A) { if (canMsg.data[1] == 0x02 && canMsg.data[2] == 0x10) { Serial.println("Press Vol Up"); digitalWrite(vol_up, HIGH); } else{ Serial.println("Unpress Vol Up"); digitalWrite(vol_up, LOW); } if (canMsg.data[1] == 0x03 && canMsg.data[2] == 0x20) { Serial.println("Press Vol Down"); digitalWrite(vol_down, HIGH); } else{ Serial.println("Unpress Vol Down"); digitalWrite(vol_down, LOW); } } } } На = в дате ругалась, пока не написал ==. И при id = 32A отключало порты от любого сообщения в шине. А если id==32A, то отключает от сообщения с id 32A и датой отличной от прописанной на порты. Правильно вроде получилось написать ? |
Да, всё ок.
Яж с телефона пишу, синтаксис не особо проверяю, просто общий смысл доношу. Да и Arduino IDE не запускал 100 лет. Я STM32 в СubeMx и IAR пилю. И ни чего ни кто не отключает. :) Сообщение если пришло, то оно хранится в буфере. А вот что с ним делать решать тебе. Ты задал условие что если id отличается от 0х32А, то внутрь условия не заходить, а внутри этого условия ещё условия которые проверяют содержимое пришедшего пакета. PS. Кстати из за того, что в Ардуино нельзя задать нормальные фильтры аппаратные на CAN, то бедной атмеге с 12 мегагерцами приходится жрать всё то, что валится из CAN и переваривать это. Черевато пропусками пакетов. И я даже скажу с уверенностью и проверкой опытным путём что они пропадают! У меня в машине до сих пор Ардуино трудится, уже лет 5 наверное... Ни как на stm не поменяю. И очень короткие нажатия на кнопки она теряет... |
Ещё раз спасибо за помощь, завтра в машине уже проверю. STM понравился, делал как то диктофон на нём. Не дорогой, запустилось с первого тычка, отлично работает. Но я больше "паяльщик" и ремонтник, в программах - в ардуино чужой скетч мозгов не хватило поправить. Открыл похожий проект на STM, посмотреть на предмет поправить под себя, посмотрел и закрыл...
|
Ну не знаю...
Для стм и обвес проще, всего одна микруха трансиверы и если в фильтры не лезть, то только тайминги для can посчитать правильно в кубе... А вот в коде будет примерно тоже количество строк, но процедура будет вызываться только по приходу пакета. А если настроить фильтры аппаратные, так вообще красота. Но если скорость не нужна и нужна простота кода и доступность библиотек разных, то тут Ардуино более подходит... А если есть силы и желание разобраться, то СТМ окупит затраты с лихвой. |
Цитата:
Но у меня скорее всего проблемка из за функции "delay", "рубит" работу контроллера, и естественно теряет данные, которые продолжают течь по com. |
Да такой же как и на этой странице выше.
Делеев нету и в коде их быть не должно! Совсем не должно! Нужно пользоваться таймером. |
Цитата:
|
По слову millis ищи примеры.
Но если в шине идёт активный обмен пакетами, то даже избавление от делея не до конца спасёт. Ну не способна ардуина на 12 мегагерцах выступать программным фильтром да ещё и что-то делать при этом. Если конечно код включает только слежение за кнопками, то может и нормально будет... |
Функция Millis решила вопрос, данные стабильно считываются, все ок)
Пишут есть ещё лучше библиотеки https://smartmodules.ru/timerone-arduino, что меньше кода-это факт, а на сколько лучше...надо тестить. |
Ни на сколько.
Просто удобнее. Но если там есть хоть какие глюки, то они будут и у тебя в проекте. И за все удобства придётся платить скоростью и памятью. Да и можно вообще без библиотек всяких просто читая параметры регистров таймера атмеги. В общем этим библиотеки и занимаются... |
Цитата:
|
Я так и не понял, какой canbus лучше купить?
И что за разъём на первом? Этот https://duino.ru/wa-data/public/shop...9/4389.750.jpg Или этот http://jpegshare.net/images/86/33/86...b15aa23333.jpg |
Цитата:
Цитата:
|
8 или 16мГц здесь роли не играет?
Заказал обе короче) Почему задался вопросом, ценник у них ощутимо разный, одна под 500 рублей, другая 80 руб. |
Они одинаковы.
Только та что дороже надевается на ардуину без всяких проводов. А вот 8 и 16 мегагерц повлияют на библиотеку. Некоторые умеют только 8, другие только 16, но есть и универсальные. |
Насколько я правильно понял, 16 МГц более распространенная. Я себе взял 16 МГц, работает на ура. Вот здесь https://www.drive2.ru/b/513482651483505021/ попытался более менее связно объяснить (наверное больше для себя) как делается подключение.
Может кому нибудь поможет. |
Цитата:
Есть уже успехи? ПС: про наших зря ты так))) ну да, конкретики нет, но делятся тем что сами знают. |
Цитата:
Цитата:
|
Misha2066 почитал статью на драйве- врать не хорошо :)
Инфы в инете по подключению дофига. С библиотеками идут примеры которые работают из коробки. А вот что ты не видишь половины пакетов- открой любой блок своей машины и сфоткай кишки. Имею в виду те блоки, которые подключены к шине КАН. Есть только два предположения- Или не та шина (в машине она не одна) Или не тот трансивер. Да-да! Это проверено уже! На трансивер HS кана идёт только часть пакетов если его зацепить к FT. |
Цитата:
Т.к. мне нужен блок климата, я подключался к контактам именно блока климата. Если там нет, то не знаю где еще может быть. Завтра попробую на контактах разъема ОБД посмотреть. А если смотреть эл. схемы машины, то кан-шина одна. Сфокать кишки вообще не проблема. Найти там контроллер? |
Конечно найди.
И всё встанет на свои места. Вот тебе ссылка на подключение: Порылся меньше минуты: http://electronicsworld.ru/can-bus-module-mcp2515/ У гугля спросил это: https://www.google.com/search?client....0.aA7D2P6g5BE 4 ссылка по счёту По библиотеке уже написал- в каждой есть пример. С ардуино вообще всё просто- она для совсем не разбирающихся в этом деле сделана. И это как раз хорошо- начать может каждый. И поэтому почти все библиотеки комплектуются примерами. Но беда ардуины в тормознутости и отсутствии аппаратных фильтров. Если ей начать обрабатывать нажатие кнопок, мультифрейм от магнитолы, бортовой комп и ещё и прикидыватся какой нить железкой, за место которой мы её использовали, то начинаются тормоза. Хотя как стартовая платформа она очень даже крута. Ну и по надёжности тоже. Живёт уже лет 5 в машине или около того и не глючит. |
Вложений: 1
T_r_D не совсем то, что я имел ввиду.
Закончим на этом? Я думаю этот флуд здесь не нужен. Есть более интересные вопросы, например есть обмен между штатной магнитолой и ее дисплеем, или (в моём случае) между блоком климата и матричным дисплеем климата. Если я выложу фото внутренностей дисплея поможешь определить какой там интерфейс и как его считать? Что-то мне подсказывает, что с этой стороны я быстрее получу результат, чем вылавливать пакеты из общей шины. |
А давай путь менять не будем!
Пошли уж со стороны CAN, так давай идти им. И ни чего сложного в ловле пакетов, тем более которые ты можешь контролировать нету. Так что вскрывай любой блок с CAN и давай смотреть. Единственное что если там TJA1054 (1055), то придётся на шилде менять 1050 на неё, а для этого её придётся заказать и переходник с SOIC на DIP тоже, ну или платку вытравить. И жизнь я вам всем чуть упрощу. Качаем вот это: https://www.dropbox.com/s/nqnucdyfrv...ACKER.rar?dl=0 Убираем все библиотеки CAN которые напихали в Arduino IDE. Добавляем библиотеки отсюда, думаю что разберётесь. Прошиваете ардуину и радуетесь наблюдению за пакетами в удобной программе. И обратите особое внимание на библиотеку! Она универсальна и подходит и для 8 и для 16 мегагерцовой МЦП. |
Спасибо большое!
Сегодня уже не успею ничего вскрыть, может завтра. Пока пробую на столе. Сделал все как написано, удалил старые библиотеки, подключил новые. Ардуина грузится, не ругается. Затем закрываю Ардуину, а КанХакер работать не хочет, пишет, что "КАН интерфейс не отвечает"... Может что-то не так делаю? |
Скорость подключения настрой у канхакера и порт.
Скорость 115200. Порт- ну на какой у тебя ардуина садится.... Ну и не забывай что КОМ порт однопользовательский. Тоесть все программы которые его используют надо закрыть перед запуском канхакера. Но думаю это и так понятно. Ну и в скетче настройку частоты кварца посмотри и если там стоит не частота твоего шилда, то поставь свою. По-моему там стоит 16 мегагерц. Это в самом начале выставляется строкой Can232::init(CAN_125KBPS, MCP_16MHz); А про библиотеку- используй её и для себя. Онаж не только для канхакера. :) Она точно нормально работает и не глючит. |
Еще раз, большое спасибо за помощь! Подключается, начинают сыпать пакеты и меняться данные...
НО! Соединение рвется через несколько секунд (все останавливается) и чтобы снова подключить приходится передергивать ЮСБ шнурок с Ардуиной или нажимать ресет на Ардуине, и снова коннектить канхакера. Иногда для этого нужно перезапускать канхакера. Подкинул доп питание на плату Ардуины, не помогает, поменял ноут, тоже самое. Уже третий час трахаюсь, уже мыслей умных нет... Что может быть? |
Заставь ардуину мигать диодом на плате и посмотри кто виснет.
У меня таких проблем не было, так что не могу даже представить. Связка у меня из нано и маленького шилда. До сих пор валяется и работает нормально. Ни разу такого глюка не встречал. Так что выясни для начала кто виснет. Я настолько давно не копался с ардуиной что уже и забыл половину. А для себя сделал вот такую штуку: https://www.dropbox.com/s/o19m6o3otc...23714.jpg?dl=0 https://www.dropbox.com/s/v5vruyn6xm...23732.jpg?dl=0 В основе модуль старлайна на котором стоит STM32F105, ну и oled дисплей. Содержит в себе два входа CAN на дисплее отображаются все пакеты которые приняли, для листания используются две кнопки, а при нажатии на третью блокируется прохождение этого пакета с порта 1 на порт 2. Вообще компьютер с собой носить не надо. Пусть не так наглядно как с компом потому что в один момент времени видишь только один ID, но зато компактно. Для отлова всяких кнопок самое оно. А если нужно больше, то взять 407VETx и дисплей SSD1963 5". Сделать ему ориентацию книжную и присобачить пару кнопок для случаев если список ID уйдёт в пол. Но это так, лирика... |
У меня Мега и полноразмерный шилд (втыкается в плату ардуины). Когда дело дойдет до изготовления устройства, то тоже буду делать что-то подобное, никаких разъемов, только пайка.
На шилде СД (ТХ РХ) мигают когда подключаюсь к шине авто, в независимости от состояния самой Ардуины, если полярность не правильная, то не мигают. Если использую "стандартные" библиотеки и встроенный монитор порта, то вроде не отваливается. Завтра еще проверю. |
В инете наткнулся на то, что есть проблемы программы canhacker и windows 10.
Сейчас проверить не на чем, ноута нет чтоб в машину тащить, так что если ещё кто-то проверит, то тебе это поможет. Я пробовал только на XP, 7 и 8 винде, там проблем не было. И говорят что даже запус в режиме совместимости на вин10 не помогает... |
У меня та же мысль появилась! Оба ноута, что я пробовал, на 10е. Сегодня попробую на 8 ке.
|
А как посчитать CAN Boudrate для нужной скорости шины? Или это не нужно, если использовать CANHacker в режиме монитора?
https://a.radikal.ru/a34/1810/ef/79c3f337e097.jpg |
Это странный вопрос.
Ни как его не посчитать. Это скорость шины автомобиля и она задана производителем. И я выше писал что у скетча нет возможности считывать этот параметр с программы. Скорость шины нужно править в скетче. Да, это не удобно если скорости шин разные в машине или если несколько авто, но когда я это делал мне это было не надо. А ща уже не помню что там надо делать чтоб заработала настройка из программы. Хотя можно взять описание протокола и дописать библиотеку. |
Перефразирую.
Реальная скорость шины задается в скетче, но у CANHacker свой протокол. Поймет ли он, если я в скетче задам скорость 100kbps, а в программе укажу 500kbps? Просто я вижу что CANHacker передает в шилд команду if (lw232CanChannelMode == LW232_STATUS_CAN_CLOSED) { idx = HexHelper:: parseNibbleWithLimit(lw232Message[1], LW232_CAN_BAUD_NUM); lw232CanSpeedSelection = lw232CanBaudRates[idx]; И lw232CanSpeedSelection будет соответствовать 500kbps например |
Угу, только и всего.
А потом это ни где не обрабатывается. Про это выше и написал. От скорости структура посылки пакета не меняется, так что всё будет хорошо. Но если хочется чтоб из программы устанавливалась скорость, то нужно её отлавливать в скетче и конфигурировать кан шилд. Можете допилить, вам только спасибо скажут. :) |
Цитата:
Вдвойне удивительно слышать это от Вас. А чем Вас это не устраивает? CAN.init_Mask(0, 0, 0x7F8); // there are 2 mask in mcp2515, you need to set both of them CAN.init_Mask(1, 0, 0x7F8); CAN.init_Filt(0, 0, PID_REPLY); // 0x7E8 - 0x7EF И ничего в ардуину не валится. В Ардуине нет фильтров, более того - вообще для CAN ничего нет. Но в MCP2515 то есть. |
Вложений: 1
Цитата:
Это для вот такого кабеля http://pccar.ru/attachment.php?attac...1&d=1539367068 |
Вложений: 1
Продолжаю свою эпопею.
Да, я могу подтвердить, что Канхакер в связке с Ардуиной конкретно глючит в вин 10. Что-то начудили мелкомягкие индусы в новой ОС. Переставил ОС в ноуте, поставил 8.1 и всё отлично работает! Однако не всё так радостно. Мне нужно найти пакеты климата, один чел с Драйва (владелец Теаны, по факту одноплатформенная машина с моим Мурано), нашел адреса пакетов климата, 0х54А и 0х54В. НО! У меня на этих адресах ничего нет! Есть какой-то обмен на 0х54С, но там всего пара значений, которые меняются без прямой связи с нажатием кнопок климата. Я спросил у этого чела, что не так, на что он мне ответил, что "правильный, православный" CAN-Hacker видит ВСЕ пакеты, а моя поделка большую часть пакетов теряет. Сам он конечно использует правильный девайс. Как думаете, может быть так, что бы в одном адресном диапазоне часть пакетов отлавливается, а часть теряется? |
Отвечаю по порядку.
Про аппаратный фильтр МЦП. Он есть, но его мало. В ардуине конечно нет ни чего для кана. Если его хватит, то используйте, но как правило, этого фильтра мало. У него 11 или 12 ID всего можно фильтровать (могу ошибаться по количеству). НСО154 любой покупай. Разницы нет. Про пакеты и "правильный" канхакер. Нет, такого быть не может. Даже если ардуина не успеет отловить пакет, то они, как правило цикличны. Тоесть ID идёт с каким-то интервалом постоянно. Только значения разные. Потери значений могут быть, а вот всего ID нет. Рано или поздно его всё равно обработает ардуина. Соответственно- открой нам уже тайну- разбери любой блок подключённый к КАН в авто. Такие потери пакетов свойственны когда разные протоколы КАН. Ну тоесть FS и FT. Открыв блок поймём какой протокол. Отличае протоколов не программное, а физическое! Там уровни сигналов разные. А если не хочешь вскрывать, то закажи трансивер TJA1054 или TJA1055. Спаяй всю его обводку и включи его вместо трансивера на шилде. Вот что я имел в виду под РАЗНЫМИ: HS CAN https://upload.wikimedia.org/wikiped...1898-2.svg.png FT CAN https://upload.wikimedia.org/wikiped...veform.svg.png Нравится? Совсем похожи да? Поэтому и сказал- вскрой блок, ну или если есть трансивер под FT(fault tolerant), то пробуй его. Я пробовал FT читать трансивером HS (Или FS, что одно и тоже. F - fast, H- high), результат похож на твой, только ID побольше... Но всё равно не полный список. Так что вскрывай и смотри. PS. "правильный" канхакер собран на СТМ. Пакетов не теряет, но на этом вся его правильность и заканчивается. Ещё раз- пакеты, как правило, идут циклично. Тоесть с повтором в несколько миллисекунд. Данные там конечно разные, но ID одинаков. Так что можно потерять одну посылку ID, но какую-то последующию всё равно поймаешь. Может данные нужные ты и пропустишь, но чтоб совсем пропустить ID не получится. И "адресный диапазон" тут не подходит. Тут всё в диапазоне 11 или 29 бит пакета. Почитай описание протокола. |
Спасибо за разъяснения. Скорее всего дело не в потери пакетов, а в том, что смотреть надо другие адреса. Для моей машины адреса другие, а какие, это и предстоит выяснить.
В общем есть чем заняться на выходных |
У тебя при подключении к шине в канхакере должно быть много ID. Если это не так, то или не туда подключился или несовпадение физического протокола.
И не адреса, а идентификаторы пакетов- ID. Вскрывай блок для начала. |
Часовой пояс GMT +4, время: 16:13. |
Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot