FLProg
Вход на сайт
Логин:
Пароль:
Поиск
...
Статистика
Среда, 22.11.2017, 23:19
Приветствую Вас Гость | RSS
Главная | Регистрация | Вход

Поиск по сайту


Форум
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 11 из 12«129101112»
Модератор форума: support, Сергей, Олег, Anydy 
Форум » Основной » Спросить у знатоков » ARDUINO в качестве бортового компьютера для автомобиля. (ARDUINO в качестве бортового компьютера для автомобиля)
ARDUINO в качестве бортового компьютера для автомобиля.
DrMario Дата: Воскресенье, 13.08.2017, 22:15 | Сообщение # 151
Сержант
Группа: Проверенные
Сообщений: 51
Награды: 0
Репутация: 0
Статус: Offline
Цитата Andrej ()
Не подключается. Что то не то. Почему данные вы решили отправлять без контрольной суммы??? Когда протокол GM четко регламентирует контрольную сумму и перые 3 байта!!! Без этих чисел он вообще не поймет кто мы и что хотим! Далее откуда вы взяли 0010? Для какого потдержания? Мы сейчас работаем через компаратор, а это как с профессором по ФЕНЕ ботать. А далее я вообще запутался.
Смотрите внимательно, в блоке пользователя на входе CR стоит true. Это как раз режим добавления КС.
Читайте стандарт OBD-II на англицком, в русской версии много пропущено. Команда 0100 это запрос первых 20 ПИДов параметров по общему протоколу. Этот запрос обязателен для всех автомобилей, которые поддерживают общий протокол.

Цитата dekorator ()
Друзья. Небольшой совет. Нельзя без большого "гемороя" использовать при отправке и приёме строковые блоки ( у которых зелёненькие соединения ). Там другой формат данных.
Все верно, как раз в блоке происходит преобразование строчных данных в Hex.
Цитата Andrej ()
При все при этом в готовых данных к отправлению стоит C0233F1. Что то совсем данные не похожи на 8111F18104. В общем я совсем не понял блок. Не понял как оно работает и с чего вы взяли что ЭБУ отзовется на C0233F1. При попытке подсунуть нужный HEX выходит билиберда, 802111F18104. С блоком сложения совсем даже мыслей нет что он складывает.
Кто бы знал, как я расстроился. Прям руки опускаются.
Учите формат сообщений протокола KWP2000. Там есть два типа заголовков, с доп. байтом указателя количества отправляемых данных и без. Я ничем больше помочь не смогу. Все необходимое для установки соединения по этому протоколу есть в этой теме.
В моем примере много чего не сделано, я привел лишь пример для первого шага.
Цитата Andrej ()
Тут тоже править?
Эта вкладка в блоке не активна, коменты стоят везде  biggrin
А вообще лучше использовать интерфейс ELM-327 как я выше предупреждал.


Сообщение отредактировал DrMario - Воскресенье, 13.08.2017, 22:19
 
Andrej Дата: Понедельник, 14.08.2017, 17:29 | Сообщение # 152
Лейтенант
Группа: Проверенные
Сообщений: 84
Награды: 1
Репутация: 1
Статус: Offline
Цитата DrMario ()
в русской версии много пропущено.
Вы смотрели выкладку что снял с общения компа и ОБД? Там есть только отправка соеденения. Я попробую еще раз и через кабель когда прийдет. Есть вариант через галетту попробовать, но там выход как раз не очень прямой, нужны дрова с библиотеками.

Цитата DrMario ()
Учите формат сообщений протокола KWP2000.
Я почитаю. Но или не то читал или не там, не припомню про доп байт. 
И спасибо огромное за помощь и за терпение!
 
DrMario Дата: Понедельник, 14.08.2017, 23:01 | Сообщение # 153
Сержант
Группа: Проверенные
Сообщений: 51
Награды: 0
Репутация: 0
Статус: Offline
На протоколе KWP2000 ответ от блока может содержать большОе кол-во байт данных. В этом случае в  ответах (запросах и ответах) добавляется дополнительный байт. Он несет в себе информацию о количестве байт данных в сообщении и добавляется после 3 байт заголовка. В таком формате ЭБУ может передать до 250 байт в одном сообщении.
Обычно обмен данными имеет такой вид.
Запрос:C2 33 F1 01 00 E7
Ответ:86 F1 11 41 00 BE 3E B8 11 8E
Если отправляемую строку разобрать по частям, то получим:
C2 33 F1 - это заголовок, который в свою очередь состоит из несколько частей. Второй символ первого байта указывает на кол-во отправляемых байт данных (это 2 байта).
Второй и третий байты указывают на адрес приемника и адрес тестера.
01 00 - это сами запрашиваемые данные.
E7 - это контрольная сумма.
Ответ от ЭБУ раскладывается по похожему принципу.
86 F1 11 - заголовок, в котором второй символ первого байта указывает на шесть байт данных в сообщении. Второй и третий байты указывают на адрес тестера и адрес ЭБУ.
41 00 BE 3E B8 11 - это строка из 6 байт, в которой первые два байта 41 00 - это "зеркало" запрашиваемых байт с обязательным добавлением к первому байту 40h (запрос был 01 00).
8E - это КС.
Второй тип сообщений с добавлением доп. байта будет выглядеть примерно так:
Запрос:82 0F F1 1A 90 2C
Ответ:80 F1 0F 0D 5A 90 54 42 48 34 4D 33 34 20 20 20 20 BD
Ответ раскладывается так:
80 F1 0F - это заголовок для этого типа сообщений. Второй символ первого байта обязательно будет равен нулю.
0D - это тот самый доп. байт, указывающий на кол-во байт данных в сообщении (0D = 13)
5A 90 54 42 48 34 4D 33 34 20 20 20 20 - это 13 байт данных, из которых 5A 90 - зеркало запрашиваемой команды 1A 90 с обязательным добавлением к первому байту 40. И сами полезные данные, это строка из 11 байт 54 42 48 34 4D 33 34 20 20 20 20.
BD - это последний байт строки, который указывает на КС.
На некоторых машинах такой же формат имеют и запрашиваемые сообщения. Для других протоколов сообщения выглядят немного иначе.
В этой теме я выкладывал документ с описанием интерфейса ELM-327. Там можно подробнее посмотреть.
В этот интерфейс уже вложен весь "расклад" для многих протоколов включая КАН шину. Работать с ним намного проще, чем самому формировать строки для всех протоколов.


Сообщение отредактировал DrMario - Понедельник, 14.08.2017, 23:08
 
Andrej Дата: Четверг, 17.08.2017, 19:35 | Сообщение # 154
Лейтенант
Группа: Проверенные
Сообщений: 84
Награды: 1
Репутация: 1
Статус: Offline
Да. Я просто забыл, я читал это. На запрос 0210 выдает кучу информации о состоянии. Все же видно микруха не подходит, буду ждать кабель. Уже на таможне судя по трэку. Еще обещали дать галетту, думаю опробовать.

Добавлено (17.08.2017, 19:35)
---------------------------------------------
Как ни странно, но Galetta1260 пришла быстрее чем шнурок. Просто один человек подарил. Шнурок еще на таможне висит. 
Теперь поправте меня если я не прав. USB typ B на ардуине это же UART? Он же SERIAL 0? То есть я могу через переходник соединиться с галеттой и попробовать получить данные от ЭБУ?

 
DrMario Дата: Пятница, 18.08.2017, 10:28 | Сообщение # 155
Сержант
Группа: Проверенные
Сообщений: 51
Награды: 0
Репутация: 0
Статус: Offline
Что имеется ввиду USB typ B я не знаю. SERIAL 0 - это порт для подключения к компьютеру. Через него еще заливается скетч. На порты ALTSERIAL или COM1-COM3 как в ардуине Mega2560 или DUE можно вешать разные устройства. Подключить к нулевому порту какое нибудь устройство у меня не получилось.

Сообщение отредактировал DrMario - Пятница, 18.08.2017, 10:30
 
Andrej Дата: Пятница, 25.08.2017, 19:15 | Сообщение # 156
Лейтенант
Группа: Проверенные
Сообщений: 84
Награды: 1
Репутация: 1
Статус: Offline
Ясно, спасибо. Тогда жду шнурок. Сегодня получил сообщение что прошел таможню.

Добавлено (22.08.2017, 10:08)
---------------------------------------------
Кстати да. Вы были правы. Попробовал с галлетой, ничего не вышло. Даже не отзывается. Там надо скорее всего драйвера, а rx-tx с нее взять нет возможности. Там чип хитрый.

Добавлено (24.08.2017, 12:59)
---------------------------------------------
Пришел шнурок, но там не PIC контроллер, а какая то Icar 01. Даташит особо не искал, решил не заморачиваться и снять с FT232 на входе


Сообщение отредактировал Andrej - Пятница, 25.08.2017, 19:28
 
Andrej Дата: Пятница, 01.09.2017, 17:59 | Сообщение # 157
Лейтенант
Группа: Проверенные
Сообщений: 84
Награды: 1
Репутация: 1
Статус: Offline
Я сдался. Не получается. Многие говорят что на этой не собрать, только код.

Сообщение отредактировал Andrej - Пятница, 01.09.2017, 18:00
 
DrMario Дата: Суббота, 02.09.2017, 05:39 | Сообщение # 158
Сержант
Группа: Проверенные
Сообщений: 51
Награды: 0
Репутация: 0
Статус: Offline
На базе простенькой ардуины управляемый интерфейс (по типу ELM-327) не сделать. Об этом я говорил с самого начала. У меня что-то подобное получилось сделать только на ардуине дуе, а это совсем другой контроллер.
Оставьте эту затею. На основе простенькой ардуины конечно можно выводить данные двигателя на дисплей, только нужно в качестве интерфейса использовать уже готовый адаптер ELM-327. Для этого по КОМ порту необходимо соединить ардуину и ELM-327 и управлять ей при помощи АТ команд.


Сообщение отредактировал DrMario - Суббота, 02.09.2017, 05:41
 
Andrej Дата: Суббота, 02.09.2017, 20:44 | Сообщение # 159
Лейтенант
Группа: Проверенные
Сообщений: 84
Награды: 1
Репутация: 1
Статус: Offline
Цитата DrMario ()
АТ команд.
А блоки есть для этого? Можете набросать одну плату отправки и приема как пример? Стас обещал подарить НС-05... 
Кстать он тоже говорил что не выйдет. А я все надеялся... Кстати он предположил что может выйти на МЕГЕ, но говорит что не на китайской. Говорит что на китайской такт срывается. Как думаете, он прав?
 
injener Дата: Суббота, 30.09.2017, 16:56 | Сообщение # 160
Лейтенант
Группа: Проверенные
Сообщений: 77
Награды: 0
Репутация: 0
Статус: Offline
Помогите, код 
Код
serout2 PORTC.6, speed, [$81,$10,$F1,$81,$03] //посылка в микас команды StartCommunication
в блок внедрить.
Написал так 

UART=1; //лог еденица на вих к-лайн 
delay(300); //пауза 300мс
UART=0; //лог ноль на вих к-лайн 
delay(25000); //пауза 25000 мкс, время TiniL 
UART=1; //лог еденица на вих к-лайн 
delay(24000); //пауза 24000 мкс 
а дальше идет код Код
Цитата
UART, speed, [$81,$10,$F1,$81,$03] //посылка в микас команды StartCommunication
 и на ней идет ошибка компиляции.
Пробовал по разному и все равно ошибка. Выход у меня UART обзывается.

Добавлено (30.09.2017, 16:56)
---------------------------------------------
Купил Андрюхе леонардо, вот пытаемся два неуча что то сообразить... Самому интересно что получится...


Цитата
DrMario
Блок не для KWP Fool, а для KWP1 и соответственно он работать не будет. Протокол работы ДРУГОЙ!!! Нет там потдержки работы!


Сообщение отредактировал injener - Суббота, 30.09.2017, 16:52
 
rw6cm Дата: Воскресенье, 01.10.2017, 01:31 | Сообщение # 161
Генерал-лейтенант
Группа: Проверенные
Сообщений: 958
Награды: 85
Репутация: 68
Статус: Offline
Цитата injener ()
Пробовал по разному и все равно ошибка.
Может все же delay(25); а не delay(25000); smile
Но а код должен быть как то так:
char bytes[]= {129,241,16,129,03,0};
Serial.write(bytes);
Скорость вроде как 38400
Serial.begin(38400);
Но не факт что прокатит.


