Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Бортовой комп через K-line....


Бортовой комп через K-line....

Сообщений 1 страница 30 из 47

1

Просматривая форум что-то не натолкнулся на применения avr в автомобилях....
тема весьма интересна и муссируется во всем инЭте
реальных схем ,прошивок нет ....
Если кому интересно могу выложить понятное описание протокола KWP2000( Диагностика - ВАЗы,ГАЗы,некоторые иномарки )
Все что в инэте предлагается только за Бабло......     :smoke:
протокол достаточно простой , но понятного описания  нет , могу изложить "на пальцах"...( Баскомом люблю  ... ;))))) )

Отредактировано WADIM (2010-03-18 06:13:28)

0

2

Mrshilov написал(а):

Подключаемся к любому покету

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

0

3

Выкладывайте конечно, интересы же у всех очень разные!

0

4

Протокол kwp2000
Сия методика опробована на личном авто "Калина"
использовался k-line адаптер от мастеркита ВМ9213 и стандартные дрова от ftdi(usb-com)

ЭБУ m73 "Ителма"-блок управления двигателем
bosh m7.9.7 и многие другие то-же используют этот  диагностический протокол

итак kwp2000- работает на нестандартной скорости обмена BaudRate = 10400!
зачем эт сделано, не знаю,можете спросить у производителей авто =)
Обмен БК (бортового компьютера ,ноутбука AVR-контроллера и проч.) начинается так см картинку
                                                                           
                                                                                                             startCommunication БК        startCommunication ЭБУ

__________>300mC___________ <------25mC------------><-------25mc--------->            _______________               ___
                                                  |____________________|                               |||||||||||                        |||||||||||||

                                          Интервары 25мС с точностью +-1мс !

После подключения к диагностической линии (у меня раз'ем ODB-II) надо выждать не менее 0.3 сек
потом подать "0"-на 25мС потом "1"-на 25мС и тут-же (+-1мС) такую посылку HEX кодов ----> 81 10 f1 81 03
которая означает СООБЩЕНИЕ начала соединения с ЭБУ "startCommunication".

Эбу в ответ присылает свое СООБЩЕНИЕ (у меня такое)---> 83 f1 10 c1 6b 8f 3f -называется положительный ответ

Дальше можно передавать любые другие запросы на эБУ, ПРЕДУСМОТРЕННЫЕ ПРОТОКОЛОМ kwp2000
есть описание на русском , но оч путное по началу

вот здесь:[url= --[/url] http://avto-chiptuning.siteedit.ru/page4
----------------------------------------------------------------------------------------------------------------------------
Немного о структуре  СООБЩЕНИЯ

1. Структура сообщения.

Структура сообщения, в общем виде, состоит из трех частей:

      ->81 10 f1 81 03

       1) заголовок (Header);                           | 2) байты данных (Data bytes);          | 3) контрольная сумма (Checksum).
посылает БК ----> 81(Fmt) 10(Tgt) f1(Src)      |81- startCommunication(от БК)            | 81h+10h+f1h+81h=(203h)-берем 2 мл разряда 03h
                                                                    |                                                         |     
-----------------------------------------------------------------------------------------------------------------------------             

      <-83 f1 10 c1 6b 8f 3f

       1) заголовок (Header);                          | 2) байты данных (Data bytes);              | 3) контрольная сумма (Checksum).
посылает ЭБУ----> 83(Fmt) f1(Tgt) 10(Src)    |C1-startCommunication (от ЭБУ) 6b 8f    | 83h+f1h+10h+c1h+83h+6bh+8fh = (33f) 3Fh 
                                             |                                        |                         
---------------------------------------------------------------------------------------------------------------------------------

в первом случае заголовок сообщения состоит из 3-х байт
в случае если сообщение длинное, то заголовок из 4-х байт

К примеру:

БК ЗАПРАШИВАЕТ :        ЭБУ индентификатор(типа для какой машины ,версия прошивки....и т.д. ) -->readEcuIdentification

       ->82 10 f1 1a 80 1d  у этого сообщения() заголовок из 3х-байт
                       ^
                        |-"readEcuIdentification" (1A)

ЭБУ отвечает   :
                            у этого сообщения() заголовок из 4х-байт ,
                            четвертый байт в заголовке-длинна сообщения

       ->80 f1 10 61........(61h-ДЛИННА)................
         5a - ( "readEcuIdentification" -oт ЭБУ)........
         80 ff ff ff ff ................................                          ‚.n.€.€n.aZ€yyyy
         ff ff ff ff ff ff ff ff ff ff ff ff ff 32 31 31                          yyyyyyyyyyyyy211
         31 34 2d 31 34 31 31 30 32 30 2d 34 32 4e 4f 54 14-1411020-42NOT
         53 55 50 50 4f 52 54 4e 4f 54 53 55 50 50 4f 52         SUPPORTNOTSUPPOR
         54 43 41 4c 49 4e 41 2d 31 2e 36 4c 2c 20 38 56 TCALINA-1.6L, 8V
         ff ff ff ff ff ff ff 30 31 2d 31 30 2d 32 30 30            yyyyyyy01-10-200
         38 49 33 30 33 43 45 30 35 20 20 94                      8I303CE05  ”

Отредактировано WADIM (2010-03-19 22:30:02)

0

5

Примеры запросов(Сообщения от БК)

82 10 F1 21 01 A5 - Диагностика

84 10 F1 18 00 00 00 9D - Ошибки
83 10 F1 14 00 00 98 - сброс ошибок

82 10 F1 21 03 A7 - АЦП

Управление:
85 10 F1 30 0A 01 00 00 C1 - реле вентилятора (вкл\выкл)
85 10 F1 30 0C 01 00 00 C3 - лампа диагностики  (вкл\выкл)
85 10 F1 30 09 01 00 00 C0 - Топливное реле-осторожно!

Отредактировано WADIM (2010-03-19 22:33:22)

0

6

А по кан-шине есть что-нибудь интересное?

0

7

WADIM, а как вы расшифровываете содержание поля данных сообщения для идентификатора RLI_ASS? По ссылке приведен пример для Января 5, а в Калине другой ЭБУ.

0

8

Mrshilov написал(а):

Журнал "Радиоаматор" №7-8 2010г. - описание и схема ВМ9213USB.

Я вот таким пользуюсь .
http://lanos.com.ua/forum/uploads/1295971883/gallery_13656_1979_4793.jpg

0

9

Сбросьте пожалуста кусок кода с обменом. Не пойму как передать в линию и вывести принятые данные на ЖКИ...

0

10

Всем привет!
Попутно вопрос:
А как

WADIM написал(а):

85 10 F1 30 0A 01 00 00 C1

Отправить в UART?

0

11

printbin-ом)

0

12

В бинарном коде или hex()? побайтно или строкой?
Приобрел по случаю TJA1020 - хочу поиграться с LIN - шиной.
Printbin &H85; &H10; &HF1; &H30; &H0A; &H01; &H00; &H00; &HC1 ?

Отредактировано demonizer (2012-04-17 15:39:22)

0

13

можно так, можно массивом...

0

14

Массивом через цикл?

0

15

Вначале создаешь массив, а потом одной командой выводишь <Printbin #1 , M(1)>.

+1

16

Спасибо! Вечером попробую
Я так понимаю, что всю посылку отправляю в UART, &H85; &H10; &HF1; &H30; &H0A; &H01; &H00; &H00; &HC1
В ней первый байт &H85, допустим, идентификатор,  следующие 7 байт - данные, &H10; &HF1; &H30; &H0A; &H01; &H00; &H00, а последний  &HC1 - контрольная сумма?

Отредактировано demonizer (2012-04-17 16:12:38)

0

17

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

0

18

Попутно дилетантский вопрос.
Как ЭТО отразить в виде посылки?
http://uploads.ru/t/j/Q/6/jQ6gu.jpg

Ptintbin &H55; &H11; &H60; &H10; &H8F?

или так:

Код:
Ptintbin &H55;
waitus XX
Ptintbin &H11;
waitus XX
Ptintbin &H60;
waitus XX
Ptintbin &H10;
waitus XX
Ptintbin &H8F

Отредактировано demonizer (2012-04-17 17:47:12)

0

19

А там какой протокол вообще, стандартный 10 бит в общей массе (старт/стоп биты)?

0

20

Протокол LIN 1.3
Управлять пытаюсь вот таким девайсом
Описание команд
Еще даташит

Отредактировано demonizer (2012-04-17 18:44:08)

0

21

WADIM, если можно то неплохо было бы рассказать про временные задержки Р1-Р4 и объяснить как с ними работать. Есть задумка написать софт для Андроид устройств и к-линию(конкретно для авто Опель, пока). Соединяюсь с авто через ELM327 блютуз. KWP2000 протокол обмена, но инфы понятной по нему так и не нашёл(с примерами).

0

22

WADIM написал(а):

Протокол kwp2000
Сия методика опробована на личном авто "Калина"
использовался k-line адаптер от мастеркита ВМ9213 и стандартные дрова от ftdi(usb-com)

если можете помочь новичку, у меня на эту тему есть пара вопросов... у меня таз-2110 с мозгами BOSH 1.5.4, тот же KWP Только поменьше вопросов/ответов...

WADIM написал(а):

Обмен БК (бортового компьютера ,ноутбука AVR-контроллера и проч.) начинается так см картинку
                                                                           
                                                                                                             startCommunication БК        startCommunication ЭБУ

__________>300mC___________ <------25mC------------><-------25mc--------->            _______________               ___
                                                  |____________________|                               |||||||||||                        |||||||||||||

                                          Интервары 25мС с точностью +-1мс !

После подключения к диагностической линии (у меня раз'ем ODB-II) надо выждать не менее 0.3 сек
потом подать "0"-на 25мС потом "1"-на 25мС и тут-же (+-1мС) такую посылку HEX кодов ----> 81 10 f1 81 03
которая означает СООБЩЕНИЕ начала соединения с ЭБУ "startCommunication".

Эбу в ответ присылает свое СООБЩЕНИЕ (у меня такое)---> 83 f1 10 c1 6b 8f 3f -называется положительный ответ


исходя из этого, как я понял, если думать что у нас RX это PORTА.0, а ТХ это PORTА.1, нужно скомандовать следующее:
porta.1 = 1
waitms 300
porta.1 = 0
waitms 25
porta.1 = 0
waitms 25

а потом по настроенному в баскоме COM порту
Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0

скомандовать словами:
Printbin &H81
Printbin &H10
Printbin &HF1
Printbin &H81
Printbin &H03

чтобы передать 8110F181030D - Запрос startCommunication?

потом внимать из этого порта ответа inputbin'ом "83 F1 10 C1 6B 8F 3F", что мол начало связи положено, можно клянчить запросы по даташиту KWP2000? я правильно понимаю? а то я с UARTом чувствую себя валенком :)

собственно вопросы:
1. в конце команды надо посылать &H0D, конец посылки? в ответах от ЭБУ в конце есть этот самый &H0D (который 13), или конец ответа отлавливать своими силами, по длинне заголовка и по длинне сообщения указаной в заголовке ответа, а не по &H0D?
2. 25мс это время когда ждать ответ после запроса, или я вообще это дело не так понял, и ответа ждать когда придёт?
3. можно ли пренебречь потдсчётом контрольных сумм, или ошибки часто сыпятся, и лучше пересчитывать что пришло?
4.ну и самый наглый вопрос :) если не жалко кусочек вашего исходника, с отправкой и ожиданием ответа, чтобы принцип понять что к чему, если конечно я не дофига требую :)

Отредактировано phantom36 (2013-02-12 14:00:50)

0

23

Вобщем, кому интересно:

$regfile = "m32def.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 16
$framesize = 32
$baud = 10400     ' извращенцы зачем-то придумали 10400, видать 9600 не православно...
Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0

Config Serialout = Buffered , Size = 128  ' чёрт его знает почему Buffered, взял из примера, заработало, пока не разбирался надо или нет...
Config Serialin = Buffered , Size = 128 ' аналогично

' это посылка импульсов перед стартом
Portd.1 = 1
Waitms 300
Portd.1 = 0
Waitms 25
Portd.1 = 1
Waitms 25
Portd.1 = 0

' это посылка KWP2000 "Здравствуйте"
Printbin &H81
Printbin &H10
Printbin &HF1
Printbin &H81
Printbin &H03
' Printbin &H0D  ' 0D - 13, символ "конец строки", вскрытие показало что он в конце посылки нафиг не нужен

