PCCar.ru - Ваш автомобильный компьютер

PCCar.ru - Ваш автомобильный компьютер (http://pccar.ru/index.php)
-   Общение с машиной (http://pccar.ru/forumdisplay.php?f=14)
-   -   CITROEN-ARDUINO (http://pccar.ru/showthread.php?t=23275)

xmetal 29.03.2016 11:37

Кажется понял. Андроид сам берет из всего массива то, что ему в данный момент нужно. Например если вместо рдс текста находится мусор, он его не будет смотреть, так как нет команды обновлять рдс текст. Но этот мусор все равно передается. Правильно?

dmit 29.03.2016 13:03

Цитата:

Сообщение от T_r_D (Сообщение 356254)
xmetal
Спасибо за пример сравнения.

По поводу данных.
Ведройд не сохраняет в себе ни каких значений, он тупо считает и выводит то, что на него приходит.

Ардуина кладёт в массив данные с интересующих меня ID, данные по шине идут естественно один пакет за раз, а мне иногда нужны данные из разных пакетов, так что дуина их складывает в массив, а потом все изменения выкидывает в порт.
Тоесть выдаёт всё за раз.

Вот что в итоге сотворил.
При каждом приходе интересующего меня ID данные складываются в массив и пишется флаг Compare = true;
Ну а дальше проверяется в основном цикле вышли ли 100мс и состояние флага.
И если вышли и флаг true, то сравниваются массивы и если не равны, то выдаём данные в порт и записываем данные из массива 1 в массив 2 (тоесть с тем, с которым в дальнейшем будем сравнивать).
PHP код:

if ((millis() - time0) > 100 && Compare){
arrcmp memcmp(DATA,DATA2,161);
  if (
arrcmp != 0)
  {
      
Serial.write(DATA161); //41 + 54 +64
      
memcpy(DATA2,DATA,161); //Присваиваем массиву DATA2 160 байт массива DATA
  
}
time0 millis();
Compare false;


Так по идеи должно работать ещё быстрее

Цитата:

Сообщение от T_r_D (Сообщение 356553)
xmetal Стоп- стоп!
У нас есть цикл, в нём есть определение приёма пакета и если приняли, то куча ифов.
На данный момент заменено на switch.
Задетектили приём пакета, пошли вниз по коду, если есть, то изменили что-то в массиве, если нет, то просто сделали пробежку сверху вниз, сравнили массивы и побежали на следующий круг.
В этом цикле как бы не может быть много пакетов.
Если приняли нужный нам пакет, то сравнив у нас естественно массивы не совпали и мы выдали весь пакет целиком в порт, не важно что записали всего один бит, передали всё равно 161 байт. Ну и в буферный масив перекинули данные основного массива чтоб потом сравнивать дальше.

Так что складывание данных только из одного пакета за цикл и сравнение тоже.

Сейчас оптимизировал это свитчем и сделал сравнение только если пришёл интересующий меня пакет. В порт лететь стало меньше. Проблема ушла с кашей.

То что не ловит переодически пакеты это уже где-то с железом косяк. Даже на минимальном скетче есть потери пакетов (просто когда пакеты в консоль выводятся). После пропайки TJA, укорочения хвоста витухи в машине стало полутчше,но всё равно теряет. Видимо вместо дисплея в разъём втыкать нужно чтоб лишних проводов и скруток не было.

На этой недели проверю.

Возможно глупости напишу. Но интересуюсь, т.к. сам хочу начать заниматься этой темой только для Ниссана Теаны !
- сообщения изначально фильтруются уже ?
- как часто опрашивается шина в секунду ? Судя по загруженности Ардуино, постоянно со скоростью шины ? Т.е. есть такие одинокие редкие сообщения, который нужно вылавливать с большой непрерывной скоростью опроса ?
-Нельзя фрагментами делать выборку ? Что например , номер трека как сообщение проскочил один раз и все ... пока не сменишь трек? Как часто повторяются такие данные ?
например, где-то в теории читал , что сообщение повторяется до тех пор пока ему не ответит устройство, которому оно предназначено. Или здесь что-то не так в этом плане ?

xmetal 29.03.2016 15:38

Цитата:

Сообщение от dmit (Сообщение 356606)
- сообщения изначально фильтруются уже ?

Нет, не фильтруются. Можно получать сообщения с любым ID который доступен в конкретной кан-шине. В автомобиле как правило несколько кан-шин.

Цитата:

Сообщение от dmit (Сообщение 356606)
- как часто опрашивается шина в секунду ? Судя по загруженности Ардуино, постоянно со скоростью шины ? Т.е. есть такие одинокие редкие сообщения, который нужно вылавливать с большой непрерывной скоростью опроса ?

Данные из кан-шины попадают в буфер (их там 2 вроде) MCP2515, ардуино должна их как можно быстрее считывать, иначе вновь поступающие сообщения будут игнорироваться. MCP2515 работает аппаратно вплоть до 1 Мегабита, так что слабое звено тут Ардуино.


Цитата:

Сообщение от dmit (Сообщение 356606)
-Нельзя фрагментами делать выборку ? Что например , номер трека как сообщение проскочил один раз и все ... пока не сменишь трек? Как часто повторяются такие данные ?
например, где-то в теории читал , что сообщение повторяется до тех пор пока ему не ответит устройство, которому оно предназначено. Или здесь что-то не так в этом плане ?

Все зависит от выдумки разработчиков. Все данные в сообщении и частота его повторения зависит от конкретного разработчика устройства.

T_r_D 29.03.2016 16:54

Вложений: 1
xmetal
Цитата:

MCP2515 работает аппаратно вплоть до 1 Мегабита, так что слабое звено тут Ардуино.
Вот тут ты абсолютно прав! Если не поможет подключение прям к разъёму машины без проводов то надо переходить на что-то более шустрое.
Скажем STM32F105. Вот только как мой код туда запихать? Я не такой гуру программирования контроллеров.

Вот кстати что с интерфейсом получилось. В итоге будет полноэкранка, а ща пока так. Место под климат разобрал. Хочу данные о нём и управление сделать с планшета.

Там где написано 104.2MHZ отображается RDS. Надписи меняются раз в 4 секунды.
Там же отображается номер и время CD\CD Changer.
А там где написано MEM 5 отображается в режиме CD общее количество треков на диске, а в режиме ченджера текущий диск и общее количество треков на нём.
Там где в режиме радио отображается POP M, тоесть сведения о PTY данной станции, в режиме CD отображается надпись CD ну и так далее :)

devova 29.03.2016 16:59

Цитата:

Сообщение от xmetal (Сообщение 356633)
.
Данные из кан-шины попадают в буфер (их там 2 вроде) MCP2515, ардуино должна их как можно быстрее считывать, иначе вновь поступающие сообщения будут игнорироваться. MCP2515 работает аппаратно вплоть до 1 Мегабита, так что слабое звено тут Ардуино.

А может надо взять stm вместо atmega? Вот к примеру єсть ардуіно совмечтимая платка на STM32F103C8T6 http://www.aliexpress.com/item/1pcs-...583160323.html. Она бистреє и памяти больше, как ви думаєте ето можно би било использовать?
Здесь первиє шаги с stm http://2150692.ru/faq/112-quick-start-stm32f103c8t6

T_r_D 29.03.2016 17:04

dmit. Пока не воткнёшь что-то что может сканировать шину в свой автомобиль ни чего не узнаешь.

У тебя 100% сообщения идут не так как у меня.

Не гадай- подключи и посмотри, а потом уже ищи что тебе нужно. Большая часть сообщений тебе будет вообще не нужна. Я работаю всего с 21 ID, а в шине их у меня за сотню летает.

Вот сегодня займусь отловом сообщения SILENCE в режиме радио и PAUSE в режиме CD\CHANGER.

xmetal 30.03.2016 00:43

Цитата:

Сообщение от devova (Сообщение 356651)
А может надо взять stm вместо atmega? Вот к примеру єсть ардуіно совмечтимая платка на STM32F103C8T6[/url]

Надо смотреть какие библиотеки для нее есть, для работы с CAN. Характеристики конечно впечатляют.

UPD. Имеет CAN встроенный, значит либы есть.

T_r_D 30.03.2016 12:30

xmetal там встроенный кан, только трансивер внешний нужен (tja).
И подходят только 105 и 107. Только они умеют одновременно CAN и USB.
Характеристики у них конечно на несколько порядков круче атмеги.

devova 30.03.2016 15:55

@T_r_D
Мне через два дня придут CAN модуль и я смогу залить товй скетч, stm мне уже литит из китая, так што как только он прйдет я тоже напишу какиє результати.
Итак у меня возник вопрос/идея: T_r_D у тебя уже много написано кода, как для ардуини так и для андроида, почему би тебе не виложить ето все на GitHub, сделать 2 репозитория(1 для ардуино, 2й для андроида), там би ми могли иметь версии и делать свои изминения. Ето хорошая практика, если нужна помошь с git, я помогу разобратса.

T_r_D 30.03.2016 17:56

devova потому что мне это не надо.


Часовой пояс GMT +4, время: 19:39.

Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot