![]() |
Добрый день всем. Столкнулся с такой проблемой.
Мне нужно, чтобы ардуинка засыпала сама, когда нет активности по CAN шине и потом сама просыпалась, когда активность появляется. Проблема в том, что прерывание по кан шине ардуинку не будит. По другим прерываниям просыпаемся нормально, а по шине нет. Есть где что то почитать по этой теме? |
Цитата:
|
|
Должно просыпаться по низкому уровню INT mcp2515.
void test() { detachInterrupt(4); } настройки в setup() pinMode(7, INPUT_PULLUP); attachInterrupt (4, test, LOW); а сама mcp2515 не спит? |
Вроде, делал так. Но еще раз попробую....
Скорее всего засыпает mcp2515, ибо вся железка в спящем режиме с тремя портами, подтянутыми к VCC жрёт всего около 4 mA. Нарыл русскоязычное описание mcp 2515. http://microsin.net/adminstuff/hardw...interface.html Видимо, придется напрямую работать с регистрами CANINTE/CANITF, а, значит, курочить библиотеку... :shok: |
Сама 2515 не засыпает. Для доступа к регистрам есть в библиотеке функции
INT8U mcp2515_readRegister(const INT8U address); void mcp2515_setRegister(const INT8U address, register const INT8U value); и еще вот эта, управление режимами INT8U mcp2515_setCANCTRL_Mode(const INT8U newmode); они не доступны извне, их нужно из приват перенести в паблик. Когда 2515 выходит из сна устанавливается режим только прослушивания, нужно переводить в нормальный режим. У меня по другому сделано, Can трансивер выводит из сна ардуину, а ардуино будит 2515 и переводит Can трансивер в нормальный режим. |
Нашёл на магнитоле + 5в, который появляется при активности на шине и решил наплевать на ковыряние регистров. Тупо поставил прерывание на появление RISING на пине SLA.
P.S. Твоя прога у меня снова глючит. Вылетает при выборе порта. Не помнишь, как мы с ней справились в прошлый раз? |
Я тогда подправил прогу и она стала сама сбрасывать ардуино при выбор порта. Может ты старую используешь?
|
Вложений: 2
Заинтересовался недавно микроконтроллерами, и, т.к. моргать диодами и опрашивать датчики надоело тут же, то в качестве упражнения по изучению Arduino и C решил собрать что-то для автомобиля (своего Ford Focus 2), а именно - с работой с CAN. Просто получать и отображать данные было бы слишком просто, а процесс перепрошивки блоков — наоборот, слишком громоздко, да и не думаю, что с моим нулевым опытом, получилось бы все упихнуть в ардуину, поэтому решил сделать устройство для прошивки ключей - по объему задачи как раз.
Собственно, использовал как раз сабж - CAN Shield 1.2 на MCP2515. Плюс еще SD Shield для хранения нужных файлов и LCD Keypad Shield для экрана и кнопок. Этажерка, конечно, вышла, знатная))) Видео, как все работает (почему-то видео, если его вставить сюда, не работает, поэтому ссылкой): https://youtu.be/_6MOT5jQ94o |
Цитата:
|
Спрошу тут мож кто поможет советом:
Задача не тривиальная, нудно всего лишь замутить автостарт на кукурузнике. Можно через КАН шину заводить авто? Скажем связка GSM модуль + Ардуина + MCP2515. Вероятно както надо будет обходить иммоб и охранку так, что бы машинка находилась на охране, но заводить и кондиционировать салон разрешала... |
Цитата:
|
Цитата:
Родную обходят по кан шине, точнее дверь открывают, а далее прописывают ключ и увозят, думаю может как то автоматизировать и на базе техники этой не ключ прописать а отменить иммоб, типа отменить охранку при закрытых дверях, далее подать команду на автозавод, а при открытии родным ключем либо попытке открыть дверь без ключа (подачи команды на открытие), вернуть настройки обратно...либо заглушить, или разрешить поехать.....что то типа того... Думаю пока, чесно говоря на уровне идеи пока... ПыСы не нравится мне идея с обходчиками, дорогие они, да и иногда нужно ключик родной прятать в торпедо, что не есть гуд |
Не у всех зажигание включается через силовые цепи. У современных машин или через КАН или через блок управления.
Но это не суть. Это обойти проще всего. А вот что делать с иммобилайзером? Код иммо считать можно выпаяв ПЗУ из мозгов, а код завода где брать? Там шифровка состоит из двух этих составляющих. Если метку из ключа оставлять в машине, то это только на радость угоньщику. Ну и дальше будут небольшие нюансы с функциями брелка, да и то не у всех. Дело в том, что штатный брелок после запуска двигателя перестаёт открывать двери. Но это как раз обходится при помощи ардуины или стм свободно. Так что нужно решить проблему только с иммо. А про хватит ли ардуины, скорее да чем нет. Она конечно из за того, что нет возможности как в СТМ аппаратно фильтровать траффик по маскам/id теряет пакеты, но думаю справится. |
Спорить не буду, схему ТЛК200 не знаю. Я так думаю, это надо посмотреть на форуме Тойоты - как там сигу с автозапуском подключают. А современные сиги по КАН в том числе и иммо обходят (На самом деле не обходят, а имитируют присутствие ключа).
Цитата:
|
Цитата:
Да тут вообще вопрос не по тойоту, думаю сделать универсальный кан автозаводчик. Обход с иммитацией - идея! |
Цитата:
Обходчики, не требующие присуствия ключа в авто по ходу именно тек и работают...нет? |
randy Отвечаю. :)
Понятно что ты через отдельный контроллер работаешь с кан в случае ардуины, но давай всётаки сравним. Сколько у 2515 есть фильтров? По-моему 12 или 6 29 битных. Много этого или мало, решать вам, а мне в своё время не хватило. У СТМ 56 фильтров для 11 битных пакетов. У 2515 два буфера, у СТМ 3. В случае с 2515 это лишний внешний корпус который что-то да кушает. Ну и самое главное цена/качество. У СТМ больше и скорости и больше аппаратно интегрированно в него, а по цене дешевле ардуины уже. Решайте сами строить этажерки из готовых модулей или получить низкое потребление, много памяти, переферииб быстродействия... Подведу некий итог. У меня в машине, в данный момент живёт планшет на котором софтина самописная которая показывает данные за место штатного БК, вместо которого планшет встал, и интерфейс магнитолы. Плюс ловит нажатие кнопок. Питанием управляет вторая ардуина. Все данные текут через кан, связка ардуино нано+мцп. В принципе всё работает, но нажатие кнопок руля иногда пропускает. Связка работает уже более двух лет и заглючила только один раз. По поводу эмуляции иммобилайзера посредством отправки сообщений напрямую в КАН- писал выше! нужно два кода: Первый это ключь иммобилайзера, его можно выдернуть из микросхемы памяти блока управления. Второй это код ЗАВОДА (manufacture code) который лежит в зашифрованном виде и ни один завод по доброй воле его не отдаст ибо будет скомпрометирована целая линейка моделей со схожим иммобилайзером. Без этого нельзя отправлять ответы на запросы от блока управления. Тоесть нельзя будет их дешифровывать чтоб осмысленно отвечать. Знаете как достать коды завода к своей машине? Нет проблем сделать обходчик! А если нет, то только класть сам чип (RFID метку) Обходчики работают пока одним только способом- родная метка в корпусе обходчика. Есть продвижения у старлайна по без ключевой обходке, но только на те модели, для которых удалось выудить (а скорее украсть) у производителя код производителя. Да, безусловно, можно взять коробку сваренную из стали тройки (или чего покруче), запихать туда метку обмотав проводом-антенной, поставить реле чтоб этот провод размыкала и туда же запихать контроллер, который будет включать это реле на время запуска. Даже подскажу извратный вариант- заводить будем со штатного брелка! Нажал на кнопку закрытия в течении 10 секунд, машина завелась, ну или на любую другую... Тоесть контроллер поймал код штатной кнопки по сети кан, посчитал время её нажатия и включил реле которое сделало обход иммо. Далее уже хоть реле, хоть командами по шине заводим машину. Далее если в КАНЕ происходит какая-то гадость типа открытия двери, повышения оборотов, страгивания с места машины, или чего угодно, то реле выключается, а машина глушится. По поводу кнопки и длительности. Про другие машины не скажу, а в Ситроенах ID с долгим нажатием кнопки ходит свободно по CANу. Обычные, короткие нажатия, в шифрованном виде, а длинные в открытом. Это сделано для исполнительных механизмов типа доводчиков стёкол и включение света с пульта. Сами замки разблокируются только шифрованными пакетами. |
Цитата:
|
Цитата:
|
Цитата:
Цитата:
Причем эту технологию они купили (украли) у Fortin. Который у меня и стоит. |
А ещё не забываем о системах бесключевого доступа, когда пуск двигателя производится кнопкой и только в присутствии транспондера. Я эту тему не изучал, но и такие системы обходят. Я говорю, тут нужно конкретно по каждому авто смотреть.
|
randy код метки есть в памяти ЭБУ.
Можете сами поискать по просторам сети эти данные, они есть для многих концернов и моделей(имею в виду положение этого кода в прошивке чтоб его найти). Но это только часть кода. Короче там алгоритм манчестеровский. Кому интересно- посмотрите как это работает. В принципе да, много чего уже сломано, но видимо не для коммерчиского использования как в ситуации со старлайном. Но тогда опять же вопрос- как это узнать? А по поводу что не знаете- почитать про иммо и станет всё ясно про пересылку и кодирование. Я и сам в тонкости не вникал, но поверхностно пролистал. А чтоб вникнуть в тонкости там надо быть с протоколами шифрования знакомым не по наслышке. Точно не мой вариант. Запуск с метки ключа или карты- разницы нет. Смысл шифра там одинаков. И я тоже начинал с полного 0 по микроконтроллерам, поскольку лет 15 электроники прошли для меня мимо, а последний момент, когда я ей до этого занимался был ознаменован выпуском 1533 серии русских микросхем в общий доступ. В общем времена спектрумов и АОНов на z80. И начал я тоже с дуины, поэтому и написал что стоит и работает и какие баги есть. А по итогу- пока нет второго куска кода сэмулировать в КАН не выйдет. Прошить метку и замотать в антенну да- не вопрос, а вот аппаратного взлома нет к сожалению. Иначе всё было бы очень просто. Хотя у угонщиков эти прошивалки есть- значет возможно. Если у кого есть какая доп инфа- делитесь :) Я тоже свой цинтромон хочу научить заводиться без метки иммо в антенне. А про СТМ- проще уже с него начинать чем мучить умирающию атмелу. CUBEMX это очень упростил. |
Цитата:
Цитата:
Цитата:
|
Ребят, дайте совет по железу. Планируется бортовик, к нему прикрутить шилды приемопередатчиков 433 MHz, для шлагбаумов ибо зоопарк брелков уже бесит, сюда же хочется управление частью оборудования и по кану и аналогом, и в дальнейшем прикрутить еще сенсорный дисплей какой-нибудь, видеорегистратор с распознаванием номеров и сделать навигацию, Wi-Fi и GSM. Что закупать, ардуину, стм или Малинкообразное что-то или комбинировать все это? Короче что взять? Я понимаю, что конкретики мало написал, но пока, что так. Вы если бы строили что-то подобное, расширяемое, или если бы просто о чем-то таком мечтали, чтобы взяли себе?
|
какой дисплей - 29" ?
аналоговое оборудовние, сколько? 100500 ?! видеорегистратор с распознованием номеров, серьезно? как минимум - новая малина |
Цитата:
Сейчас первостепенно шилдами или в шате интересует наличие канбус, 433MHZ, управление парой-тройкой аналоговых кнопок, вайфай чтоб при подключении к дружественной (своей точке) сливать инфу о поездке и датчиках по вафле, потом когда-нибудь уже прицепить камеру (может даже 4K), сделать видеорегистратор с распознаванием, GPS, подцепить GSM шилд и сливать все на свой сервер в вебе, заморочиться с медиа. |
Цитата:
Цитата:
|
Цитата:
|
Может быть у кого-нибудь еще мнения есть или кто может подсказать где еще можно почитать/спросить чтобы определится?
|
Цитата:
Ардуина или СТМ это всего лишь микроконтроллеры. Они не предназначены для вывода карт GPS и так далее. Максимум что можно на них сотворить, так это мостик между машиной и планшетом/компьютером. Как совсем максимум- сделать БК с норм дисплеем (это уже стм). Так что если есть нужда читать-писать в кан, дёргать какие нить релюшки и понимать нажатие кнопок на руле, то это микроконтроллер, а играть музыку, показывать карты и вообще быть с интерфейсом, так это планшет или компьютер. Распбери эту проблему не решит- очень геморно там запускать и навигацию и плеера разные... Так что дальше уже задавайся конкретной целью. Если что-то навороченое нужно, что требует быстрой реакции, то выбирай СТМ, если следить за кнопками на руле, то ардуины за глаза. Опять же учти что у СТМ (кроме 105 серии и совсем дорогих) нет возможности одновременной работы USB и CAN. Так что туда ещё потребуется как минимум UART<>USB конвертер ну и микросхема CAN трансивера (tja1040, 1050, 1054 от шины зависит). Или блютус/wi-fi модуль вместо UART<>USB. |
Цитата:
|
Приветствую всех!
Автомобиль Nissan Murano Z51 в комплектации с двумя матричными монохромными дисплеями для климата и магнитолы. Климат и штатная магнитола общаются по can-шине со своими дисплеями, каждое устройство со своим. Есть цель -- заменить это безобразие на Андроид-девайс и отображать на его экране показания климата и штатной магнитолы. Последовательность действий видится следующей: 1. Считать пакеты в can-шине при нажатии и отображении на дисплеях соответствующих кнопок при помощи связки Ардуино+кан-шилд. 2. Сделать некое устройство (скорее всего на той же Ардуине), которое формировало видеосигнал при поступлении соответствующего пакета. 3. Ввести сформированный видео сигнал в Андроид-девайс. Буду признателен за любую информацию в этом направлении. |
Первый пункт более или менее правильный, а остальные это слова человека который ни чего не понимает в данной теме.
На андроид устройстве должен быть самописный интерфейс который будет что-то отображать при поступлении каких либо команд от микроконтроллера. Да и вообще микроконтроллером можно ни чего не делать- пришёл пакет, переправили на андроид, а там дальше обрабатываем. Да и с пакетами не всё так просто. Скорее всего дисплеи формируют какое-то подтверждение или ответ. Да и для начала надо узнать что за CAN шина. HS, FT? |
Цитата:
Цитата:
|
А какая шина нужна? :)
В Ситроенах салонная шина FT, у шкоды HS. А узнать что идёт в шине можно только после того, как туда залезешь, перед этим узнав какой тип шины и её скорость. А от типа шины будет зависеть тип CAN трансивера. А узнать тип шины можно двумя способами- первый тупой подбор, а второй- открыть любой блок подключённый к этой шине, найти микросхему трансивера и потом скачать на неё даташит в интернете и оттуда узнать какой тип шины она поддерживает, ну а дальше уже подобрать скорость методом тыка. Ну и третий способ, он доступен вообще избранным :) Подключить анализатор логический и сразу узнать и тип шины и её скорость. По поводу что куда и откуда идёт. Сначала цепляемся к шине и пытаемся разобраться что там к чему. Скорее всего будут найдены все кнопки, температуры и лампочки. С пакетами сообщений может быть сложнее, но до этого ещё надо дойти... Есть всякие гадские ID в которых есть вяло меняющиеся информация и всякие "фичи" в самих дисплеях. Но до этого тоже надо дойти :) По первой проще анализировать компом, а чтоб понимать что куда идёт нужно спаять на STM32 простой бридж с возможностью фильтрации и отображением всего этого на дисплей. Я собирал такой бридж на STM32F105 и OLED дисплее мелком. С первого входа пришедшие ID забивались в лист и по этому листу можно было перемещаться двумя кнопочками, а третий блокировать прохождение данного ID с первого на второй вход, со второго на первый пакеты пролетали без каких либо обработок. Если требовалось отфильтровать пакет с другой стороны, то просто устройство переворачивалось. Да и вообще- паять надо сразу на STM всё... И не пугаться того что у той же 103 серии нельзя одновременно работать с CAN и USB. Это обходится переходником UART<>USB. Ну чтоб к планшету цепляться. Но зато получаешь нормальную скорость, ни каких шилдов, просто микросхему трансивера CAN дешёвую, а если у тебя FT шина, то микросхему на шилде ардуины всё равно перепаивать придётся. |
Здравствуйте. Прошу прощения за ламерские вопросы, Arduino nano неделя как в руках, в написании программ - 0. Хочу сделать управление не заводской магнитолой с руля ( CAN ). Скетч , человека который это делал , пытаюсь подправить под свою шину. Изначально написано для посылок - ID + data 1 байт. У меня посылки - ID + data 4-е байта. Как не правлю под четыре байта - либо ошибка, либо принимает только первый.
Вот кусок void can() { if (mcp2515.readMessage(&canMsg) == MCP2515::ERROR_OK) { switch(canMsg.can_id & 0x5FF) { case 0x5c1: // кнопки if(key != canMsg.data[0]) { switch(canMsg.data[0]) { case 00: // Unpress (All) switch(key) { case 6: // Unpress Vol Up Serial.println("Unpress Vol Up"); digitalWrite(vol_up, LOW); break; case 7: // Unpress Vol Down Serial.println("Unpress Vol Down"); digitalWrite(vol_down, LOW); break; case 2: // Unpress Next Serial.println("Unpress Next"); digitalWrite(next, LOW); break; case 3: // Unpress Prev Serial.println("Unpress Prev"); digitalWrite(prev, LOW); break; case 0x1a: // Unpress SRC Serial.println("Unpress SRC"); digitalWrite(sourse, LOW); break; case 0x2b: // Unpress Mute Serial.println("Unpress Mute"); digitalWrite(mute, LOW); break; } break; case 6: // Press Vol Up Serial.println("Press Vol Up"); digitalWrite(vol_up, HIGH); break; case 7: // Press Vol Down Serial.println("Press Vol Down"); digitalWrite(vol_down, HIGH); break; case 2: // Press Next Serial.println("Press Next"); digitalWrite(next, HIGH); break; case 3: // Press Prev Serial.println("Press Prev"); digitalWrite(prev, HIGH); break; case 0x1a: // Press SRC Serial.println("Press SRC"); digitalWrite(sourse, HIGH); break; case 0x2b: // Press Mute Serial.println("Press Mute"); digitalWrite(mute, HIGH); break; } key = canMsg.data[0]; } break; break; } } } У меня ID - 32A, ничего не нажато - 02 00 00 00, + 02 10 00 00, - 02 20 00 00, > 02 40 00 00, < 02 80 00 00, up 02 01 00 00, dn 02 02 00 00. Как написать , что бы arduino видела все четыре байта? |
void can()
{ if (mcp2515.readMessage(&canMsg) == MCP2515::ERROR_OK) { If (canMsg.can_id = 0x32A) { If (canMsg.data[1] = 0x10) {нажато +} } И так далее Или через switch: switch(canMsg.data[1]) { case 0x20: плюс break; } |
T_r_D, спасибо!!! (canMsg.data[1]), прописал вторые, меняющиеся байты и всё ок.
И вопросик так, для развития. А если бы менялись не один, а два байта? |
Ну сравнивать нужно было бы сразу два.
If (canMsg.data[1] = 0x10 && canMsg.data[0] = 0x02) { Только не вторые, а первые :) Яж тебе на это и указываю что счёт начинается не с 1, а с 0 :) |
Часовой пояс GMT +4, время: 16:04. |
Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot