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 25.03.2016 15:54

Строка 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))
  {
    CAN.readMsgBuf(&len, buf);
    canId = CAN.getCanId();
.......................
.......................
  arrcmp = memcmp(DATA, DATA2, 161); // перенести сюда
  }

  if ((millis() - time0) > 100 && arrcmp != 0){
    Serial.write(DATA, 161);
    memcpy(DATA2, DATA, 161);
    time0 = millis(); 
  }

Перенести memcmp выше, а то получается, что оно постоянно вызывается.
Вообще по логике получается, что данные в DATA еще полностью не заполнились, а уже идет сравнение с DATA2 и если оно несовпадает, то идет отправка на планшет.
Надо вводить флаг, который будет разрешать/запрещать сравнение DATA с DATA2.

(millis() - time0) > 100 - некая задержка чтобы DATA успел заполнится, не совсем понял?

T_r_D 25.03.2016 19:37

По порядку.
Да- 54 байта это правильно. Максимальная длина этого мультифрейм 9*6=54

162 объявлено с запасом. Тут тоже всё корректно.

С сравнением массивов согласен. Нужно убрать в if который возникает при приходе пакета и желательно только мне нужного. Над этим подумаю- спасибо. Можно уменьшить количество проверяемый информации, но тогда увеличится код. В каждом if пришедшего пакета проверять изменения для конкретного id. Тоесть сравнивать только те байты, которые он может изменять.

Про флаг подробнее можно?

Про задержку в 100мс. Сделана чтоб не грузить особо COM и планшет. Быстрее чем 10 раз в секунду мне данные не нужны.

T_r_D 25.03.2016 22:49

Вот что имел в виду:
PHP код:

void CompareOut(){
arrcmp memcmp(DATA,DATA2,161);


И вызывать это если ID совпал. Тоесть например:
PHP код:

          if(canId == 0x1E0)
          {
            
bitWrite(DATA[21],0,bitRead(buf[0],5));
            
bitWrite(DATA[21],1,bitRead(buf[0],2));
            
bitWrite(DATA[21],2,bitRead(buf[1],7));
            
bitWrite(DATA[21],3,bitRead(buf[2],5));
            
bitWrite(DATA[21],4,bitRead(buf[3],7));
            
bitWrite(DATA[21],5,bitRead(buf[4],5));
CompareOut();
          } 

Так должна ещё скорость увеличится.

А если узнать как сравнивать кусок массива, а не весь, то будет ещё быстрее.
Ну скажем байты с 10 по 15. И передавать эти значения в функцию CompareOut(15,20);

xmetal 26.03.2016 12:29

Данные которые складываются в массив DATA приходят же не за одно сообщение, так вот в момент когда приходит первое сообщение нужно запретить сравнение массивов. Когда приходит последнее сообщение и массив DATA завершает свое формирование, сравнение можно разрешить. Для этого нужен флаг запрет/разрешение.
Цитата:

Сообщение от T_r_D (Сообщение 356138)
А если узнать как сравнивать кусок массива, а не весь, то будет ещё быстрее.
Ну скажем байты с 10 по 15. И передавать эти значения в функцию CompareOut(15,20);

Можно самому написать сравнение, тапример так:
PHP код:

byte compare(byte *data1byte *data2byte firstbyte last) {
  for (
byte i firstlast+1i++) {
    if (
data1[i] != data2[i]) {
      return 
1// если не равны, возвращаем 1
    
}
  }
  return 
0// если равны, возвращаем 0


data1, data2 - массивы, first и last начальный и конечный индексы массивов для сравнения (начиная с 0).

T_r_D 26.03.2016 14:20

Цитата:

Сообщение от xmetal (Сообщение 356168)
Данные которые складываются в массив DATA приходят же не за одно сообщение, так вот в момент когда приходит первое сообщение нужно запретить сравнение массивов. Когда приходит последнее сообщение и массив DATA завершает свое формирование, сравнение можно разрешить. Для этого нужен флаг запрет/разрешение.

А вот нету конечного сообщения. Это всё в динамике отображается. Тоесть нужно отображать любое изменение массива за период 100мс


А самописное сравнение с for будет ли быстрее memcmp?

xmetal 26.03.2016 14:43

Цитата:

Сообщение от T_r_D (Сообщение 356183)
А самописное сравнение с for будет ли быстрее memcmp?

ХЗ, а почему бы ему тормозить? ))


Цитата:

Сообщение от T_r_D (Сообщение 356183)
А вот нету конечного сообщения. Это всё в динамике отображается. Тоесть нужно отображать любое изменение массива за период 100мс

Экран же понимает, когда можно начинать выводить. Я не очень представляю как выглядят данные с которыми ты работаешь, поэтому мне сложно что-то конкретное советовать.

Подкорректировал тот пример, чтобы когда неравны возвращало 1. Возвращать индекс первого несовпадения в общем-то никчему, но непонятка могла возникнуть когда нулевой элемент массивов не совпадал.

T_r_D 27.03.2016 02:49

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;


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

devova 28.03.2016 09:36

Здравствуйте уми мира этого.
Вот начал читать ваш топик і понял што ето то што мне нужно. В обшех чертах у меня идея очень похожея, заменить монохромний дисплей на 7inch андроид, но рендерить на КОDI(XBMC). Почему сделать интерфейс для KODI? потому што я python developer и мне попросту проще так.
Итак мне уже идут CAN шилд на MCP2515 и MAX3053ЕСА и у меня Ситроен с-elysee с штатной RD45 магнитолой. Читал про небходимость утилити снифить і рендерить CAN коди (идея про 3 колонки), думал што навероє удобно подключить raspberry pi по SPI и уже там снифить и рендерить, єсли вам идея нравитса могу помочь в етом.
В общем ребята спасибо что развиваите єту тему, я хотел би присоєдинитса к вам, но сами понимаите, ратота, жена - отнимають много в ремени у меня. Но я буду старатса не отставать).
Когда мне все прийдет я залю скетч и посмотрю как ето работаєт у меня, если што задам вопроси.

P.S. я сам из Украини и руский не мой родной язик, так што простите за ошибки в написании

xmetal 28.03.2016 17:16

Цитата:

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

Вот! Я и хочу сказать, что когда дуина начинает складывать данные из разных пакетов, нельзя разрешать сравнение массивов. Разрешать нужно только когда в массив положился последний кусок данных. Возможно в тестах на столе все данные успевали собраться за 100 мс, так как нету другого трафика в кан шине. А в реальных условиях какое-то сообщение притормозилось, таймер вышел, данные пошли в планшет и получили кашу.

T_r_D 29.03.2016 01:45

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

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

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

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

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

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 потому что мне это не надо.

T_r_D 31.03.2016 12:05

Так, вроде всё сделал что возможно при сохранении дисплея, теперь полезли дальше.
Для того чтоб магнитола ожила нужно чтоб она видела дисплей. Это решается просто.
Посылаем один 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 31.03.2016 13:18

Цитата:

Сообщение от T_r_D (Сообщение 354113)
Все окна что выводят инфу они поверх всего и вылезают даже когда приложение скрыто.

Дописал PTY лист и сообщение когда идёт поиск PTY

Рамки этим сообщениям сделать надо, но ща тестирование и попытка дружить железки вместе.

сдружились?)

T_r_D 31.03.2016 16:15

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 бит отдельно или вместе с первым.

Так что ещё немного и чего-то достигну.

T_r_D 31.03.2016 17:25

Итак, судя по логу на первое сообщение мультифрейма отвечает 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

T_r_D 01.04.2016 11:17

Так, разобрался с мультифреймом радиотекста без дисплея.
Ответ на первый пакет мультифрейма он требует по ID 0х9F, тоесть не по 11F.
Код вот
PHP код:

unsigned char DisplayAcknowledg[3] = {0x30,0x0,0xA};


          if(
bitRead(DATA[21],5) == 1//A4 /164
          
{
              if ((
buf[0] >> 4) == 0x01){
                
LengthR = ((buf[0] & 0x0F) * 256 buf[1]) - 6;
                
DataBufSizeR 98;
                
DATA[96] = buf[6];
                
DATA[97] = buf[7];
                
CAN.sendMsgBuf(0x9F03DisplayAcknowledg);
              } 

              if(((
buf[0] >> 4) == 0x02) && LengthR 0) {
                 if (
LengthR 7)
                  {
                    for (
int i=07;i++) DATA[DataBufSizeR] = buf[i+1];
                    
DataBufSizeR DataBufSizeR 7;
                    
LengthR LengthR 7;
                 }
                  else{
                    for (
int i=0LengthR;i++) DATA[DataBufSizeR] = buf[i+1];
                   
LengthR 0;
                  }
            }
          } 


T_r_D 01.04.2016 14:05

Всё, разобрался я со всем.
Дисплей для магнитолы, по крайней мере, сэмулирован.

Осталось написать своё меню по кнопке MENU которое я оставлял на потом и собственно магнитола и планшет подружены на 100%.

Дальше пойдут тесты в машине.

UPD.
А не всё так просто :)
Всё вроде работает, но надо посмотреть иерархию меню, пока был дисплей меню друг друга не перекрывали потому что дисплей закрывал старое меню при открытии нового или просто не давал новому у которого приоритет ниже открываться, но я-то это не отслеживал. Так что теперь придётся это отслеживать самому. Например окно громкости стало закрываться через полторы секунды и пытаться перекрыть другие меню, хотя не должно появляться вообще когда другие меню открыты, окна настройки звука закрываются через те же полторы секунды даже если что-то меняешь. Ну короче много мелких и неприятных косячков.
Самопальное меню дописано на 90%.

Но как атомный ледокол "Ленин" идём к светлому будущему :)

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

Вот ссылка на видео того чего достиг.
https://www.dropbox.com/s/2gdlaqvyvd...75233.3gp?dl=0

sisoft 05.04.2016 02:16

Приветствую.

Тоже решил наконец заняться темой интеграции планшета в машину. С мультимедией простой на андроиде всё понятно, но без интеграции с кан шиной было бы не интересно.
машина - 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, планируется ли как-то открыть результаты наработок? имею в виду приложение для андроида.

T_r_D 05.04.2016 06:57

Все результаты получены при помощи открытого кода который в данной теме я указывал.
Так что каждый может его взять и писать на его основе любые интерфейсы и функционал.

Свой дройдокод я открывать не планирую.

И не поленитесь прочитать эту тему, просто так слать сообщения на дисплей не имеет особого смысла.
Есть такие состояния отображения при которых нужно задействовать более одного id.
Весь нужный и не особо нужный функционал описан в том месте куда вы сейчас добавляете информацию и в этой теме.

Заменить дисплей планшетом полностью можно только проанализировав его поведение совместно с магнитолой и для одного единственного меню с машиной.

Скетч для выуживания из кана 90% нужных id и информации из них тут представлен. В нём есть почти вся информация отображаемая штатным дисплеем. Так что нет смысла проводить какие либо ещё исследования.
Всё остальное возможно только при эмуляции дисплея и его выкидыванием.

autowp 05.04.2016 21:29

Цитата:

Сообщение от sisoft (Сообщение 357415)
Приветствую....

Pull request'ить будете?
Если нет, то не возражаете, если мы будем это делать?

Dmitry8 05.04.2016 21:58

Цитата:

Сообщение от sisoft (Сообщение 357415)
в итоге первый день ушёл на аппаратную часть (рисовал\травил\паял драйвер, искал что-бы заюзать под контроллер и т.п.)

Ну а чтобы желающие повторить подвиг не наступали на грабли, есть готовое решение

sisoft 05.04.2016 22:04

Цитата:

Сообщение от T_r_D (Сообщение 357425)
Свой дройдокод я открывать не планирую.

в основном это и интересовало. значит буду пробовать велосипедить своё, на Go mobile.

Цитата:

Сообщение от autowp (Сообщение 357496)
Pull request'ить будете?
Если нет, то не возражаете, если мы будем это делать?