Win7-32, FLProg (portable)

Сообщение отредактировал rw6cm - Воскресенье, 01.10.2017, 01:39
 
injener Дата: Воскресенье, 01.10.2017, 13:01 | Сообщение # 162
Лейтенант
Группа: Проверенные
Сообщений: 77
Награды: 0
Репутация: 0
Статус: Offline
Цитата rw6cm ()
Может все же delay(25); а не delay(25000);
Эт я поправил, просто тупо скопировал не подумавши...  smile

Добавлено (01.10.2017, 07:52)
---------------------------------------------

Цитата rw6cm ()
Скорость вроде как 38400
Не, скорость 10400. Я работаю на прямую с протоколом.

Добавлено (01.10.2017, 13:01)
---------------------------------------------
delay(300); //пауза 300мс
UART=1; //лог еденица на вых к-лайн 
delay(300); //пауза 300мс
UART=0; //лог ноль на вых к-лайн 
delay(25); //пауза 25 мкс, время TiniL 
UART=1; //лог еденица на вых к-лайн 
char bytes[] = {129, 17, 241,129,4};
Serial.print(bytes);
delay(300); //пауза 300мс
вот рабочая версия. 
теперь надо что бы по сигналу на EN повторяло это... 
if (EN > 0) {
delay(3000); //пауза 3000мс
UART=1; //лог еденица на вых к-лайн 
delay(300); //пауза 300мс
UART=0; //лог ноль на вых к-лайн 
delay(25); //пауза 25 мкс, время TiniL 
UART=1; //лог еденица на вых к-лайн 
char bytes[] = {129, 17, 241,129,4};
Serial.print(bytes);
delay(3000); //пауза 300мс
}
не прокатывает. хотя должно. что не так?

 
Dev1 Дата: Воскресенье, 01.10.2017, 13:09 | Сообщение # 163
Генерал-лейтенант
Группа: Проверенные
Сообщений: 636
Награды: 13
Репутация: 17
Статус: Offline
Цитата injener ()
delay(25); //пауза 25 мкс, время TiniL
 
Это 25 мили секунды.

Цитата injener ()
delay(3000); //пауза 300мс

Это 3 секунды.

delay()  delayMicroseconds()


Win7/10-64 FLProg v2.5.1 (Beta v2.5.4) external IDE 1.8.5

 
injener Дата: Воскресенье, 01.10.2017, 13:59 | Сообщение # 164
Лейтенант
Группа: Проверенные
Сообщений: 77
Награды: 0
Репутация: 0
Статус: Offline
Цитата Dev1 ()
Это 3 секунды.
со старого скопировал. не важно!

Добавлено (01.10.2017, 13:39)
---------------------------------------------
мне надо что бы код отработал при включении, а потом отрабатывал по сигналу на вход EN...

Добавлено (01.10.2017, 13:59)
---------------------------------------------

Цитата Dev1 ()
delay()  delayMicroseconds()
не подходит.
 
DrMario Дата: Воскресенье, 01.10.2017, 16:26 | Сообщение # 165
Сержант
Группа: Проверенные
Сообщений: 51
Награды: 0
Репутация: 0
Статус: Offline
Для инициализации (пробуждения ЭБУ) кроме временных интервалов замыкания К линии по всем правилам необходимо еще выдерживать межбайтный интервал. Особенно это должно учитываться на самом первом пакете. Иначе соединение может не наступить. Из документации интервал составляет Мин=5мс. Макс=20 мс.
Ардуина как и обычный порт выплюнет байты пачкой, в которой задержка между байтами будет минимальной.
Документашку к протоколу прилагаю. См. стр.7
Если уж кто и затеял сделать инициаизацию на простой ардуине, то результат рекомендую смотреть нормальным осциллографом прямо в К линии. Физический уровень лог. 0 не должен превышать 0,15В.
Прикрепления: 14230-2s.pdf(414Kb)


Сообщение отредактировал DrMario - Воскресенье, 01.10.2017, 16:32
 
Форум » Основной » Спросить у знатоков » ARDUINO в качестве бортового компьютера для автомобиля. (ARDUINO в качестве бортового компьютера для автомобиля)
Страница 11 из 12«129101112»
Поиск:

FLProg © 2017
Яндекс.Метрика