![]() |
Строка 134: for (int i = 0; i < 54; i++) DATA[i + 41] = MULTIFRAME[i]; правильно, что копирует 54 байта, а не 55?
Строка в конце Serial.write(DATA, 161); передает 161, а не 162 байта, правильно? Зачем объявляли 162 байта? Проверку на изменения может сделать так? Код:
if (!digitalRead(9)) Вообще по логике получается, что данные в DATA еще полностью не заполнились, а уже идет сравнение с DATA2 и если оно несовпадает, то идет отправка на планшет. Надо вводить флаг, который будет разрешать/запрещать сравнение DATA с DATA2. (millis() - time0) > 100 - некая задержка чтобы DATA успел заполнится, не совсем понял? |
По порядку.
Да- 54 байта это правильно. Максимальная длина этого мультифрейм 9*6=54 162 объявлено с запасом. Тут тоже всё корректно. С сравнением массивов согласен. Нужно убрать в if который возникает при приходе пакета и желательно только мне нужного. Над этим подумаю- спасибо. Можно уменьшить количество проверяемый информации, но тогда увеличится код. В каждом if пришедшего пакета проверять изменения для конкретного id. Тоесть сравнивать только те байты, которые он может изменять. Про флаг подробнее можно? Про задержку в 100мс. Сделана чтоб не грузить особо COM и планшет. Быстрее чем 10 раз в секунду мне данные не нужны. |
Вот что имел в виду:
PHP код:
PHP код:
А если узнать как сравнивать кусок массива, а не весь, то будет ещё быстрее. Ну скажем байты с 10 по 15. И передавать эти значения в функцию CompareOut(15,20); |
Данные которые складываются в массив DATA приходят же не за одно сообщение, так вот в момент когда приходит первое сообщение нужно запретить сравнение массивов. Когда приходит последнее сообщение и массив DATA завершает свое формирование, сравнение можно разрешить. Для этого нужен флаг запрет/разрешение.
Цитата:
PHP код:
|
Цитата:
А самописное сравнение с for будет ли быстрее memcmp? |
Цитата:
Цитата:
Подкорректировал тот пример, чтобы когда неравны возвращало 1. Возвращать индекс первого несовпадения в общем-то никчему, но непонятка могла возникнуть когда нулевой элемент массивов не совпадал. |
xmetal
Спасибо за пример сравнения. По поводу данных. Ведройд не сохраняет в себе ни каких значений, он тупо считает и выводит то, что на него приходит. Ардуина кладёт в массив данные с интересующих меня ID, данные по шине идут естественно один пакет за раз, а мне иногда нужны данные из разных пакетов, так что дуина их складывает в массив, а потом все изменения выкидывает в порт. Тоесть выдаёт всё за раз. Вот что в итоге сотворил. При каждом приходе интересующего меня ID данные складываются в массив и пишется флаг Compare = true; Ну а дальше проверяется в основном цикле вышли ли 100мс и состояние флага. И если вышли и флаг true, то сравниваются массивы и если не равны, то выдаём данные в порт и записываем данные из массива 1 в массив 2 (тоесть с тем, с которым в дальнейшем будем сравнивать). PHP код:
|
Здравствуйте уми мира этого.
Вот начал читать ваш топик і понял што ето то што мне нужно. В обшех чертах у меня идея очень похожея, заменить монохромний дисплей на 7inch андроид, но рендерить на КОDI(XBMC). Почему сделать интерфейс для KODI? потому што я python developer и мне попросту проще так. Итак мне уже идут CAN шилд на MCP2515 и MAX3053ЕСА и у меня Ситроен с-elysee с штатной RD45 магнитолой. Читал про небходимость утилити снифить і рендерить CAN коди (идея про 3 колонки), думал што навероє удобно подключить raspberry pi по SPI и уже там снифить и рендерить, єсли вам идея нравитса могу помочь в етом. В общем ребята спасибо что развиваите єту тему, я хотел би присоєдинитса к вам, но сами понимаите, ратота, жена - отнимають много в ремени у меня. Но я буду старатса не отставать). Когда мне все прийдет я залю скетч и посмотрю как ето работаєт у меня, если што задам вопроси. P.S. я сам из Украини и руский не мой родной язик, так што простите за ошибки в написании |
Цитата:
|
xmetal Стоп- стоп!
У нас есть цикл, в нём есть определение приёма пакета и если приняли, то куча ифов. На данный момент заменено на switch. Задетектили приём пакета, пошли вниз по коду, если есть, то изменили что-то в массиве, если нет, то просто сделали пробежку сверху вниз, сравнили массивы и побежали на следующий круг. В этом цикле как бы не может быть много пакетов. Если приняли нужный нам пакет, то сравнив у нас естественно массивы не совпали и мы выдали весь пакет целиком в порт, не важно что записали всего один бит, передали всё равно 161 байт. Ну и в буферный масив перекинули данные основного массива чтоб потом сравнивать дальше. Так что складывание данных только из одного пакета за цикл и сравнение тоже. Сейчас оптимизировал это свитчем и сделал сравнение только если пришёл интересующий меня пакет. В порт лететь стало меньше. Проблема ушла с кашей. То что не ловит переодически пакеты это уже где-то с железом косяк. Даже на минимальном скетче есть потери пакетов (просто когда пакеты в консоль выводятся). После пропайки TJA, укорочения хвоста витухи в машине стало полутчше,но всё равно теряет. Видимо вместо дисплея в разъём втыкать нужно чтоб лишних проводов и скруток не было. На этой недели проверю. |
Кажется понял. Андроид сам берет из всего массива то, что ему в данный момент нужно. Например если вместо рдс текста находится мусор, он его не будет смотреть, так как нет команды обновлять рдс текст. Но этот мусор все равно передается. Правильно?
|
Цитата:
Цитата:
- сообщения изначально фильтруются уже ? - как часто опрашивается шина в секунду ? Судя по загруженности Ардуино, постоянно со скоростью шины ? Т.е. есть такие одинокие редкие сообщения, который нужно вылавливать с большой непрерывной скоростью опроса ? -Нельзя фрагментами делать выборку ? Что например , номер трека как сообщение проскочил один раз и все ... пока не сменишь трек? Как часто повторяются такие данные ? например, где-то в теории читал , что сообщение повторяется до тех пор пока ему не ответит устройство, которому оно предназначено. Или здесь что-то не так в этом плане ? |
Цитата:
Цитата:
Цитата:
|
Вложений: 1
xmetal
Цитата:
Скажем STM32F105. Вот только как мой код туда запихать? Я не такой гуру программирования контроллеров. Вот кстати что с интерфейсом получилось. В итоге будет полноэкранка, а ща пока так. Место под климат разобрал. Хочу данные о нём и управление сделать с планшета. Там где написано 104.2MHZ отображается RDS. Надписи меняются раз в 4 секунды. Там же отображается номер и время CD\CD Changer. А там где написано MEM 5 отображается в режиме CD общее количество треков на диске, а в режиме ченджера текущий диск и общее количество треков на нём. Там где в режиме радио отображается POP M, тоесть сведения о PTY данной станции, в режиме CD отображается надпись CD ну и так далее :) |
Цитата:
Здесь первиє шаги с stm http://2150692.ru/faq/112-quick-start-stm32f103c8t6 |
dmit. Пока не воткнёшь что-то что может сканировать шину в свой автомобиль ни чего не узнаешь.
У тебя 100% сообщения идут не так как у меня. Не гадай- подключи и посмотри, а потом уже ищи что тебе нужно. Большая часть сообщений тебе будет вообще не нужна. Я работаю всего с 21 ID, а в шине их у меня за сотню летает. Вот сегодня займусь отловом сообщения SILENCE в режиме радио и PAUSE в режиме CD\CHANGER. |
Цитата:
UPD. Имеет CAN встроенный, значит либы есть. |
xmetal там встроенный кан, только трансивер внешний нужен (tja).
И подходят только 105 и 107. Только они умеют одновременно CAN и USB. Характеристики у них конечно на несколько порядков круче атмеги. |
@T_r_D
Мне через два дня придут CAN модуль и я смогу залить товй скетч, stm мне уже литит из китая, так што как только он прйдет я тоже напишу какиє результати. Итак у меня возник вопрос/идея: T_r_D у тебя уже много написано кода, как для ардуини так и для андроида, почему би тебе не виложить ето все на GitHub, сделать 2 репозитория(1 для ардуино, 2й для андроида), там би ми могли иметь версии и делать свои изминения. Ето хорошая практика, если нужна помошь с git, я помогу разобратса. |
devova потому что мне это не надо.
|
Так, вроде всё сделал что возможно при сохранении дисплея, теперь полезли дальше.
Для того чтоб магнитола ожила нужно чтоб она видела дисплей. Это решается просто. Посылаем один ID при первой загрузке ардуины: 5E5 25,A,B,4,C,1,20,11 И раз в 100мс ещё два пакета: 167 9,6,FF,FF,7F,FF,0,0 100мс. Нулевой байт это то, что отображает БК, без остального магнитола не включается. DF 10,0,50 100мс. Состояние меню. После этого магнитола включится, начнёт реагировать на кнопки, но ни какие меню открывать не будет. Для открытия меню нужно чтоб была реакция DF. Ща пока на меню все забью, а буду разбираться с 167 ID, точнее с нулевым байтом чтоб понять какое отображение дисплея чему соответствует. Это для сброса трипа надо. |
Цитата:
|
Garen до некоторой степени :)
Готова полностью прослушка, тоесть вывожу на планшет всё, кроме меню настроек, то что по кнопке MENU. Чтоб его выводить нужно выкидывать дисплей. Сегодня первые попытки по серьёзному сэмулировать дисплей. В принципе обмануть магнитолу просто, это уже сделано. Всё включается и работает. После некоторых танцев заработал лист PTY, СD LIST, окошко PLEASE WAIT, окошко PTY xx NOT FOUND. Не работает мультифрейм. Выводит только сообщение которое с 0х10 начинается и всё. Посмотрел логи, ща попробую скормить ещё один ID- может пройдёт целиком. Так же непонятки с трипом. Докопался до этого в 167 ID. Они разные для двух дисплеев. В машине строчечный дома графический. По этому ID магнитола определяет наличае дисплея! C,6,FF,FF,7F,FF,0,0 байт 0 9 -машинка A - 1 C - 2 При долгом удержании кнопки сброса трипа реагируем только в A и C. Дисплей отзывается 8A и 4C. В машине 0,0,0,0,0,0,0,0 байт 0 0 - Data 1 - Моментальный расход на 100 2 - Trip 2 - L/100 2 - Avg Spd При долгом удержании кнопки сброса трипа реагируем только в 2. Дисплей отзывается 82 0 - 00000000 1 - 00000001 2 - 00000010 82- 10000010 9 - 00001001 A - 00001010 C - 00001100 8A- 10001010 4C- 01001100 Тоесть можно заметить что 3 бит в машине всегда 0, а дома всегда 1. Если их игнорировать то: Тогда 1=9 2=А 82 = 8А С ни чему не равен- он отдельно. Можно предположить что за сброс отвечает 7 бит отдельно или вместе с первым. Так что ещё немного и чего-то достигну. |
Итак, судя по логу на первое сообщение мультифрейма отвечает ID 11F.
Всегда одинаково. 0x30,0x0,0xA. Проверил и для BAND и для LIST. Вот только нажимая на кнопки 1-6 (BAND) меню начало на планшете работать, а на LIST нет. И ни чего интересного в логе не вижу... Короче копаем дальше... PS. Кто там интересовался как ловить сообщения из кана? :) Вот примерно так: <293,10,D,10,1,0,10,20,38,> <287,30,0,A,> <293,21,37,2E,39,46,4D,20,90,> <305,81,0,0,0,0,> <223,10,0,70,> <357,C0,C0,10,0,> <805,0,1,0,> <359,9,6,FF,FF,7F,FF,0,0,> <305,81,0,0,0,0,> <493,10,> <357,C0,C0,10,0,> <613,91,80,A,0,> <1312,1,0,0,0,1,0,0,0,> <997,0,0,0,0,0,0,> <359,9,6,FF,FF,7F,FF,0,0,> <305,81,0,0,0,0,> <357,C0,C0,10,0,> <359,9,6,FF,FF,7F,FF,0,0,> <305,81,0,0,0,0,> <480,50,0,A2,80,A0,> <357,C0,C0,10,0,> <359,9,6,FF,FF,7F,FF,0,0,> <347,7,0,0,0,0,0,0,0,> <305,81,0,0,0,0,> <421,F2,> <933,1,FF,FF,FF,7F,0,> <357,C0,C0,10,0,> <485,3F,3F,3F,3F,3F,40,F,> <869,45,31,1B,0,0,> <677,20,4C,69,6B,65,46,4D,20,> <359,9,6,FF,FF,7F,FF,0,0,> <549,A0,10,10,2,F6,> <305,81,0,0,0,0,> <223,10,0,70,> <357,C0,C0,10,0,> <359,9,6,FF,FF,7F,FF,0,0,> <805,0,1,0,> <305,81,0,0,0,0,> Это как раз попытка посмотреть что идёт ещё. При точно таком же начале банды открываются. Значит есть ещё что-то при помощи чего открывается list of station. ID тут в DEC |
Так, разобрался с мультифреймом радиотекста без дисплея.
Ответ на первый пакет мультифрейма он требует по ID 0х9F, тоесть не по 11F. Код вот PHP код:
|
Всё, разобрался я со всем.
Дисплей для магнитолы, по крайней мере, сэмулирован. Осталось написать своё меню по кнопке MENU которое я оставлял на потом и собственно магнитола и планшет подружены на 100%. Дальше пойдут тесты в машине. UPD. А не всё так просто :) Всё вроде работает, но надо посмотреть иерархию меню, пока был дисплей меню друг друга не перекрывали потому что дисплей закрывал старое меню при открытии нового или просто не давал новому у которого приоритет ниже открываться, но я-то это не отслеживал. Так что теперь придётся это отслеживать самому. Например окно громкости стало закрываться через полторы секунды и пытаться перекрыть другие меню, хотя не должно появляться вообще когда другие меню открыты, окна настройки звука закрываются через те же полторы секунды даже если что-то меняешь. Ну короче много мелких и неприятных косячков. Самопальное меню дописано на 90%. Но как атомный ледокол "Ленин" идём к светлому будущему :) Ща начнутся две рабочие недели, так что процесс затормозиться, но думаю к концу них я поборю все косяки и доделаю меню, ну и китайцы наконец пришлют мне плату датчика тока без которой установка в машину планшета будет просто не возможна. Точнее возможна, но придётся искать хвост дисплея на котором появляется питание при его включении. Вот ссылка на видео того чего достиг. https://www.dropbox.com/s/2gdlaqvyvd...75233.3gp?dl=0 |
Приветствую.
Тоже решил наконец заняться темой интеграции планшета в машину. С мультимедией простой на андроиде всё понятно, но без интеграции с кан шиной было бы не интересно. машина - Citroen C4 (B5). покупать за 30к готовый планшет с рамкой у китайцев - не интересно. тем более что валяется их дома уже несколько ненужных. Недавно приехали драйвера (tja1055), в выходные начал разработку. понял, что упустил из виду кан-контроллер, поэтому вместо любимого msp430 использовал имеющуюся в наличии отладочную плату на stm32f103vc, у которого есть встроенный кан. в итоге первый день ушёл на аппаратную часть (рисовал\травил\паял драйвер, искал что-бы заюзать под контроллер и т.п.), на второй писал\отлаживал софтовую часть (раньше с каном никогда не работал, так что пришлось ковыряться с логическим анализатором, в поисках правильной жизни на шине в ответ на мои действия). В итоге притащил домой дисплей, кан поднялся, но дисплей молчал как партизан, бурно реагируя лишь на ид 0x36. Вернулся в машину, записал дамп зажигания, дома его проиграл дисплею - и чудо, всё работает. выяснил, что для его зажигания достаточно идов 36 и 165 и дальше в таком виде и экспериментировал, добавляя разный 3й ид в цикл. почитал все сообщения существующие и т.п. (не просто почитал - немного новой информации добавил в https://github.com/sisoftrg/autowp.github.io). Как-то так: https://drive.google.com/file/d/0B3N...ew?usp=sharing :) дальше интересный момент - нужно это всё отображать на планшете. есть серьёзные знания и опыт в разработке системного софта, железа и т.п., но вот с мобильными платформами всё туго (никогда не писал для андроида, да и яву недолюбливаю). T_r_D, планируется ли как-то открыть результаты наработок? имею в виду приложение для андроида. |
Все результаты получены при помощи открытого кода который в данной теме я указывал.
Так что каждый может его взять и писать на его основе любые интерфейсы и функционал. Свой дройдокод я открывать не планирую. И не поленитесь прочитать эту тему, просто так слать сообщения на дисплей не имеет особого смысла. Есть такие состояния отображения при которых нужно задействовать более одного id. Весь нужный и не особо нужный функционал описан в том месте куда вы сейчас добавляете информацию и в этой теме. Заменить дисплей планшетом полностью можно только проанализировав его поведение совместно с магнитолой и для одного единственного меню с машиной. Скетч для выуживания из кана 90% нужных id и информации из них тут представлен. В нём есть почти вся информация отображаемая штатным дисплеем. Так что нет смысла проводить какие либо ещё исследования. Всё остальное возможно только при эмуляции дисплея и его выкидыванием. |
Цитата:
Если нет, то не возражаете, если мы будем это делать? |
Цитата:
|
Цитата:
Цитата:
свою схемотехнику и код думаю тоже опубликую, как (и если) что-то интересное получится %) Цитата:
|
Цитата:
UART? |
Цитата:
|
Цитата:
|
Dmitry8 вам не нужно ни чего делать под конкретные задачи, у вас просто анализатор трафика.
Для конкретной задачи прощен нагрузить контроллер чем делать всё на стороне планшета. И чтоб желающие не наступали на грабли они не должны использовать вашу кривую плату с которой они точно на них наступят. Не в обиду, но сначала нужно исправить косяки, а потом продавать и рекламировать. Хотя бы потрудились вскрыть готовое устройство и счертить нормально схему с элементной базой. Потом открыть даташит на 1050 и его изучить. sisoft нужно использовать 105 иначе будут пропуски пакетов что не есть хорошо. А с кодом- поосмотрели бы сначала на исходник который я использую и потом уже велосипедели. Там ни чего сложного нет и база хорошая для своей программы. |
Цитата:
Цитата:
Цитата:
Цитата:
После изучения данных документов от производителя и была составлена наша схема. К тому же устройство , выполненное по данной схеме безотказно работает у меня в машине уже год. |
Цитата:
Ну пусть тогда работает дальше. Вы деньги хотите заработать, а я вам должен в этом помочь? Ну как бы не логично. И раз мне не знать что ВАМ нужно, прошу удалиться с обсуждением своих потребностей и коммерческого использования ВАШИХ произведений искусства в свою тему и там всё это обсуждать. Досвидания |
Цитата:
Цитата:
Цитата:
Цитата:
Что касается моего присутствия в этой теме, так я имею полное право читать/писать в ней, как и другие участники форума. Заметьте, от меня в этой теме ни разу не прозвучало предложение о продаже чего-либо, поэтому ваше утверждение о коммерческом использовании здесь неуместно. |
> Для конкретной задачи прощен нагрузить контроллер чем делать всё на стороне планшета.
Использование какого-то существующего протокола не противоречит возможности "не принимать в планшет лишнее". В протоколе lawicel, например, есть фильтр. Свой протокол конечно проще, но мне кажется это резко снижает применимость и повторное использование Мне совершенно не нравится протокол canhacker/lawicel по массе признаков, но ... а впрочем к этому надо придти самому. > ВАШИХ произведений искусства > Вы деньги хотите заработать, а я вам должен в этом помочь? Однако наши "произведения искусства" лежат в открытом доступе и готовы к критике И схемотехника, и прошивка, и код андроид-приложения. А ваши "научные изыскания" природа еще не видела, и, судя по тексту, деньги вы на этом зарабатывать не планируете, а значит есть иные причины скрывать всё это. Моя версия: вам стыдно. Но я могу и ошибаться |
T_r_D можно понять, ветка не коммерческая, зачем рекламировать свои продукты тут, есть же купля/продажа.
|
Часовой пояс GMT +4, время: 08:37. |
Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot