Собственно вопрос вот в чём, подключил ардуинку к машине по схеме (см. ниже)

Из описания протокола kwp2000, понял как происходит инициализация и обмен командами, написал скетч, но ничего не получилось.
Как я понял проблем две:
1. В протоколе написано что нужно на определённое время перед инициализацией послать логическую единицу и логический ноль, но как в режиме serialPort на 1 и 2 пинах (tx и rx) просто передать "1" и "0"
2. Когда я передаю значения в HEX то они передаются по одному, т.е. так
0x81
0x10
0xF1
0x82
0x04
0xF0
Но все программы диагностики при перехвате выдают, что передача идёт разом всей строки, т.е.
8110F18204F0
Как организовать передачу разом ?
Мне кажется в этих 2-х вопросах и скрывается проблема.
Продолжение www.drive2.ru/communities/941/forum/9172571


Комментарии 50
Добрый день. Мучаюсь с подобной проблемой, но пока только нужно полное описание протокола обмена данными с блоком ECU Mercedes-Benz A 0125454532[06] Bosch 0281001138 DS0006 12V 6Zyl. Vehicle Applicability:
(1991-1996) устанавливался на дизельные автомобили с 1991 по 1995 год.
Если есть информация по протоколу на эти блоки, может поделитесь? Буду очень признателен. zsi_uk@mail.ru
Не разу не сталкивался с этим блоком, можно найти диагностическую программу, и попытаться перехватить данные во время соединения и запросов. Я так делал в принципе.
Вы пишите: "Из описания протокола kwp2000, понял как происходит инициализация и обмен командами" протокол на моем блоке, как утверждают профи, такой же. Хотелось посмотреть на описание этого протокола.
chiptuner.ru/download/docs/kwp2000r.zip (www.chiptuner.ru/content/docs/ ) Вот, то что я использовал, но опять же, там описания команд ВАЗа, т.е. сам протокол может быть и такой же, а вот данные (соединение, запросы ошибок, ответы и т.д.) скорее всего другие
Спасибо, по изучаю. если возникнут вопросы могу обращаться?
Конечно обращайтесь )
Прошло куча времени, я немного сдвинулся с мёртвой точки, у меня получилось подцепиться к блоку M74 ИТЕЛМА. Прошла инициализация, получилось выцепить данные. Но вот к блокам M73 АВТЕЛ, Январь 7.2 и Январь 7.2+ не цепляется, не проходит инициализация. Вот скетч, если кому интересно смотрите. Но сразу говорю, я там так нагородил ))) yadi.sk/d/4OE81LkzjNsoW Если кто что знает, подскажите, что не так, нужно только подключиться к Январям, остальное особо не волнует.
Я смотрю тема то ещё актуальна =)
Господа здесь собравшиеся, а вы не могли бы переместиться в форум?
Или не сносить пока эту запись?
Не сноси пока денька 2 наверно ) Завтра заберу с почты ардуинку новую (старая уже в другом проекте). Попробую кое что, отпишу о результатах. Не будет интересно, снесём тут, пересоздам на форуме )
хорошо
superpuper8
Я смотрю тема то ещё актуальна =)
Господа здесь собравшиеся, а вы не могли бы переместиться в форум?
Или не сносить пока эту запись?
Помогите, пожалуйста, найти эту тему в форуме.
Я читал что-то такое. За точную передачу не ручаюсь, но!
"Ардруино для к-лайн не подходит, ибо он пропускает первую цифру строки и поэтому не берет строку целиком".
Как-то так.
ммм, я видел рабочие экземпляры ардуино+к-лайн, но вот заточены они были под ино протоколы…
А, ну может быть дисительно не на прямую, а через микруху какую-то. Я тут посмотрел шилда CAN стоит 1000 рублей буквально.
arristo
Я читал что-то такое. За точную передачу не ручаюсь, но!
"Ардруино для к-лайн не подходит, ибо он пропускает первую цифру строки и поэтому не берет строку целиком".
Как-то так.
"…ибо он пропускает первую цифру строки и поэтому не берет строку целиком" — это как? ;)
хз. я процитировал.
))
просто "ардуина" сама по себе ничего пропускать не может… а вот FW, который на нее залили — запросто…
интерфейс k-line сам по себе не сложный, а протоколы стандартизированы. Просто есть k-line, работающий с l-line (ISO9141) а есть двунаправленная k-line (ISO14230). в первом случае по L запрос — по K — ответ. Во втором случае запрос и ответ по одной и той-же K.
Я как бы догадываюсь, что к-лайн штука не сложная. Сам я ничего не пробовал, однако как программер вполне себе представляю всю реализацию. Вопрос в деталях и проколе. Опять-таки CAN-шилды все-таки на микрухе собраны, они же, наверное, преобразовывают что-то в чего-то?
угу… в основном уровни и методы передачи импульсов. CAN по электрической реализации близок к 485. Только протокол доработан в плане коррекции ошибок и возможностей арбитража.
По реализации работы с K-Line на ардуине можно посмотреть здесь: Пример работы Arduino с K-Line
На английском, но там много картинок )
Спасибо, почитаю. А сами что-то клепали на Ардуино? И что?
я ее только как отладку да поиграться использую. Под конкретные проекты уже идут переразведенные платы. Ардуино удобна только для быстрого прототипирования. Слишком громоздкий код получается на выходе. Конечно, можно для простых вещей и ее использовать, но только для опытных образцов. ИМХО.
да наплевать, лишь бы проц успевал отрабатывать. На край можно запихнуть поток на карту, а потом уже с карты обрабатывать.
?
Alex6280
угу… в основном уровни и методы передачи импульсов. CAN по электрической реализации близок к 485. Только протокол доработан в плане коррекции ошибок и возможностей арбитража.
По реализации работы с K-Line на ардуине можно посмотреть здесь: Пример работы Arduino с K-Line
На английском, но там много картинок )
Самое интересное, все все шилды, кроме ком-порта есть)))
в смысле полный RS232? или UART с RS232 уровнями сигнала?
На картинке которые)) Я не пробовал писать или делать. Закупил просто все, что могло понадобится на это дело, кроме ком-портов, эзернета и жсм. Радио есть. И 2 платы друины — посложнее и попроще.
А потом забил — проблема решилась. Теперь вот думаю заняться после решения текущей проблемы. В помощь, так сказать. А с к-лайн брать вспомогательные сигналы, а не расшифровывать поток. Типа "двигло заработало", "включился кондей" и т.п.
есть сторонние шилды
www.linksprite.com/wiki/i…=RS232_Shield_for_Arduino
так я и купил сторонние))
arristo
На картинке которые)) Я не пробовал писать или делать. Закупил просто все, что могло понадобится на это дело, кроме ком-портов, эзернета и жсм. Радио есть. И 2 платы друины — посложнее и попроще.
А потом забил — проблема решилась. Теперь вот думаю заняться после решения текущей проблемы. В помощь, так сказать. А с к-лайн брать вспомогательные сигналы, а не расшифровывать поток. Типа "двигло заработало", "включился кондей" и т.п.
а не проще ли это напрямую с датчиков считывать? например, с датчика давления масла :-/
у меня в БЖ где т есть ема "сигналы для ардуино" вроде, как раз об этом =)
Так у меня механически уже сделано)) Включение ДХО и горна с датчика масла на 3=х реле и диоде.
Но хочется централизовано с к-лайн, и обрабатывать все — дворники, ДХО, горны, может быть автосвет еще что-то. Может и сигналку с доводчиком стекол.
я не про то. :-/
гляньте тут как считываются сигналы на мега-ардуинку
БЕЗ РЕЛЕ! )))) и НЕ механически ;)
А смысл? Если можно сделать механически, зачем задействовать микроконтроллер? Я не говорю о цене, я говорю о простоте. Зачем делать мега-сложно, когда можно сделать очень-просто?
Вопрос не в том, чтобы подключить ДХО. Вопрос в том, чтобы сделать микрокомп, обслуживающий другие функции, беря сигнал (или подавая его) при помощи к-лайн.
Опять не то. Чувак просто сдублировал приборку на планшет. На Калине уже есть ЭБУ. Не надо дублировать. Надо просто снять данные.
В дальнейшем все вопросы в форум. Данную тему удалю в течение суток.
Ну что же ) Хорошо, буду знать!
Я мучался и не смог запустить а чере ELM327 сразу заработало… интересно получится ли у вас!
ЕЛМка это конечно хорошо, но для моих целей вряд ли подойдёт.
и для моих не особо подходил, но с 33290 у меня вообще глухо.
если заработает то в своем проекте тоже применю…
а кто знает как её проверить на работоспособность?
я проверял так, записал пустой скетч, поменял tx, rx местами, и подключил ардуинку к к компу, запустил прогу для диагностики (опендиаг). Она соединилась, значит работает.
не понял сути проверки.
Ну смотри, в ардуинку записываешь пустой скетч. Далее делаешь подключение к ардуинке как на картинке у меня (b-a.d-cd.net/f89e82s-960.jpg) только подключаешь tx и rx наоборот. Потом ардуинку к компу через ЮСБ. Открываешь прогу для диагностики, выбираешь там порт на котором повисла ардуинка, дальше соединяешся (как будто блок подключен через k-line адаптер). Если она соединилась с ЭБУ, значит 33290 рабочая.
Соедени просто RХ и ТХ и твоя прога покажет что адаптер якобы рабочий.
Но это совершенно не значит что 33290 целая. Просто в ней внутри RХ и ТХ соединяются в одну линию ( k-line ведь однопроводная линия) поэтому и адаптеры просто шлют запрос и видя что он вернулся обратно делают вывод о работоспособности…
Я думал как-то грамотноее можно проверить именно целостность самих входных цепей MC33290…
Dobrinia
и для моих не особо подходил, но с 33290 у меня вообще глухо.
если заработает то в своем проекте тоже применю…
а кто знает как её проверить на работоспособность?
Ай-ай-ай… а даташит почитать? На первой же странице схема включения для проверки…
33290 PDF
передавай строку, а не последовательность байтов. Ты, случаем, не .println() используешь для каждой передачи байта? ;)
для каждой ((( по другому не умею пока, вот так передаю типа Serial.write(0x81);
Вам для начала надо разобраться как осуществляется передача и что из себя представляют данные. "Строка" и HEX-данные это разные вещи! Все данные передаются в 8-битном разрешении последовательно. А уже после конвертации в значения типа char можем определить строку.
Смотрите ASCII-таблицу.
ммм, а можете показать на примере.
"Но все программы диагностики при перехвате выдают, что передача идёт разом всей строки, т.е.
8110F18204F0"
ЭТО НЕ СТРОКА! это последовательность данных. Вам данные надо передавать или именно строку?
Serial.print("123"); — отправит строку состоящую из последовательных данных
Serial.println("123"); — отправит тоже самое, только в конце добавит строку "\r\n"
Serial.print(255); — отправит 0xFF, точно так же как вы отправляете Serial.write(0xFF);
А вот Serial.print(256); — отправит уже 2 байта данных, таким же образом как вы можете сделать это отправив последовательно Serial.write(0xFF); Serial.write(0x01);
DenisFPV
Вам для начала надо разобраться как осуществляется передача и что из себя представляют данные. "Строка" и HEX-данные это разные вещи! Все данные передаются в 8-битном разрешении последовательно. А уже после конвертации в значения типа char можем определить строку.
Смотрите ASCII-таблицу.
Да даже таблицы не надо, сделал массив char, загнал в него все байты, и .print(…) или .println(…)
Так, если одно и то же значит должно работать, осталось понять как 25 мс сделать единицу, потом 25 мс сделать ноль.
Пример работы Arduino с K-Line
На английском, но там много картинок ) Конкретно — стр. 11-14