да, обязательно. просто думал сначала насобирать побольше, но пока до выходных видимо железо трогать не буду (некогда), запулю что есть. а в выходные соберу на столе уже и дисплей и магнитолу.

свою схемотехнику и код думаю тоже опубликую, как (и если) что-то интересное получится %)


Цитата:

Сообщение от Dmitry8 (Сообщение 357498)
Ну а чтобы желающие повторить подвиг не наступали на грабли, есть готовое решение

да, для начинающих отлично. но я не любитель ардуин, а самое главное - в ближнем доступе небыло mcp2515, а заказывать - опять ждать. руки чесались начать с тем, что есть :)

autowp 05.04.2016 22:16

Цитата:

Сообщение от sisoft (Сообщение 357499)
...

А как вы F103ю серию так применили, у неё же вроде одновременная работа Usb и can невозможна из-за того, что они делят один и тот же участок памяти.
UART?

sisoft 05.04.2016 22:40

Цитата:

Сообщение от autowp (Сообщение 357500)
А как вы F103ю серию так применили, у неё же вроде одновременная работа Usb и can невозможна из-за того, что они делят один и тот же участок памяти.
UART?

да, заметил такое ограничение в документации. но на этой плате есть pl2303, так что настроил уарт на 460800 что бы гарантированно влез весь трафик в декодированном текстовом виде и пока этим доволен. далее видимо логику разбора сообщений помещу в прошивку, а наружу буду отдавать только полезные изменения. наподобии того, как сделано в имеющемся здесь скетче от T_r_D.

Dmitry8 05.04.2016 22:47

Цитата:

Сообщение от sisoft (Сообщение 357415)
далее видимо логику разбора сообщений помещу в прошивку

Мы пошли по другому пути: для обмена используем протокол lawicel и отправляем все что есть. Так, мне кажется, удобнее дорабатывать софт, чтобы не править прошивку и приложение одновременно. Трафик в нашей шине порядка 40 Кбит/с, не так уж много, можно и "погонять".

T_r_D 06.04.2016 08:39

Dmitry8 вам не нужно ни чего делать под конкретные задачи, у вас просто анализатор трафика.
Для конкретной задачи прощен нагрузить контроллер чем делать всё на стороне планшета.

И чтоб желающие не наступали на грабли они не должны использовать вашу кривую плату с которой они точно на них наступят. Не в обиду, но сначала нужно исправить косяки, а потом продавать и рекламировать.
Хотя бы потрудились вскрыть готовое устройство и счертить нормально схему с элементной базой. Потом открыть даташит на 1050 и его изучить.

sisoft нужно использовать 105 иначе будут пропуски пакетов что не есть хорошо.
А с кодом- поосмотрели бы сначала на исходник который я использую и потом уже велосипедели.
Там ни чего сложного нет и база хорошая для своей программы.

Dmitry8 06.04.2016 09:28

Цитата:

Сообщение от T_r_D (Сообщение 357516)
Dmitry8 вам не нужно ни чего делать под конкретные задачи

Откуда Вам знать что нам нужно?

Цитата:

Сообщение от T_r_D (Сообщение 357516)
Для конкретной задачи прощен нагрузить контроллер чем делать всё на стороне планшета.

Ну здесь каждый решает сам как ему делать, можно и так и так, я всего-лишь высказал свои мысли по этому поводу. Не в коем случае не выдаю свои мысли за прописную истину.
Цитата:

Сообщение от T_r_D (Сообщение 357516)
И чтоб желающие не наступали на грабли они не должны использовать вашу кривую плату с которой они точно на них наступят. Не в обиду, но сначала нужно исправить косяки, а потом продавать и рекламировать.

Интересно о каких косяках речь? Если Вы собрались критиковать плату - делайте это конструктивно.
Цитата:

Сообщение от T_r_D (Сообщение 357516)
Хотя бы потрудились вскрыть готовое устройство и счертить нормально схему с элементной базой. Потом открыть даташит на 1050 и его изучить.