дальше сразу после посылки Inputbin'ом собираем 128 байт ответа, пакость состоит в эхо, например вы посылаете "H0H0H0", в ответ эбу вам должен сказать "F0F0F0", в ответ вы получаете от ЭБУ "H0H0H0F0F0F0", от этого ответа нужно в начале отпилить запрос "H0H0H0", и сложить полученное после эхо в нужную вам переменную. щас поиграюсь немного, и сделаю SUBы для работы с KWP2000 ISO 14230 - 3 для тазиков Россия-83 и Евро-2, ибо у меня Евро-2, хохоряшки от Евро-3 мне даром не улыбались :)

работает с мозгами bosch 1.5.4, Я5.1 через адски дорогой и сложный "адаптер"  (нагло срисованный у Шапкина Дмитрия Александровича (shapkin85@bk.ru)) на одном сдвоенном компараторе, и кучке резюков. диод для красоты. МК работает от внутреннего генератора на 8мГц, что меня удивило, со связью проблем нет...

http://s3.uploads.ru/t/9tEjm.jpg

Отредактировано phantom36 (2013-02-12 19:08:44)

+1

24

граждане, кому-нибудь интересно вообще, или не стоит корячиться?..

0

25

Конечно интересно, давайте в виде статьи оформим. Чтобы не затерялась в темах

0

26

Ну как успехи очень интересная тема,есть ли уже статья?

0

27

У меня немного другая задумка, так сказать обратная - для готового БК сэмулировать "мозги". Много не нужно, нужно передать в БК температуру двигателя, обороты, длительность впрыска (это еще нужно как то придумать как снять с тракторной форсунки) и "скорость" в виде импульсов на километр.
Есть мысль на катер приспособить серийный недорогой БК, у которого уже есть куча математики, предупреждения по оборотам и температуре, матричный экран и т.д.
На катере установлен  дизель от трактора, соотвественно параметры нужно снимать и переводить в понятные, вот здесь AVR самое то.

0

28

а для пыжиков есть информация кодов обмена? читал, там вроде несколько уровней доступа имеется (регулируется сопротивлением нагрузки устройства)

Отредактировано RDW (2013-06-03 14:44:27)

0

29

Всем привет, надеюсь тема еще актуальна и ее не забросили.

Меня посетила мысль собрать подобие тахометра на базе atmega8 , принимать параметры с ЭБУ на atmega8 обрабатывать ответ ЭБУ и выводить результат на семи сегментный индикатор.

Есть несколько вопросов

-1-
А) после того как я получил положительный ответ:
83 F1 10 C1 6B 8F 3F
Б) и запросил параметры:
82 10 F1 21 01 A5
В) ЭБУ мне ответил:
80 F1 10 26 61 01 3B 90 41 04 00 00 00 00 47 80 00 00 00 52 52 80 18 00 8E 00 5C 00 00 00 00 00 00 00 00 00 FF FF DD A4 47 02 CE
Г) из нужного бита вытащил информацию о скорости вращения коленвала
Д) вывел ее на семи сегментный индикатор
Е) ВОПРОС !!!! мне снова нужно запросить параметры (82 10 F1 21 01 A5) или ЭБУ так и будет постоянно отвечать пока я не запрошу что-то другое???

-2-
В BASCOMе для проверки пишу :

$regfile = "m8def.dat"
$crystal = 4000000
$baud = 9600                                               
$hwstack = 32                                     
$swstack = 8                                       
$framesize = 24
Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0

Config Serialout = Buffered , Size = 128 
Config Serialin = Buffered , Size = 128

Printbin &H81
Printbin &H10
Printbin &HF1
Printbin &H81
Printbin &H03

Сохраняюсь(ctrl+s)->компилируюсь(F7)->запускаюсь(F2)
И наблюдаю в симуляции вот такую абракадабру
Ѓ сЃ 

Ведь по логике вещей должно было быть
81 10 F1 ………….. и.т.д.
Почему появляется абракадабра???
$baud = 9600 выставлен в 9600 по причине того , что в баскоме нельзя выставить 10400 или если можно то подскажите как это сделать???

-3-
Посему в Config Com=1 почему именно 1   ???

0

30

Почему нельзя использовать Print ?

например:
Print "82 10 F1 21 01 A5"

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Бортовой комп через K-line....