вот рабочий эмулятор для проги опком которая к-лайн. Адаптер должен быть подключен на 10, 11 пин ардуино. Второй адаптер нужен юсб К-лайн (подключаем к проге опком). Соединяем к-лайны. Подключение идёт. Дата стрим тоже. Там можно определить какой байт за что отвечает, отправляя с ком порта (нужно только поставить в настройках 115200 и нет конца строки) символ "+", при этом будет изменяться значение байта №10, и смотрим что в датастриме меняется. Следующий байт выбирается отправкой символа "a". Отправка символа "b" возвращает опять к байту №10.
Скорость 9600 выставить в настройке виртуального com порта для usb-k.line для программы op-com? На следующей неделе будет Arduino nano(для экспериментов), еще через неделю - op-com адаптер. До того времени сделаю пару k-line адаптеров.
Скорость 9600 выставить в настройке виртуального com порта для usb-k.line для программы op-com?
Не получится. во первых, как раз нужна скорость не 9600 а 10400, она нестандартная, её в настройка порта не выставишь. А во вторых настройки порта роли не играют, т.к. эти настройки выставляет сама программа опком и не важно какие настройки в порту.
Мой нынешний k-line адаптер напоминает набор ВМ9213, только микросхема в другом корпусе, порога op-com категорически отказывается устанавливать связь с авто(на других машинах и программах все ок), можно ли для моих целей рспользовать какую нибудь программу терминал для клайн, или терминал для elm327, или какую другую прогу? Если без вариантов, то сижу пока на попе ровно, жду op-com и остальные железки, курю теорию...
Молодцом мужики. Вы прошли непростой путь и написали не один километр кода, пока все довели до ума. Хочу сделать тоже самое только с протоколом ISO 9141-2 для VW до 2000г. Прочитал не мало инфы но ничего не получается, вот и прошу помощи. Имеется MC33290, спаял её мне товарищ вот по такой схеме:
Скачал библиотеку SoftwareSerial. В файле SoftwareSerial.cpp где F_CPU == 16000000 добавил строку
{ 10400, 106, 218, 218, 215, }
Использую на данный момент Arduino UNO(но есть у меня и PRO MINI). Естественно она отображается как COM-порт. Вот для начала начал, я так понимаю, сея схема должна работать как K-line адаптер. Закидываю этот кусок кода и потом открываю программу VAGCOM311.2RUS_2006. Когда провожу тест com-порта, то сей прибомбас находит, но в всплывающем окне пишет что происхождение шнурка "сомнительно". Где кнопка ТЕСТ а этой программе есть еще кнопка теста для светодиодов, когда нажимаю на её светодиоды TX и RX поргают по очереди(проходят тест). Был бывам признателен за подсказки куда копать.
#include <SoftwareSerial.h>
SoftwareSerial mySerial(0,1); // RX, TX
void setup()
{
// Инициализируем последовательный интерфейс и ждем открытия порта:
Serial.begin(9600);
//while (!Serial){}
Serial.println("Goodnight moon!");
// устанавливаем скорость передачи данных для последовательного порта, созданного
// библиотекой SoftwareSerial
mySerial.begin(9600);
mySerial.println("Hello, !!!!!");
}
void loop() // выполняется циклически
{
if (mySerial.available())
Serial.write(mySerial.read());
if (Serial.available())
mySerial.write(Serial.read());
}
у вас микросхема к-лайн подключена к ардуино к пинам 0 и 1 , а эти пины являются аппаратным Serial соединением (аппартаный UART) . Вы же в скетче пытаетесь на эти пины ещё приболтать программное сериал соединение (программный UART, который и используется когда не хватает аппартаных, но естественно это делается на другие пины - НЕ 0 и 1).
Строго говоря, по вашей схеме, чтобы работало как обычный к-лайн адаптер, вообще можно никакой скетч не заливать. Просто замкните RST ардуино на GND и поидее (я не проверял) данные от к-лайн (и далее на пины 0 и 1 ) будут проходить "насквозь" в юсб (ну тоесть в виртуальный ком порт). Микроконтроллер при этом не задействован. Т.е. по сути ардуина станет обычным переходником USB<->UART, а точнее USB<->UART<->K-line
у вас микросхема к-лайн подключена к ардуино к пинам 0 и 1 , а эти пины являются аппаратным Serial соединением (аппартаный UART) . Вы же в скетче пытаетесь на эти пины ещё приболтать программное сериал соединение (программный UART, который и используется когда не хватает аппартаных, но естественно это делается на другие пины - НЕ 0 и 1).
Строго говоря, по вашей схеме, чтобы работало как обычный к-лайн адаптер, вообще можно никакой скетч не заливать. Просто замкните RST ардуино на GND и поидее (я не проверял) данные от к-лайн (и далее на пины 0 и 1 ) будут проходить "насквозь" в юсб (ну тоесть в виртуальный ком порт). Микроконтроллер при этом не задействован. Т.е. по сути ардуина станет обычным переходником USB<->UART, а точнее USB<->UART<->K-line
Вот попробовал, как вы сказали..А именно: закинул пустой скетч, тогда при тестировании пишет "Адаптер не обнаружен или не готов". Когда перемыкаю RST на GND по ходу ардуинка просто перегружается и зависает.У меня есть еще программатор ch341a на нем тоже есть RX TX. только он определяется не как com. Может дрова поискать другие..или может как нить в машину сразу запрос какой послать (правда я не знаю сам как это сделать)??? сдесь есть адреса для запросов:
Вот попробовал, как вы сказали..А именно: закинул пустой скетч..... Когда перемыкаю RST на GND по ходу ардуинка просто перегружается и зависает.
MaksVV пишет:
вообще можно никакой скетч не заливать. .... Микроконтроллер при этом не задействован.
taha17 пишет:
при тестировании пишет "Адаптер не обнаружен или не готов".
Просто для вашей программы возможно требуется не просто к-лайн адаптер, а с какими-нибудь ещё аппартаными примочками, с которыми бы данная программа определяла адаптер как "свой".
Вам нужно просто найти рабочую диагностику на свой авто. И просниффить её способом указанном выше
Вот попробовал, как вы сказали..А именно: закинул пустой скетч..... Когда перемыкаю RST на GND по ходу ардуинка просто перегружается и зависает.
MaksVV пишет:
вообще можно никакой скетч не заливать. .... Микроконтроллер при этом не задействован.
taha17 пишет:
при тестировании пишет "Адаптер не обнаружен или не готов".
Просто для вашей программы возможно требуется не просто к-лайн адаптер, а с какими-нибудь ещё аппартаными примочками, с которыми бы данная программа определяла адаптер как "свой".
Вам нужно просто найти рабочую диагностику на свой авто. И просниффить её способом указанном выше
Фиг с ней, с этой прогой. Подскажите как хотябы один запрос сделать через терминал и получить ответ. Дальше уже сам колдовать буду. Тут вот парни сделали как раз и протокол как у меня. только у их через блютуз:
То что вы привели по ссылке это просто диагностика авто при помощи универсального адаптера elm327. Т.е. всю «грязную» работу делает он. И в ардуино уже идут готовенькие данные. Таким путем проще идти. Дак берите и делайте как там написано, где проблема?
Если же идти путем соединения обычным к-лайн адаптером, то весь протокол нужно самому изучать. Для этого я и говорю вам нужна рабочая диагностика, хотябы при помощи того же елм.берете и подсматриваете байты. А так самое трудно блок разговорить, т.е инит пройти. А запросы то че, они стандартные
Не работает программа ОПКОМ-К-ЛАЙН с моей машиной....
в этой программе ОПКОМ, которая через к-лайн они ошиблись видать со скоростью. проснифил - реальный обмен от опкома идёт на 9600, хотя в окне программы вверху и написано 10400. Но байты отправляет не правильные если на 10400 щупать сниффером. На 9600 байты совпадают с такими какие должны быть. Из-за этого и не коннектится.
Нет, это не в программе ОПКОМ ошиблись, это я ошибся. Дело вот в чем.
Тут на днях нужно было задиагностировать старого опеля. адаптера ОПКОМ у меня не было. Но есть к-лайн адаптер на микросхеме Prolifiс PL-2303. Программа ОПКОМ, которая поддерживает К-лайн адаптер, естесственно не связазлась с авто (что мы уже знали по нашему опыту ранее и как я выяснил ранее связи нет из-за того, что скорость программа ОПКОМ должна устанавливать 10400 а в реале была 9600).
Но ошибка скорости не в программе ОПКОМ. А в драйверах чипа Prolific 2303, стандартный драйвер не знает скорости 10400 так как она не страндартная и выставляет итоговую 9600 - она и приходит уже на к-лайн адаптер и он в к-линию шлёт байты на 9600.
Нашёл драйвер который поддерживает скорость 10400. Но старый нормально удалить не смог, поэтому не работало. Взял другой ноут. Там поставил этот драйвер и о чудо, скорость стала 10400. Программа подключилась к автомобилю. Так что, кто будет ещё пробовать бортовой комп на опель собирать не обязательно ОПКОМ адаптер иметь, можно и к-лайн адаптером обойтись
Приветствую всех кто мучил весь этот проект :)
Перечитал все от корки до корки!
но видать где то завтыкал почему вы юзаете 2 сериал порта для приборки и для связи с ебу..
на одном никак не получается это реализовать?
ну и хотелось бы увидеть окончательную схему этого бк..!! :)
Привет, потому что все данные идут по 7 пину обд и один параметр вроде чтение и стирание ошибок по 12 пину. Схема проста, все подключи по описанию, там нечего рисовать.
Используется просто 2 адаптера, один для 7 другой для 12 линии. На каждом одна микрухе. Если не нужно читать ошибки то, реализует один адаптер и одну линию.
фиг там, судя с программы 1 линии мало,
так как 90% данных берется с 7 пина обд
а показания уровня топлива и пробег с приборки... тобишь с 12го пина
хотя это все должно б было и в ебу быть..
ну это я понял :) не блоки разные а контакты в ОБД разьеме..
для моторника идет 7 пин а для приборки 12тый..
вот и спрашивал почему не удалось подключится в паралель к 7 и 12 разьему ОБД.. :)
используя только 1 сериал порт ардуины ...
Все что есть в блоке мотора можешь с одним адаптером и одной линией, почитай что берётся со второй линии, если тебе не нужно..... Реализуй одну линию:)
ну это я понял :) не блоки разные а контакты в ОБД разьеме..
для моторника идет 7 пин а для приборки 12тый..
вот и спрашивал почему не удалось подключится в паралель к 7 и 12 разьему ОБД.. :)
используя только 1 сериал порт ардуины ...
в параллель это как интересно? Проблема в том, что пока вы общаетесь с одним блоком, с другим теряется связь, если не посылать ему сообщения присутствия. А чём, собственно, проблема использовать два сериал порта и два к-лайн адаптера? На LM393 будет стоить копейки и ждать из китая не нужно. Ищите поиском по форуму я выкладывал инфу по LM393. Также можно оба собрать сразу на одной микрухе LM339.
Приветсвую! Ох и занимательное чтиво намечается у меня на ближайшие пару дней. Называется, не было хлопот, да купила баба порося :) Собственно, машина Vectra B 1997 x16xel Multek-s KWP2000. Началось все с установки камеры заднего вида, и вот теперь захотелось избавиться от картины малевича и вывести что-то на экран во время движения. Сперва думал только часы да температуру. Это и стало моим первым скетчем к Ардуино. Поковырявшись пару дней, сделал чтоб устанавливались часики двумя стандартными кнопками. Затем думал подключаться к стандартным проводам, которые подходят к MID (сигнал расхода, сигнал скорости, сигнал оборотов) и тут на вашу тему наткнулся... Ну да ладно, похвастался и будет.
Первый вопрос у меня к Вам и, наверное, самый существенный - для чего у Вас используется библиотека Wire.h? Поясню - она не совместима с TV OUT, а вывод на другой экран мне не подходит, т.к. будет сложнее камеру подцепить, да под размеры штатного подобрать. Вот и хотел узнать - а без нее то работает, или даже не заморачиваться? Просто во многих примерах ее пихали "по дефолту", я от нее без проблем избавился.
Не работает программа ОПКОМ-К-ЛАЙН с моей машиной....
в этой программе ОПКОМ, которая через к-лайн они ошиблись видать со скоростью. проснифил - реальный обмен от опкома идёт на 9600, хотя в окне программы вверху и написано 10400. Но байты отправляет не правильные если на 10400 щупать сниффером. На 9600 байты совпадают с такими какие должны быть. Из-за этого и не коннектится.
Нет, это не в программе ОПКОМ ошиблись, это я ошибся. Дело вот в чем.
Тут на днях нужно было задиагностировать старого опеля. адаптера ОПКОМ у меня не было. Но есть к-лайн адаптер на микросхеме Prolifiс PL-2303. Программа ОПКОМ, которая поддерживает К-лайн адаптер, естесственно не связазлась с авто (что мы уже знали по нашему опыту ранее и как я выяснил ранее связи нет из-за того, что скорость программа ОПКОМ должна устанавливать 10400 а в реале была 9600).
Но ошибка скорости не в программе ОПКОМ. А в драйверах чипа Prolific 2303, стандартный драйвер не знает скорости 10400 так как она не страндартная и выставляет итоговую 9600 - она и приходит уже на к-лайн адаптер и он в к-линию шлёт байты на 9600.
Нашёл драйвер который поддерживает скорость 10400. Но старый нормально удалить не смог, поэтому не работало. Взял другой ноут. Там поставил этот драйвер и о чудо, скорость стала 10400. Программа подключилась к автомобилю. Так что, кто будет ещё пробовать бортовой комп на опель собирать не обязательно ОПКОМ адаптер иметь, можно и к-лайн адаптером обойтись
кстати лучше всего брать USB-UART переходник на FTDI, он хорошо работает на всех скоростях так сказать "из коробки" на своих стандартных драйверах. чуть позже выложу к-лайн шилд для этого переходника, а также к-лайн шилд для ардуино нано.
Это хорошо, библиотека ds3231 обходится без wire.h....
А подскажите, плиз, сколько памяти нужног для всего этого добра? В UNO влезет, если использовать TV-out? У меня простенькие часики мои заняли аж 51% памяти. (кстати у меня код не компилируется, я так понял все функции нужно переставлять до void(loop), иначе компилятор ругается на то, что они не декларированы.) Ну то я уже потом буду заниматься. интересно сколько кБ памяти он всего занимает. Возможно, придется заказывать и ждать Мега
Это хорошо, библиотека ds3231 обходится без wire.h....
А подскажите, плиз, сколько памяти нужног для всего этого добра? В UNO влезет, если использовать TV-out? У меня простенькие часики мои заняли аж 51% памяти. (кстати у меня код не компилируется, я так понял все функции нужно переставлять до void(loop), иначе компилятор ругается на то, что они не декларированы.) Ну то я уже потом буду заниматься. интересно сколько кБ памяти он всего занимает. Возможно, придется заказывать и ждать Мега
код писался давно. Сейчас опыта поднабралось, многое можно исправить/улучшить. Но мега полюбому нужна, если использовать экран как у ТС, или как у вас TV-out. Попробуйте скомпилировать для меги, в чем проблема.
Проблема в том, что не компилируется. Выдает кучу ошибок. Я не знаю по какой причине, но иногда ког "хавает", когда функции после void(loop), а иногда - нет. И мне понадобится перелапатить весь код чтоб его хотя бы скомпилировать. Странно это вообще все. Для меня всегда 2+2=4, а тут не так.... Например, Ардуино IDE 1.6.8 успешно компилирует и работает мой код с часами, а вот последняя версия - никак не хочет.
Ну, я так и догадывался, что понадобится МЕГА. Буду заказывать из Китая, а пока попробую спаять k-line и поиграться с uno по серийнику, получая ответы. Хотя некотрые pid'ы на мой мотор известны.
У меня UNO сейчас, но думаю это не принципиально. Хотел спаять как посоветовал ТС на L9637D, но не могу найти нормальный корпус. Для работы с SMD нужно докупать паяльную станцию и т.п...
И еще вопросы появились - есть китайский OP-COM, но он только по 7 пину конектится (мне лень выяснять что с ним не так), и есть Опель-сканер. Вот вопрос - с Опель-сканер не проще ли будет найти нужные данные? Прикол в том, что он по одному запросу через программу шлет. Т.е. открываем двигатель, и пока галочку не поставим, например на температуре, он ее и не покажет. Поставили - показал. Я так понимаю, как раз и шлет запрос в ЭБУ.
Ну я не знаю, у меня не хочет компилироваться. Хотелось бы увидеть все библиотеки, шрифты и т.п. Может в этом где-то косяк. ТС их не приложил, а из сторонних исочников не факт что те же.
собирай на LM393 , всем советую. (схемы уже во всех темах про к-лайн я выкладывал, ищи) Че народ на эту L9637D западает все время, ждать её долго. 393 в любом радиомагазе 10 рублей стоит, и корпус любой хоть дип хоть смд. L9637 в дипе не бывает. И какая нафиг паяльная станция, soic8 можно паяльником-бревном запаять.
Собственно, машина Vectra B 1997 x16xel Multek-s KWP2000.
вот рабочий эмулятор ЭБУ твоей машины. К-лайн адаптер к ардуино цепляем к 7 Rx и 8 Tx пинам. В OPCOM K-line подключаемся к ардуине-эмулятору. Не забываем там в настройках выбрать RS232/KL и правильный компорт, на котором висит юсб -к-лайн адаптер. В мониторе порта поставить скорость 115200 нет конца строки. Отправляем символ "-" или "+" тем самым выбирая номер изменяемого байта. "." или "," соответсвенно увеличиваем или цменьшаем значение выбранного байта, "m" - меняет значение байта либо 0x00 либо 0xFF. Меняя значение байтов смотрим что и как меняется в текущих данных.
int bytenumber = 6;
///////////////////////////////////////////////////////////////////////
// Всё что выше для считывания кнопки
#include <SoftwareSerial.h>
SoftwareSerial mySerial(7, 8); //R,T
unsigned long prevTimedelay = 0;
byte MessageRx[110] = {0}; // массив байтов принимаемого сообщения
byte messageCOMUN[] = {0x83, 0xF1, 0x11, 0xC1, 0x6B, 0x8F, 0x40};
byte messagePRES[] = {0x81, 0xF1, 0x11, 0x7E, 0x01};
byte messageIDEN1[] = {0xA8, 0xF1, 0x11, 0x5A, 0x81, 0x04, 0x90, 0x6F, 0x62, 0x03, 0x91, 0x6B, 0x03,
0x92, 0x6B, 0x03, 0x93, 0x01, 0x03, 0x94, 0x6A, 0x03, 0x95, 0x02, 0x03, 0x96, 0x66, 0x03, 0x97, 0x69,
0x03, 0x98, 0x6A, 0x03, 0x99, 0x44, 0x03, 0x9A, 0x02, 0x03, 0x9F, 0x6A, 0xFF, 0xAC};
// A8 F1 11 5A 81 04 90 6F 62 03 91 6B 03
// 92 6B 03 93 01 03 94 6A 03 95 02 03 96 66 03 97 69
// 03 98 6A 03 99 44 03 9A 02 03 9F 6A FF AC
byte messageIDEN2[] = {0x80, 0xF1, 0x11, 0x5F, 0x5A, 0x80, 0x57, 0x30, 0x4C, 0x30, 0x54, 0x47, 0x46, 0x37,
0x35, 0x31, 0x32, 0x32, 0x33, 0x33, 0x37, 0x31, 0x34, 0x32, 0x34, 0x34, 0x31, 0x37, 0x31, 0x36, 0x39, 0x20,
0x50, 0x44, 0x42, 0x4F, 0x53, 0x20, 0x20, 0x30, 0x31, 0x30, 0x35, 0x30, 0x35, 0xFF, 0x4B, 0x4D, 0x37, 0x4D,
0x33, 0x30, 0x34, 0x30, 0x5F, 0x53, 0x00, 0x06, 0x42, 0x30, 0x31, 0x30, 0x31, 0x35, 0x59, 0x32, 0x30, 0x44,
0x54, 0x48, 0x20, 0x44, 0x33, 0x53, 0x30, 0x30, 0x31, 0x30, 0x30, 0x36, 0x39, 0x34, 0x30, 0x20, 0x07, 0x07,
0x25, 0x05, 0x48, 0x30, 0x32, 0x38, 0x31, 0x30, 0x031, 0x30, 0x32, 0x36, 0x38, 0xFF};
byte messagePIDS[] = {0x80, 0xF1, 0x11, 0x4C, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0C, //Coolant Temperature
0x37, //Coolant Temperature
0x01, //Actual injection start
0x92, //Actual injection start
0x0C, //Engine Oil Temperature
0xEB, //Engine Oil Temperature
0x00, //Accelerator Position Sensor Signal
0x00, //Accelerator Position Sensor Signal
0x02, //System Voltage
0xB3, //System Voltage
0x00, //High Pressure Diagnosis 1
0x00, //High Pressure Diagnosis 1
0x11, //Mass Air Flow Sensor
0x89, //Mass Air Flow Sensor
0x04, //Boost Pressure
0x30, //Boost Pressure
0x00, //High Pressure Diagnosis 2
0x00, //High Pressure Diagnosis 2
0x03, //Engine Speed
0x20, //Engine Speed
0x0B, //EGR Command (Exhaust-Gas Recirculation Command)
0x55, //EGR Command (Exhaust-Gas Recirculation Command)
0x03, //Barometer Sensor
0xA3, //Barometer Sensor
0x04, //Boost Pressure Command
0x2D, //Boost Pressure Command
0x03, //Desired Engine Idle Speed
0x20, //Desired Engine Idle Speed
0xEE,
0xB9,
0x00, //Vehicle Speed
0x00, //Vehicle Speed
0x00, //Vehicle Speed Command
0x00, //Vehicle Speed Command
0x0C,
0x35,
0x03, //Desired Injection Quantity
0x0A, //Desired Injection Quantity
0x02, //Injection Quantity
0xD9, //Injection Quantity
0x08, //Start of Delivery
0xA3, //Start of Delivery
0x01, //Pump Speed
0x90, //Pump Speed
0x0C, //Fuel Temperature
0x27, //Fuel Temperature
0xA0,
0x00,
0x01, //EGR Pulse Ratio (Exhaust Gas Recirculation)
0x5C, //EGR Pulse Ratio (Exhaust Gas Recirculation)
0x02, //Swirl Level Control Solenoid Valve Pulse Ratio
0x76, //Swirl Level Control Solenoid Valve Pulse Ratio
0xAD,
0x08,
0x01,
0x30,
0x00, //Pulse Ratio Boost Pressure Solenoid Valve
0x03, //Pulse Ratio Boost Pressure Solenoid Valve
0x01, //Desired Injection Start
0x7B, //Desired Injection Start
0x0B, //Intake Air Temperature
0xDB, //Intake Air Temperature
0x03,
0xA3,
0x00,
0x02,
0x1F,
0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50};
bool debug = 0;
bool f =0;
void setup() {
byte CRC = 0;
for (byte i=0; i<sizeof(messageIDEN1); i++){if (i!=sizeof(messageIDEN1)-1) CRC+=messageIDEN1[i]; else messageIDEN1[i]=CRC;}
CRC = 0;
for (byte i=0; i<sizeof(messageIDEN2); i++){if (i!=sizeof(messageIDEN2)-1) CRC+=messageIDEN2[i]; else messageIDEN2[i]=CRC;}
CRC = 0;
messagePIDS[3]=sizeof(messagePIDS)-5;
for (byte i=0; i<sizeof(messagePIDS); i++){if (i!=sizeof(messagePIDS)-1) CRC+=messagePIDS[i]; else messagePIDS[i]=CRC;}
Serial.begin (115200);
mySerial.begin (10400);
pinMode (10, OUTPUT);
digitalWrite (10,0);
Serial.print ("Tekuchiy Nomer Byte dlya izmeneniya: "); Serial.println (bytenumber); Serial.println ("");
}
void loop() {
if (Serial.available()) {
byte inbyte=0;
inbyte = Serial.read(); delay(2);
if (inbyte == '-') {bytenumber --; Serial.print (" bytenumber: "); Serial.println (bytenumber);}
if (inbyte == '+') {bytenumber ++; Serial.print (" bytenumber: "); Serial.println (bytenumber);}
if (inbyte == '.') {messagePIDS[bytenumber]++;Serial.print ("byte value: "); Serial.println (messagePIDS[bytenumber]);
byte CRC = 0; for (byte i=0; i<sizeof(messagePIDS); i++){if (i!=sizeof(messagePIDS)-1) CRC+=messagePIDS[i]; else messagePIDS[i]=CRC;}}
if (inbyte == 'm') {if (f)messagePIDS[bytenumber]=255;else messagePIDS[bytenumber]=0; f=!f; Serial.print ("byte value: "); Serial.println (messagePIDS[bytenumber]);
byte CRC = 0; for (byte i=0; i<sizeof(messagePIDS); i++){if (i!=sizeof(messagePIDS)-1) CRC+=messagePIDS[i]; else messagePIDS[i]=CRC;}}
if (inbyte == ',') {messagePIDS[bytenumber]--;Serial.print ("byte value: "); Serial.println (messagePIDS[bytenumber]);
byte CRC = 0; for (byte i=0; i<sizeof(messagePIDS); i++){if (i!=sizeof(messagePIDS)-1) CRC+=messagePIDS[i]; else messagePIDS[i]=CRC;}}
if (inbyte == 'p') debug=!debug;
Serial.flush();
return;}
if (mySerial.available()) {
delay(100);
int k=0;
byte inbyte=0;
while( mySerial.available() && k < 100) {
inbyte = mySerial.read();
MessageRx[k] = inbyte;
k++; }
if (debug) Serial.print ("Recieve: ");
for (int i = 0; i < k; i++) {
if (debug){Serial.print(MessageRx[i],HEX); Serial.print (" ");} }
if (debug) Serial.println ("");
if ((MessageRx[1]==0x81 && MessageRx[2]==0x11 && MessageRx[3]==0xF1 && MessageRx[4]==0x81 && MessageRx[5]==0x04)|| (MessageRx[0]==0x81 && MessageRx[1]==0x11 && MessageRx[2]==0xF1 && MessageRx[3]==0x81 && MessageRx[4]==0x04)) {
if (debug){ Serial.println ("Prinyat zapros init! "); Serial.println ("");
Serial.print ("Otvechayu: ");}
for (int i = 0; i <sizeof(messageCOMUN); i++) {
mySerial.write(messageCOMUN[i]);
if (debug){Serial.print(messageCOMUN[i],HEX); Serial.print (" ");}
}
if (debug) {Serial.println("");}
}
if (MessageRx[0]==0x80 && MessageRx[1]==0x11 && MessageRx[2]==0xF1 && MessageRx[3]==0x01 && MessageRx[4]==0x3E && MessageRx[5]==0xC1) {
if (debug){ Serial.println ("Prinyat zapros prisutstvia! "); Serial.println ("");
// Serial.print ("Tekuchiy Nomer Byte dlya izmeneniya: "); Serial.println (bytenumber); Serial.println ("");
Serial.print ("Otvechayu: ");}
for (int i = 0; i < sizeof(messagePRES); i++) {
mySerial.write(messagePRES[i]);delay(1);
if (debug) {Serial.print(messagePRES[i],HEX); Serial.print (" ");}}
if (debug) Serial.println("");
}
if (MessageRx[0]==0x80 && MessageRx[1]==0x11 && MessageRx[2]==0xF1 && MessageRx[3]==0x02 && MessageRx[4]==0x1A && MessageRx[5]==0x81 && MessageRx[6]==0x1F) {
if (debug){ Serial.println ("Prinyat zapros identificacion 1! "); Serial.println ("");
Serial.print("Otvechayu: ");}
for (int i = 0; i < sizeof(messageIDEN1); i++) {
mySerial.write(messageIDEN1[i]);delay(1);
if (debug) {Serial.print(messageIDEN1[i],HEX); Serial.print (" ");}
}
if (debug){Serial.println("");
Serial.print ("Otvechayu DEC: ");}
for (int i = 0; i < sizeof(messageIDEN1); i++) {
if (debug) {Serial.print(messageIDEN1[i]); Serial.print (" ");}
}
if (debug) Serial.println("");
}
if (MessageRx[0]==0x80 && MessageRx[1]==0x11 && MessageRx[2]==0xF1 && MessageRx[3]==0x02 && MessageRx[4]==0x1A && MessageRx[5]==0x80 && MessageRx[6]==0x1E) {
if (debug){ Serial.println ("Prinyat zapros identificacion 2! "); Serial.println ("");
Serial.print("Otvechayu: ");}
for (int i = 0; i < sizeof(messageIDEN2); i++) {
mySerial.write(messageIDEN2[i]); delay(1);
if (debug) {Serial.print(messageIDEN2[i],HEX); Serial.print (" ");}
}
if (debug) {Serial.println("");
Serial.print ("Otvechayu DEC: ");}
for (int i = 0; i < sizeof(messageIDEN2); i++) {
if (debug) {Serial.print(messageIDEN2[i]); Serial.print (" ");}
}
if (debug) Serial.println("");
}
if (MessageRx[0]==0x80 && MessageRx[1]==0x11 && MessageRx[2]==0xF1 && MessageRx[3]==0x02 && MessageRx[4]==0x21 && MessageRx[5]==0x01 && MessageRx[6]==0xA6) {
if (debug){ Serial.println ("Prinyat zapros datos! "); Serial.println ("");
Serial.print ("Otvechayu: ");}
for (int i = 0; i < sizeof(messagePIDS); i++) {
mySerial.write(messagePIDS[i]);delay(1);
if (debug) {Serial.print(messagePIDS[i],HEX); Serial.print (" ");}
}
if (debug) Serial.println("");
}
}
}
вот убил время на работе выяснил за что байты отвечают, формулы уж сам подберёшь с помощью эмуля:
13 MAP Bar
14 system voltage V
15 intake air temperature V
16 intake air temperature *C
17 engine coolant temperature V
18 engine coolant temperature *C
19 УОЗ
20 Нагрузка на двигатель %
22 номер ячейки детонации
23 цил1 уменшение УОЗ для уменьшения детонации
24 цил2 уменшение УОЗ для уменьшения детонации
25 цил3 уменшение УОЗ для уменьшения детонации
26 цил4 уменшение УОЗ для уменьшения детонации
27 throttle position V
28 throttle position %
29 скорость автомобиля км/ч
30 обороты ДВС
30 УОЗ
31 время впрыска мс
32 регулятор холостого хода шагов
33 Desired Idle P-N rpm
34 Desired Idle Drive (R-D-3-2-1) rpm
35 лямбда зонд mV
36 O2 Integrator шагов
37 O2 BLM Cell Number (Block Learn Multiplier)
38 O2 BLM Cell Content (Block Learn Multiplier)
40 клапан адсорбера %
41 соотношение воздух/топливо
42 желаемое положение клапана ЕГР %
43 реальное положение клапана ЕГР %
а также какой то бит в байте отвечает за цикл по лямде (замкн или разомкн)Air/Fuel Status
44 bits : Vehicle Speed Pulse, Dec. Fuel Cutoff (Deceleration), Full Load Enrichment, O2-Loop BLM Enable (Block Learn Map)
45 bits : IAC Control Enable (Idle Air Control), torque control , Blink Code Request, положение селектора
46 bits: air control solenoid, Idle Adjust P-N, Idle Adjust Drive (R-D-3-2-1), Idle Adjust, A/C Relay (Air Conditioning)
47 bits: Secondary Air Pump Relay, immobilizer, Telltale (Check Light)
вот к-лайн шилд для нано. Спаял себе - работает , рекомендую
Интересную идею ты замутил в натуре ))) Беру на вооружение )) В планах еще вот таких компонентов довавить:
С корпусом и подстроичником- понялно будет без слов. А вот кнопка перекидная, что бы плюсовой перекидывать или обрубать вовсе. Со стандартного разъема диагностики постоянный плюс идет, что не всегда удобно. Второе положение, для подочи плюса, например с включенного зажигания.
Не, я не люблю когда в разъеме чето торчит. Мне проще скрутками сзади разъема к проводам примотаться.
В планах сделать шилд для меги с четырьмя к-лайнами на двух микрухах lm339. Это нужно для граммотного сниффа, чтобы понимать при сниффе кто какие сообщения шлет.
Далее попытался посмотреть как он к приборке по 7 пину бует подключаться. На столе просто 0 в серийнике.
На машине:
8727ms
0
2239ms
E6 E6
55ms
18 E6 0 FE FE
89ms
0 F8 0 FE 0 F8 6 F8 0 F8 E6 F8 F8 F8 6 F8 FE F8 0 F8 E6 F8 0
56ms
F8 0 F8 F8 F8 6 F8 F8 F8 0 F8 0 F8 F8 F8 6 F8 F8 F8 0 F8 0 F8
60ms
FE F8 6 F8 FE F8 0 F8 0 F8 6 F8 18 F8 0 F8 1E F8 F8 0 FE
71ms
0 F8 0 FE 0 F8 6 F8 0 F8 E6 F8 F8 F8 6 F8 FE F8 0 F8 E6 F8 0 F8
60ms
0 F8 F8 F8 6 F8 F8 F8 0 F8 0 F8 F8 F8 6 F8 F8 F8 0 F8 0 F8 FE F8
59ms
6 F8 FE F8 0 F8 0 F8 6 F8 18 F8 0 F8 1E F8 F8 0 FE 18 0
55ms
FE 0 18 FE F8 0 18 C6 0 E0 18 F8
57ms
0 C0 6 38 F8 0 18 C6 0 E0 18 F8
57ms
0 E0 6 18 F8 0 18 C6 0 E0 18 F8
57ms
0 C0 6 38 F8 0 18 C6 0 C0 18 F8
58ms
0 E0 6 38 18 6 E0 0 1E E0 6 F8
57ms
6 FE E0 0 0 0 0 0 0 0 0 0
55ms
0 0 6 0 0 0 0 1E FE 6 F8 6 F8 6 FE
55ms
F8 C6 6 F8 1E E0 F8 1E FE 1E FE FE 18 F8 FE F8 6 F8
54ms
38 6 6 F8 6 FE E0 0 0
54ms
0 0 0 0 0 0 0 0 0 6 0
56ms
0 0 0 E0 FE 6 F8 6 F8 6 FE F8 E6 6 F8 1E E0 F8
54ms
1E FE 1E F8 FE 6 F8 FE F8 6 F8 6 6
64ms
6 F8 6 FE E0 0 0 0 0 0 0 0 0
56ms
0 0 0 6 0 0 0 0 E0 FE 6 F8 6 F8
54ms
6 FE F8 E6 6 F8 1E E0 F8 1E FE 1E FE FE 1E F8 FE F8 6
55ms
F8 C0 6 6 F8 6 FE C0 0
54ms
0 0 0 0 0 0 0 0 0 0 6
55ms
0 0 0 0 1E FE 18 F8 18 F8 6 FE F8 C6 6 F8 1E
54ms
E0 F8 1E FE 1E FE FE 6 F8 FE F8 6 F8 3E 6
69ms
6 F8 6 FE E0 0 0 0 0 0 0 0 0
54ms
0 0 0 6 0 0 0 0 E0 FE 6 F8 6 F8
54ms
0 FE F8 E6 6 F8 1E E0 F8 1E FE 1E FE FE 18 F8 FE F8 6 F8
60ms
38 6 6 F8 6 FE E0 0 0
55ms
0 0 0 0 0 0 0 0 0 6 0
54ms
0 0 0 E0 FE 6 F8 6 F8 6 FE F8 C6 6 F8 1E E0 F8
54ms
1E FE 1E F8 FE 1E F8 FE F8 6 F8 3E 6
65ms
6 F8 6 FE E0 0 0 0 0 0 0 0 0
55ms
0 0 0 6 0 0 0 0 1E FE 18 F8 18 F8
55ms
6 FE F8 C6 6 F8 1E E0 F8 1E FE 1E FE FE 6 F8 FE F8 6 F8
59ms
3E 6 6 F8 6 FE E0 0 0
55ms
0 0 0 0 0 0 0 0 0 6 0
56ms
0 0 0 E0 FE 6 F8 6 F8 6 FE F8 E6 6 F8 1E E0 F8
54ms
1E FE 1E FE FE 18 F8 FE F8 6 F8 3E 6
64ms
6 F8 6 FE E0 0 0 0 0 0 0 0 0
56ms
0 0 0 6 0 0 0 0 E0 FE 6 F8 6 F8
54ms
6 FE F8 E6 6 F8 1E E0 F8 1E FE 1E F8 FE 1E F8 FE F8 6 F8
60ms
3E 6 6 F8 6 FE E0 0 0
55ms
0 0 0 0 0 0 0 0 0 6 0
55ms
0 0 0 1E FE 18 F8 18 F8 6 FE F8 C6 6 F8 1E E0 F8 1E
55ms
FE 1E FE FE 6 F8 FE F8 6 F8 1E 6
64ms
6 F8 6 FE E0 0 0 0 0 0 0 0 0
54ms
0 0 0 6 0 0 0 0 1E FE 6 F8 6 F8
55ms
6 FE F8 C6 6 F8 1E E0 F8 1E FE 1E FE FE 18 F8 FE F8 6 F8
60ms
38 6 6 F8 6 FE E0 0 0
54ms
0 0 0 0 0 0 0 0 0 6 0
Кстати, на каком-то форуме нашел некоторые пиды для z16xe, может можно формулы от туда будет содрать:
Name,"ShortName","ModeAndPID","Equation","Min Value","Max Value","Units","Header"
Opel z16XE Multec-S Fuel Tank,"Fuel Tank","2101","BK*100/255","0","100","L","8011F1"
Opel z16XE Multec-S Injection Pulse,"InjPls","2101","BN*25.6/255","0","25.6","ms","8011F1"
Opel z16XE Multec-S Manifold Absolute Pressure,"MAP","2101","AV","0","255","kPa","8011F1"
Opel z16XE Multec-S Coolant Temperature,"ECT","2101","AN-40","0","215","°C","8011F1"
Opel z16XE Multec-S Intake Air Temperature,"IAT","2101","AP-40","0","215","°C","8011F1"
Opel z16XE Multec-S A/C Pressure (Air Conditioning),"A/C Pressure","2101","BQ*5100/255","0","5100","kPa","8011F1"
Opel z16XE Multec-S Spark Angle,"ADV","2101","BO*128/255-64","0","100","°","8011F1"
Opel z16XE Multec-S Knock Retard Cylinder 1,"KnockRetCyl1","2101","BY","0","100","°","8011F1"
Opel z16XE Multec-S Knock Retard Cylinder 2,"KnockRetCyl2","2101","BZ","0","100","°","8011F1"
Opel z16XE Multec-S Knock Retard Cylinder 3,"KnockRetCyl3","2101","CA","0","100","°","8011F1"
Opel z16XE Multec-S Knock Retard Cylinder 4,"KnockRetCyl4","2101","CB","0","100","°","8011F1"
Opel z16XE Multec-S Battery Voltage,"Batt Volt","2101","AF*25.5/255","0","25.5","V","8011F1"
Opel z16XE Multec-S Calculated Pedal Position,"CalcPedPos","2101","AZ*100/255","0","100","%","8011F1"
Opel z16XE Multec-S Vehicle Speed,"Speed","2101","AK","0","255","km/h","8011F1"
Opel z16XE Multec-S Fuel Tank Ventilation Valve,"Tank Valve","2101","BI*100/255","0","100","%","8011F1"
Opel z16XE Multec-S O2 Bank1 Sensor1,"O2 B1S1","2101","CG*1106/255","0","1106","mV","8011F1"
Opel z16XE Multec-S O2 Bank1 Sensor2,"O2 B1S2","2101","CH*1106/255","0","1106","mV","8011F1"
Opel z16XE Multec-S Bank1 Long Term Fuel Trim,"LTFT","2101","(CN-128)*100/128","0","100","%","8011F1"
Opel z16XE Multec-S Bank1 Short Term Fuel Trim,"STFT","2101","(CE-128)*100/128","0","100","%","8011F1"
Opel z16XE Multec-S Desire Idle Engine Speed,"DesIES","2101","AJ*3187/255","0","3187","rpm","8011F1"
Opel z16XE Multec-S Engine Speed,"EngineSpeed","2101","(AG*256+AH)/4","0","65536","rpm","8011F1"
Opel z16XE O2 Sensor Loop,"Open-Clouse","2101","{W:0}","0","1","","8011F1"
Opel z16XE Tank Sensor Volt,"TankVolt","2101","BJ*14.92/255","0","14.92","V","8011F1"
Opel z16XE Intake Air Temp Volt,"IATVolt","2101","AO*5/255","0","5","V","8011F1"
Opel z16XE Coolant Temp Volt,"ECTVolt","2101","AM*5/255","0","5","V","8011F1"
Opel z16XE MAP Sensor Volt,"MAPVolt","2101","AU*5/255","0","5","V","8011F1"
Opel z16XE EGR Position Command,"EGR Pos","2101","BH*100/255","0","100","%","8011F1"
Opel z16XE EGR Position Feedback Volt,"EGR Volt","2101","BG*5/255","0","5","V","8011F1"
Opel z16XE Accelerator Pedal Position Sensor 1 Volt,"APP S1","2101","AW*5/255","0","5","V","8011F1"
Opel z16XE Accelerator Pedal Position Sensor 2 Volt,"APP S2","2101","AX*5/255","0","5","V","8011F1"
Opel z16XE Throttle Position Sensor 1 Volt,"TP S1","2101","BA*5/255","0","5","V","8011F1"
Opel z16XE Throttle Position Sensor 2 Volt,"TP S2","2101","BB*5/255","0","5","V","8011F1"
Opel z16XE Calculated Throttle Position,"Calc TP","2101","BD*100/255","0","100","%","8011F1"
Opel z16XE Total Missfire,"Missfire","2101","CK","0","255","","8011F1"
Opel z16XE MIL Status,"MIL","2101","{Z:0}","0","1","","8011F1"
Opel z16XE Service Vehicle Status,"Service","2101","{Z:7}","0","1","","8011F1"
Opel z16XE Fuel Flow,"Fuel Flow","","((VAL{Opel z16XE Multec-S Injection Pulse}/1000)*(169/60000)*(VAL{Opel z16XE Multec-S Engine Speed}/120))*14400","0","255","l/h",""
Opel z16XE Instant Fuel Consumption L/100km,"Ins L/100km","","100/VAL{Opel z16XE Multec-S Vehicle Speed}*VAL{Opel z16XE Fuel Flow}","0","255","L/100km","8011F1"
Кстати, по поводу подключения к эмулятору. Что-то торможу. Есть Ардуина, к ней прицеплен k-line на LM393. С него выход 12В, К-линия, земля. С другой стороны USB-TTL, к которому нужно подключить еще один K-Line адаптер, так? и между собой их соединить 12 к 12, К-линия к К-линии, земля к земле? Так?
Кстати, по поводу подключения к эмулятору. Что-то торможу. Есть Ардуина, к ней прицеплен k-line на LM393. С него выход 12В, К-линия, земля. С другой стороны USB-TTL, к которому нужно подключить еще один K-Line адаптер, так? и между собой их соединить 12 к 12, К-линия к К-линии, земля к земле? Так?
всё верно , со стороны компа можно взять стандартный к-лайн адаптер, который должен держать скорость 10400 (ну т.е. подключаться к автомобилю)
Нема такого. Есть USB-TTL, которой подключался к мозгам ГБО. На FT232RL, как вы ссылку давали. Завтра еще один k-line спаяю и к ней подключу. Или можно в параллель с тем, что к Ардуинке подключен?
вот рабочий эмулятор для проги опком которая к-лайн. Адаптер должен быть подключен на 10, 11 пин ардуино. Второй адаптер нужен юсб К-лайн (подключаем к проге опком). Соединяем к-лайны. Подключение идёт. Дата стрим тоже. Там можно определить какой байт за что отвечает, отправляя с ком порта (нужно только поставить в настройках 115200 и нет конца строки) символ "+", при этом будет изменяться значение байта №10, и смотрим что в датастриме меняется. Следующий байт выбирается отправкой символа "a". Отправка символа "b" возвращает опять к байту №10.
Скорость 9600 выставить в настройке виртуального com порта для usb-k.line для программы op-com? На следующей неделе будет Arduino nano(для экспериментов), еще через неделю - op-com адаптер. До того времени сделаю пару k-line адаптеров.
Мой нынешний k-line адаптер напоминает набор ВМ9213, только микросхема в другом корпусе, порога op-com категорически отказывается устанавливать связь с авто(на других машинах и программах все ок), можно ли для моих целей рспользовать какую нибудь программу терминал для клайн, или терминал для elm327, или какую другую прогу? Если без вариантов, то сижу пока на попе ровно, жду op-com и остальные железки, курю теорию...
через елм может программу ScanMasterELM попробовать. Я думаю должна ваш опель взять
Молодцом мужики. Вы прошли непростой путь и написали не один километр кода, пока все довели до ума. Хочу сделать тоже самое только с протоколом ISO 9141-2 для VW до 2000г. Прочитал не мало инфы но ничего не получается, вот и прошу помощи. Имеется MC33290, спаял её мне товарищ вот по такой схеме:
https://www.google.by/search?q=mc33290&client=opera&hs=p8z&source=lnms&t...
Скачал библиотеку SoftwareSerial. В файле SoftwareSerial.cpp где F_CPU == 16000000 добавил строку
{ 10400, 106, 218, 218, 215, }
Использую на данный момент Arduino UNO(но есть у меня и PRO MINI). Естественно она отображается как COM-порт. Вот для начала начал, я так понимаю, сея схема должна работать как K-line адаптер. Закидываю этот кусок кода и потом открываю программу VAGCOM311.2RUS_2006. Когда провожу тест com-порта, то сей прибомбас находит, но в всплывающем окне пишет что происхождение шнурка "сомнительно". Где кнопка ТЕСТ а этой программе есть еще кнопка теста для светодиодов, когда нажимаю на её светодиоды TX и RX поргают по очереди(проходят тест). Был бывам признателен за подсказки куда копать.
у вас микросхема к-лайн подключена к ардуино к пинам 0 и 1 , а эти пины являются аппаратным Serial соединением (аппартаный UART) . Вы же в скетче пытаетесь на эти пины ещё приболтать программное сериал соединение (программный UART, который и используется когда не хватает аппартаных, но естественно это делается на другие пины - НЕ 0 и 1).
Строго говоря, по вашей схеме, чтобы работало как обычный к-лайн адаптер, вообще можно никакой скетч не заливать. Просто замкните RST ардуино на GND и поидее (я не проверял) данные от к-лайн (и далее на пины 0 и 1 ) будут проходить "насквозь" в юсб (ну тоесть в виртуальный ком порт). Микроконтроллер при этом не задействован. Т.е. по сути ардуина станет обычным переходником USB<->UART, а точнее USB<->UART<->K-line
у вас микросхема к-лайн подключена к ардуино к пинам 0 и 1 , а эти пины являются аппаратным Serial соединением (аппартаный UART) . Вы же в скетче пытаетесь на эти пины ещё приболтать программное сериал соединение (программный UART, который и используется когда не хватает аппартаных, но естественно это делается на другие пины - НЕ 0 и 1).
Строго говоря, по вашей схеме, чтобы работало как обычный к-лайн адаптер, вообще можно никакой скетч не заливать. Просто замкните RST ардуино на GND и поидее (я не проверял) данные от к-лайн (и далее на пины 0 и 1 ) будут проходить "насквозь" в юсб (ну тоесть в виртуальный ком порт). Микроконтроллер при этом не задействован. Т.е. по сути ардуина станет обычным переходником USB<->UART, а точнее USB<->UART<->K-line
Вот попробовал, как вы сказали..А именно: закинул пустой скетч, тогда при тестировании пишет "Адаптер не обнаружен или не готов". Когда перемыкаю RST на GND по ходу ардуинка просто перегружается и зависает.У меня есть еще программатор ch341a на нем тоже есть RX TX. только он определяется не как com. Может дрова поискать другие..или может как нить в машину сразу запрос какой послать (правда я не знаю сам как это сделать)??? сдесь есть адреса для запросов:
http://obdcon.sourceforge.net/2010/06/obd-ii-pids/
Просто для вашей программы возможно требуется не просто к-лайн адаптер, а с какими-нибудь ещё аппартаными примочками, с которыми бы данная программа определяла адаптер как "свой".
Вам нужно просто найти рабочую диагностику на свой авто. И просниффить её способом указанном выше
Просто для вашей программы возможно требуется не просто к-лайн адаптер, а с какими-нибудь ещё аппартаными примочками, с которыми бы данная программа определяла адаптер как "свой".
Вам нужно просто найти рабочую диагностику на свой авто. И просниффить её способом указанном выше
Фиг с ней, с этой прогой. Подскажите как хотябы один запрос сделать через терминал и получить ответ. Дальше уже сам колдовать буду. Тут вот парни сделали как раз и протокол как у меня. только у их через блютуз:
https://geektimes.ru/post/255012/
мне так сказать для начала, а там я сам буду пробовать колдовать
То что вы привели по ссылке это просто диагностика авто при помощи универсального адаптера elm327. Т.е. всю «грязную» работу делает он. И в ардуино уже идут готовенькие данные. Таким путем проще идти. Дак берите и делайте как там написано, где проблема?
Если же идти путем соединения обычным к-лайн адаптером, то весь протокол нужно самому изучать. Для этого я и говорю вам нужна рабочая диагностика, хотябы при помощи того же елм.берете и подсматриваете байты. А так самое трудно блок разговорить, т.е инит пройти. А запросы то че, они стандартные
в этой программе ОПКОМ, которая через к-лайн они ошиблись видать со скоростью. проснифил - реальный обмен от опкома идёт на 9600, хотя в окне программы вверху и написано 10400. Но байты отправляет не правильные если на 10400 щупать сниффером. На 9600 байты совпадают с такими какие должны быть. Из-за этого и не коннектится.
Нет, это не в программе ОПКОМ ошиблись, это я ошибся. Дело вот в чем.
Тут на днях нужно было задиагностировать старого опеля. адаптера ОПКОМ у меня не было. Но есть к-лайн адаптер на микросхеме Prolifiс PL-2303. Программа ОПКОМ, которая поддерживает К-лайн адаптер, естесственно не связазлась с авто (что мы уже знали по нашему опыту ранее и как я выяснил ранее связи нет из-за того, что скорость программа ОПКОМ должна устанавливать 10400 а в реале была 9600).
Но ошибка скорости не в программе ОПКОМ. А в драйверах чипа Prolific 2303, стандартный драйвер не знает скорости 10400 так как она не страндартная и выставляет итоговую 9600 - она и приходит уже на к-лайн адаптер и он в к-линию шлёт байты на 9600.
Нашёл драйвер который поддерживает скорость 10400. Но старый нормально удалить не смог, поэтому не работало. Взял другой ноут. Там поставил этот драйвер и о чудо, скорость стала 10400. Программа подключилась к автомобилю. Так что, кто будет ещё пробовать бортовой комп на опель собирать не обязательно ОПКОМ адаптер иметь, можно и к-лайн адаптером обойтись
Приветствую всех кто мучил весь этот проект :)
Перечитал все от корки до корки!
но видать где то завтыкал почему вы юзаете 2 сериал порта для приборки и для связи с ебу..
на одном никак не получается это реализовать?
ну и хотелось бы увидеть окончательную схему этого бк..!! :)
Привет, потому что все данные идут по 7 пину обд и один параметр вроде чтение и стирание ошибок по 12 пину. Схема проста, все подключи по описанию, там нечего рисовать.
Рисуй дуню с контактами, адаптер, датчики, стабилизатор, экран и разводить по описанию..... Вот и вся схема;)
стирание ошибое по 7 пину. 12 сугубо для приборки
Я уже и забыл.... Давно было.....
та да :)))
и ще.. для связи с ебу и приборкой использовал 2 микрухи L9637?
или все же удалось на однеой реализовать?
Используется просто 2 адаптера, один для 7 другой для 12 линии. На каждом одна микрухе. Если не нужно читать ошибки то, реализует один адаптер и одну линию.
фиг там, судя с программы 1 линии мало,
так как 90% данных берется с 7 пина обд
а показания уровня топлива и пробег с приборки... тобишь с 12го пина
хотя это все должно б было и в ебу быть..
Вот. Я вспомнил, одна линия берет данные блока мотора а другая данные приборки с другой линии, так как блоки у них разные.
Уровень топлива беру с двух мест, с приборки как устойчивый и с ебу как реальный
ну это я понял :) не блоки разные а контакты в ОБД разьеме..
для моторника идет 7 пин а для приборки 12тый..
вот и спрашивал почему не удалось подключится в паралель к 7 и 12 разьему ОБД.. :)
используя только 1 сериал порт ардуины ...
Нет, разные блоки. По этому и отдельно что для каждого блока своя инициализация и запросы
примерно догнал...
но все же попробую как то через 1 порт задействовать :)
не выйдет, тогда буду юзать 2 порта... :)
Все что есть в блоке мотора можешь с одним адаптером и одной линией, почитай что берётся со второй линии, если тебе не нужно..... Реализуй одну линию:)
Удачи в это не лёгком пути, у меня год ушёл. У тебя меньше, так как мы тут все розжевали от а до я.
разжевали суперски :)!!!!!
но всеравно буду задавать вопросы по расшифровке ответов :))))))))))))))
Если получится то , выложи готовое для народа. Будем рады результатам.
ну это я понял :) не блоки разные а контакты в ОБД разьеме..
для моторника идет 7 пин а для приборки 12тый..
вот и спрашивал почему не удалось подключится в паралель к 7 и 12 разьему ОБД.. :)
используя только 1 сериал порт ардуины ...
в параллель это как интересно? Проблема в том, что пока вы общаетесь с одним блоком, с другим теряется связь, если не посылать ему сообщения присутствия. А чём, собственно, проблема использовать два сериал порта и два к-лайн адаптера? На LM393 будет стоить копейки и ждать из китая не нужно. Ищите поиском по форуму я выкладывал инфу по LM393. Также можно оба собрать сразу на одной микрухе LM339.
В некоторых адаптерах 1 порт и на 7 и 12 пин обд подключаются через сопро 470 ом
Приветсвую! Ох и занимательное чтиво намечается у меня на ближайшие пару дней. Называется, не было хлопот, да купила баба порося :) Собственно, машина Vectra B 1997 x16xel Multek-s KWP2000. Началось все с установки камеры заднего вида, и вот теперь захотелось избавиться от картины малевича и вывести что-то на экран во время движения. Сперва думал только часы да температуру. Это и стало моим первым скетчем к Ардуино. Поковырявшись пару дней, сделал чтоб устанавливались часики двумя стандартными кнопками. Затем думал подключаться к стандартным проводам, которые подходят к MID (сигнал расхода, сигнал скорости, сигнал оборотов) и тут на вашу тему наткнулся... Ну да ладно, похвастался и будет.
Первый вопрос у меня к Вам и, наверное, самый существенный - для чего у Вас используется библиотека Wire.h? Поясню - она не совместима с TV OUT, а вывод на другой экран мне не подходит, т.к. будет сложнее камеру подцепить, да под размеры штатного подобрать. Вот и хотел узнать - а без нее то работает, или даже не заморачиваться? Просто во многих примерах ее пихали "по дефолту", я от нее без проблем избавился.
Wire.h это библиотека для работы с шиной i2c. ТС использовал для подключения часов DS3231.
в этой программе ОПКОМ, которая через к-лайн они ошиблись видать со скоростью. проснифил - реальный обмен от опкома идёт на 9600, хотя в окне программы вверху и написано 10400. Но байты отправляет не правильные если на 10400 щупать сниффером. На 9600 байты совпадают с такими какие должны быть. Из-за этого и не коннектится.
Нет, это не в программе ОПКОМ ошиблись, это я ошибся. Дело вот в чем.
Тут на днях нужно было задиагностировать старого опеля. адаптера ОПКОМ у меня не было. Но есть к-лайн адаптер на микросхеме Prolifiс PL-2303. Программа ОПКОМ, которая поддерживает К-лайн адаптер, естесственно не связазлась с авто (что мы уже знали по нашему опыту ранее и как я выяснил ранее связи нет из-за того, что скорость программа ОПКОМ должна устанавливать 10400 а в реале была 9600).
Но ошибка скорости не в программе ОПКОМ. А в драйверах чипа Prolific 2303, стандартный драйвер не знает скорости 10400 так как она не страндартная и выставляет итоговую 9600 - она и приходит уже на к-лайн адаптер и он в к-линию шлёт байты на 9600.
Нашёл драйвер который поддерживает скорость 10400. Но старый нормально удалить не смог, поэтому не работало. Взял другой ноут. Там поставил этот драйвер и о чудо, скорость стала 10400. Программа подключилась к автомобилю. Так что, кто будет ещё пробовать бортовой комп на опель собирать не обязательно ОПКОМ адаптер иметь, можно и к-лайн адаптером обойтись
кстати лучше всего брать USB-UART переходник на FTDI, он хорошо работает на всех скоростях так сказать "из коробки" на своих стандартных драйверах. чуть позже выложу к-лайн шилд для этого переходника, а также к-лайн шилд для ардуино нано.
Это хорошо, библиотека ds3231 обходится без wire.h....
А подскажите, плиз, сколько памяти нужног для всего этого добра? В UNO влезет, если использовать TV-out? У меня простенькие часики мои заняли аж 51% памяти. (кстати у меня код не компилируется, я так понял все функции нужно переставлять до void(loop), иначе компилятор ругается на то, что они не декларированы.) Ну то я уже потом буду заниматься. интересно сколько кБ памяти он всего занимает. Возможно, придется заказывать и ждать Мега
Это хорошо, библиотека ds3231 обходится без wire.h....
А подскажите, плиз, сколько памяти нужног для всего этого добра? В UNO влезет, если использовать TV-out? У меня простенькие часики мои заняли аж 51% памяти. (кстати у меня код не компилируется, я так понял все функции нужно переставлять до void(loop), иначе компилятор ругается на то, что они не декларированы.) Ну то я уже потом буду заниматься. интересно сколько кБ памяти он всего занимает. Возможно, придется заказывать и ждать Мега
код писался давно. Сейчас опыта поднабралось, многое можно исправить/улучшить. Но мега полюбому нужна, если использовать экран как у ТС, или как у вас TV-out. Попробуйте скомпилировать для меги, в чем проблема.
Проблема в том, что не компилируется. Выдает кучу ошибок. Я не знаю по какой причине, но иногда ког "хавает", когда функции после void(loop), а иногда - нет. И мне понадобится перелапатить весь код чтоб его хотя бы скомпилировать. Странно это вообще все. Для меня всегда 2+2=4, а тут не так.... Например, Ардуино IDE 1.6.8 успешно компилирует и работает мой код с часами, а вот последняя версия - никак не хочет.
Ну, я так и догадывался, что понадобится МЕГА. Буду заказывать из Китая, а пока попробую спаять k-line и поиграться с uno по серийнику, получая ответы. Хотя некотрые pid'ы на мой мотор известны.
вот к-лайн шилд для нано. Спаял себе - работает , рекомендую
попробовал на своей иде 1.8.5 - компилируется. В папку со скетчем нужно положить шрифт GroteskBold16x32.с
У меня UNO сейчас, но думаю это не принципиально. Хотел спаять как посоветовал ТС на L9637D, но не могу найти нормальный корпус. Для работы с SMD нужно докупать паяльную станцию и т.п...
И еще вопросы появились - есть китайский OP-COM, но он только по 7 пину конектится (мне лень выяснять что с ним не так), и есть Опель-сканер. Вот вопрос - с Опель-сканер не проще ли будет найти нужные данные? Прикол в том, что он по одному запросу через программу шлет. Т.е. открываем двигатель, и пока галочку не поставим, например на температуре, он ее и не покажет. Поставили - показал. Я так понимаю, как раз и шлет запрос в ЭБУ.
Ну я не знаю, у меня не хочет компилироваться. Хотелось бы увидеть все библиотеки, шрифты и т.п. Может в этом где-то косяк. ТС их не приложил, а из сторонних исочников не факт что те же.
собирай на LM393 , всем советую. (схемы уже во всех темах про к-лайн я выкладывал, ищи) Че народ на эту L9637D западает все время, ждать её долго. 393 в любом радиомагазе 10 рублей стоит, и корпус любой хоть дип хоть смд. L9637 в дипе не бывает. И какая нафиг паяльная станция, soic8 можно паяльником-бревном запаять.
вот рабочий эмулятор ЭБУ твоей машины. К-лайн адаптер к ардуино цепляем к 7 Rx и 8 Tx пинам. В OPCOM K-line подключаемся к ардуине-эмулятору. Не забываем там в настройках выбрать RS232/KL и правильный компорт, на котором висит юсб -к-лайн адаптер. В мониторе порта поставить скорость 115200 нет конца строки. Отправляем символ "-" или "+" тем самым выбирая номер изменяемого байта. "." или "," соответсвенно увеличиваем или цменьшаем значение выбранного байта, "m" - меняет значение байта либо 0x00 либо 0xFF. Меняя значение байтов смотрим что и как меняется в текущих данных.
вот убил время на работе выяснил за что байты отвечают, формулы уж сам подберёшь с помощью эмуля:
вот к-лайн шилд для нано. Спаял себе - работает , рекомендую
Интересную идею ты замутил в натуре ))) Беру на вооружение )) В планах еще вот таких компонентов довавить:
С корпусом и подстроичником- понялно будет без слов. А вот кнопка перекидная, что бы плюсовой перекидывать или обрубать вовсе. Со стандартного разъема диагностики постоянный плюс идет, что не всегда удобно. Второе положение, для подочи плюса, например с включенного зажигания.
Не, я не люблю когда в разъеме чето торчит. Мне проще скрутками сзади разъема к проводам примотаться.
В планах сделать шилд для меги с четырьмя к-лайнами на двух микрухах lm339. Это нужно для граммотного сниффа, чтобы понимать при сниффе кто какие сообщения шлет.
к-лайн шилд для такого переходника USB-UART на FTDI - получается граммотный USB - K-line адаптер, работающий на всех скоростях "из коробки". драйвера для FTDI
Ого, тут уже за меня пиды нашли :) А разве ключи, адрес блока и т.п. для эмулятора не важны?
Но по порядку. Залил снифер в свою UNO. При проверке на столе, когда к машине не подключено, получил так:
На машине, получил так:
Мне кажется, или где-то что-то не то? Как-то у ТС и количество байтов другое.
Ключи, кстати: Keyword 2031 protocol, Keyword #1: EF, Keyword #2: 8F
Далее попытался посмотреть как он к приборке по 7 пину бует подключаться. На столе просто 0 в серийнике.
На машине:
Кстати, на каком-то форуме нашел некоторые пиды для z16xe, может можно формулы от туда будет содрать:
Кстати, по поводу подключения к эмулятору. Что-то торможу. Есть Ардуина, к ней прицеплен k-line на LM393. С него выход 12В, К-линия, земля. С другой стороны USB-TTL, к которому нужно подключить еще один K-Line адаптер, так? и между собой их соединить 12 к 12, К-линия к К-линии, земля к земле? Так?
а ты попробуй моей программой OPCOM K-line подключиться и попробуй такой сниффер. Сравним
всё верно , со стороны компа можно взять стандартный к-лайн адаптер, который должен держать скорость 10400 (ну т.е. подключаться к автомобилю)
Нема такого. Есть USB-TTL, которой подключался к мозгам ГБО. На FT232RL, как вы ссылку давали. Завтра еще один k-line спаяю и к ней подключу. Или можно в параллель с тем, что к Ардуинке подключен?
нет низя