Если Вы имели в виду TJA1050 , то данный драйвер относится к HS-CAN трансиверам и неприменим в сети устройств CAN-INFO автомобилей PSA. Нами же были изучены даташит на TJA1055 , который является FT-CAN драйвером и Application Notes Fault-tolerant CAN transceiver
После изучения данных документов от производителя и была составлена наша схема. К тому же устройство , выполненное по данной схеме безотказно работает у меня в машине уже год.

T_r_D 06.04.2016 11:06

Цитата:

Сообщение от Dmitry8 (Сообщение 357519)
Откуда Вам знать что нам нужно?


Ну здесь каждый решает сам как ему делать, можно и так и так, я всего-лишь высказал свои мысли по этому поводу. Не в коем случае не выдаю свои мысли за прописную истину.

Интересно о каких косяках речь? Если Вы собрались критиковать плату - делайте это конструктивно.

Если Вы имели в виду TJA1050 , то данный драйвер относится к HS-CAN трансиверам и неприменим в сети устройств CAN-INFO автомобилей PSA. Нами же были изучены даташит на TJA1055 , который является FT-CAN драйвером и Application Notes Fault-tolerant CAN transceiver
После изучения данных документов от производителя и была составлена наша схема. К тому же устройство , выполненное по данной схеме безотказно работает у меня в машине уже год.

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

И раз мне не знать что ВАМ нужно, прошу удалиться с обсуждением своих потребностей и коммерческого использования ВАШИХ произведений искусства в свою тему и там всё это обсуждать.
Досвидания

Dmitry8 06.04.2016 11:42

Цитата:

Сообщение от T_r_D (Сообщение 357525)
Вы деньги хотите заработать,

Конечно хочу, все хотят. Но только не таким способом. В теме выложена схема, любой может самостоятельно собрать такое устройство, я делюсь ей безвозмездно. А заработать на этом вряд-ли получится.
Цитата:

Сообщение от T_r_D (Сообщение 357525)
а я вам должен в этом помочь?

Боже упаси.
Цитата:

Сообщение от T_r_D (Сообщение 357525)
Ну как бы не логично.

Согласен.
Цитата:

Сообщение от T_r_D (Сообщение 357525)
И раз мне не знать что ВАМ нужно, прошу удалиться с обсуждением своих потребностей и коммерческого использования ВАШИХ произведений искусства в свою тему и там всё это обсуждать.
Досвидания

Просто Вы в ЭТОЙ теме называете нашу плату "кривой", причём безосновательно, потрудитесь объяснить в чем "кривость". Я же ничего не говорю про ваш "код". Если есть ошибки - укажите на них, чтобы другие их не повторяли. Может выложите свою "не кривую" плату, чтобы все могли увидеть "как надо"?

Что касается моего присутствия в этой теме, так я имею полное право читать/писать в ней, как и другие участники форума. Заметьте, от меня в этой теме ни разу не прозвучало предложение о продаже чего-либо, поэтому ваше утверждение о коммерческом использовании здесь неуместно.

autowp 06.04.2016 12:26

> Для конкретной задачи прощен нагрузить контроллер чем делать всё на стороне планшета.

Использование какого-то существующего протокола не противоречит возможности "не принимать в планшет лишнее". В протоколе lawicel, например, есть фильтр.
Свой протокол конечно проще, но мне кажется это резко снижает применимость и повторное использование

Мне совершенно не нравится протокол canhacker/lawicel по массе признаков, но ... а впрочем к этому надо придти самому.

> ВАШИХ произведений искусства
> Вы деньги хотите заработать, а я вам должен в этом помочь?

Однако наши "произведения искусства" лежат в открытом доступе и готовы к критике
И схемотехника, и прошивка, и код андроид-приложения.
А ваши "научные изыскания" природа еще не видела, и, судя по тексту, деньги вы на этом зарабатывать не планируете, а значит есть иные причины скрывать всё это.
Моя версия: вам стыдно.

Но я могу и ошибаться

xmetal 06.04.2016 13:01

T_r_D можно понять, ветка не коммерческая, зачем рекламировать свои продукты тут, есть же купля/продажа.


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

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