Данные из K-line Эбу
- Войдите на сайт для отправки комментариев
Пт, 08/02/2019 - 21:36
Доброго времени суток. Поставлена задача достать информацию с эбу (Январь 5.1). Собрана схема на L9637D
(Взята с интернета) подключена к Arduino Uno aTmega328p. Подключен дисплей для вывода темпреатуры ОЖ(для примера). Пробовал разное колличество скетчей , итог один не работает.
#include <Wire.h> // set the LCD address to 0x27 for a 16 chars and 2 line display //LiquidCrystal_I2C lcd(0x27,16,2); #include <OLED_I2C.h> OLED myOLED(SDA, SCL, 8); #define BUFFER_SIZE 256 extern uint8_t BigNumbers[]; unsigned char startCommunication[] = {0x81,0x10,0xf1,0x81,0x03}; //старт диагностического сеанса unsigned char readDataByLocalIdentifier_RLI_ASS[] = {0x82,0x10,0xF1,0x21,0x01,0xA5}; //запрос диагностических данных unsigned char readDTCByStatus[] = {0x84,0x10,0xF1,0x18,0x00,0x00,0x00,0x9D}; //запрос кодов ошибок byte To = 0; short obr = 0; float u = 0; byte To1 = 0; short obr1 = 0; byte i = 0; unsigned char buffer[BUFFER_SIZE]; //буфер для приема сообщений с тачки byte bufSize = 0; int t = 2; int k = 0; uint8_t clr[8] = {B00000,B00000,B00000,B00000,B00000,B00000,B00000,B00000}; uint8_t load_2[8] = {B00111,B00111,B00111,B11111,B11111,B11111,B11111,B11111}; uint8_t load_3[8] = {B11111,B11111,B11111,B11111,B11111,B00111,B00111,B00111}; uint8_t load_4[8] = {B11111,B11111,B11111,B11111,B11111,B11100,B11100,B11100}; uint8_t load_5[8] = {B11100,B11100,B11100,B11111,B11111,B11111,B11111,B11111}; void setup() { Serial.begin(10400); myOLED.begin(); myOLED.setFont(BigNumbers); } void loop() { Serial.write(startCommunication, 5); delay(25); Serial.write(readDataByLocalIdentifier_RLI_ASS, 6); bufSize = 0; if(Serial.available() > 0) { bufSize = Serial.available(); for (i = 0; i < bufSize; i++) buffer[i] = Serial.read(); } if ((bufSize > 11) || (buffer[10] == 0x61)) { To1 = buffer[20]; // - 40 obr1 = buffer[23] * 40; Serial.println(buffer[20]); } myOLED.update(); myOLED.printNumF(buffer[22], 2, 25, 10); }
Пока писал возник еще вопрос. Можно ли выставить монитор порта в 10400 бод?
Просьба сильно камнями не кидаться. Начал баловаться с Arduino меньше недели назад
Можно. Я разрешаю :)
Можно. Я разрешаю :)
Спасибо , конечно , но где?
Можно. Я разрешаю :)
Спасибо , конечно , но где?
ТС не думал что два устройства на одном аппаратном порту serial будут немножечко конфликтовать?
ТС не думал что два устройства на одном аппаратном порту serial будут немножечко конфликтовать?
Можно чуть по подробнее , а то с этими портами я конкретно запутался
Куда уж подробней? У Uno на Serial висит переходник USB-COM, который может тупо мешать работе L9637D. Соответственно надо использовать пустой порт, например софтовый.
Уважаемый, схема, которую Вы привели и Ваша программа - это 4 большие разницы. Вы хотите что-то читать по CAN - замечательно. Тогда организуйте программный серийный порт (гугл в помощь) на пинах 2 и 3. Вы хотите выводить на I2C дисплей - так у Вас в схеме его нет. Вы хотите получать отчет на штатный серийный порт - так вот Serial.print() это и делает. Пишите программу от простого к сложн ому - сначала напишите вывод на серийный порт, потом допишите дисплей, а уж потом создавайте еще один серийник и подключайте Ваше устройство. По другому - никак.
У вас есть обычный к-лайн юсб адаптер? Если да , то так будет проще понять почему ниче не работает.
Заного собрал схему. Попытался сам написать скетч , опираясь на вышенаписанное. Пришел к тому что в монитор порта приходят мусорные значения ( 0 ... 165...255.. дублируются много раз).
Пока искал , наткунлся на такую информацию. Если залить пустой скетч то Opendiag через данную схему заработает
P.S если не использовать монитор порта (а использовтаь дисплей). Можно ли использовать tx и rx которые на самой ардуинке?(питание брать с повербанка , например)
Проще проц на время выковырять.
Проще проц на время выковырять.
Странно , но если залить пустой скетч и закинуть на пины 0 и 1 ,то опендиаг находит его( работоспособность проверю чуть позже)
Пока искал , наткунлся на такую информацию. Если залить пустой скетч то Opendiag через данную схему заработает
P.S если не использовать монитор порта (а использовтаь дисплей). Можно ли использовать tx и rx которые на самой ардуинке?(питание брать с повербанка , например)
если вы подключили к-лайн к пинам 10 и 11 , то нужно залить такой скетч. Потом подключаете свою связку ардуино-к_лайн к opendiag по юсб проводу и диагностируете.
только вам нужна ещё одна такая связка, чтобы подсмотреть обмен данными. Только после того как подсмотрите, можно уже ардуиной к блоку подключиться.
Проще проц на время выковырять.
В принципе и должно работать. Неинициализированные ноги находятся в третьем состоянии и не должны мешать. Это я для чистоты эксперимента предлагал проц удалить.
Если у проца отгнуть ножку TX, то можно и принимать данные процессором, не мешая остальным.
Пока искал , наткунлся на такую информацию. Если залить пустой скетч то Opendiag через данную схему заработает
P.S если не использовать монитор порта (а использовтаь дисплей). Можно ли использовать tx и rx которые на самой ардуинке?(питание брать с повербанка , например)
если вы подключили к-лайн к пинам 10 и 11 , то нужно залить такой скетч. Потом подключаете свою связку ардуино-к_лайн к opendiag по юсб проводу и диагностируете.
А там точно написано и там и там 10400? Или же в одном 9600?
Везде 10400. Этот скетч нужен для работы через программу на компе, чисто для проверки.
Везде 10400. Этот скетч нужен для работы через программу на компе, чисто для проверки.
Не нравиться ему данный скетч. Перестает видит , когда подключаю к 10 и 11 пину и заливаю данный скетч.
Похоже решение лежит тут - http://arduino.ru/forum/programmirovanie/nestandartnaya-skorost-serial
Похоже решение лежит тут - http://arduino.ru/forum/programmirovanie/nestandartnaya-skorost-serial
То ли я не догоняю , то ли SoftSerial уже давным давно переделан и там нет данной таблицы. Даже в другом месте лежит. Гугления пока ни к чему не привели. Можно ли как-нибудь использовать 0 и 1 пин и выводить данные на дисплей? А если перейти на arduino nano?
кто перестаёт видеть? Opendiag как раз на скорости 10400 и должен подключаться к ЭБУ. Вместо ЭБУ у вас ардуина, она же это всё транслирует через софт-сериал на к-лайн и на ЭБУ. Должно работать.
Вот именно что должно. Но в итоге на 0 1 пинах все работает , а на других пинах через софт сериал нет, говорит что адаптер не обнаружен. Заливаю пустой скетч ( переставляю в 0 1) Opendiag сразу его находит
Замкни 10 и 11 вывод, поставь скорости 9600 везде и проверь эхо в терминале.
У меня софт сериал почему-то не работает
точно из отсутствия эха не работает. Ведь к-лайн физически сам эхо создает.
пробуем такой скетч
опендиаг шлёт на блок два сообщения для начала диагностической сессии:
81 10 F1 82 04
81 10 F1 81 03
читаем описание протокола . У вебасто он очень похожий.
Софт порт не работает одновременно с аппаратным. Поэтому идем в менеджер библиотек и ставим AltSoftSerial. Переключаем адаптер на ноги 8 и 9 и пробуем этот скетч
все там работает. Там одновременность и не нужна. Не путайте человека. И ваш скетч не будет работать, т.к. на соединении Serial шина к-лайн не подключена, и поэтому эхо будет отсутствовать и диагностика заругается на такой адаптер. Нужно эхо программно создавать как я сделал выше.
все там работает. Там одновременность и не нужна. Не путайте человека. И ваш скетч не будет работать, т.к. на соединении Serial шина к-лайн не подключена, и поэтому эхо будет отсутствовать и диагностика заругается на такой адаптер. Нужно эхо программно создавать как я сделал выше.
Я скопировал этот скетч, замкнул ножки 10 и 11, выставил везде скорости 9600 и эха у меня не было. В интернетах много жалоб на этот софт сериал. Заменил его на альсериал и эхо появилось.
короче не парьте мозг. Только что проверил скетч #25 . Всё отлично работает. С этим скетчем ардуина становится просто юсб - к-лайн адаптером. Только скорость нужно самому в скетче выставлять, в отличие от железного юсб-к-лайн.
меня софт ни разу не подвел . Всё всегда работает хорошо.
У меня скетч №13 при замкнутых 10 и 11 не давал эха. Вот и вся его работоспособность. Хотя теоретически должен.
А №25 будет работать на эхо даже если софт сериал вообще убрать))
Как проверить на эхо? #25 скетч залил , но opendiag его не нашел. А нужно ли 1 0 пин замыкать?
перевоткните юсб ардуины, как не нашел? Чето вы не то делаете. Ниче замыкать не нужно
Попробуй мой, из №27. С другой библиотекой и ножками.
Ножки 0 и 1 трогать не нужно вообще.
У меня скетч №13 при замкнутых 10 и 11 не давал эха. Вот и вся его работоспособность. Хотя теоретически должен.
А №25 будет работать на эхо даже если софт сериал вообще убрать))
нафиг вам эхо? Говорю вам, только что проверил. ВСЁ работает. Вы не правильно понимаете это эхо походу. Какая вся работоспособность? Соединил такую связку с обычным юсб к-лайн адаптером. Открыл два терминала порта - данные передаются и принимаются у обоих устройств. Также открыл ардуину вы опендиаге - второй к-лайник открыт в терминале и видит запросы от опендиага. Что ещё надо?!
#27 работать НЕ будет 100%. Там не хватает программной организации эха (которое должна давать шина к-лайн, а её на этом Serial-е нет)
12В не забываем подавать на к-лайн адаптер
Заменить строчку 10 на: if (Serial.available()) {byte inbyte = Serial.read(); Serial.write (inbyte); mySerial.write(inbyte); }
и будет программное эхо.
У меня просто пример этого сериального порта из библиотеки не работает.
Грустно как-то все выходит пока что. Малость ошибся по поводу контроллера ATmega16U2( может важно). Не 25 не 27 скетч не может с OpenDiagom законнектиться. Во время поиска он чуть останавливается на COM3(где ардуина) ( диод на L гаснет в этот момент) и дальше продолжает искать
пробуем так
На K-line подаю +12В без софтсериал все работает , стоит перекинуть ножки и радость уходит.
И так, что имеем. Последний скетч заработал , но не знаю правильно ли. Если цеплять к 0 1 пину то Opendiag показывает все показания. А если цеплять к 8 9 пину(ради интереса поменял) через софт , то Opendiag его находит , но определять данные с него не может. Т.е в настройках он говорит что все хорошо и адаптер найден, а в определении комплектации и параметров он говорит что не может получить данные.
Попробуй так
Насколько знаю у атмега 16u2 соединение с юсб называется SERIAL и используется только для прошивки мк и отладки в юсб. (К ногам не подключен канал), а ноги 0 и 1 это SERIAL1 . Так что не понятно, как и что у вас заработало.
Или вы неправильно сказали про ваш МК. Т.е. 16U2 это просто переходник уартТТЛ-юсб. А основной проц всеже атмега 328
Пусть ТС фотку своей платы выложит)))
Насколько знаю у атмега 16u2 соединение с юсб называется SERIAL и используется только для прошивки мк и отладки в юсб. (К ногам не подключен канал), а ноги 0 и 1 это SERIAL1 . Так что не понятно, как и что у вас заработало.
Или вы неправильно сказали про ваш МК. Т.е. 16U2 это просто переходник уартТТЛ-юсб. А основной проц всеже атмега 328
https://ibb.co/xmvdxzh
Вот фото. Не хочет она на сайт заливаться. Вы правы на счет основного
Исполтзовал #41 скетч , только пины были 8 и 9.
значит к-лайн неправильно у вас работает. в курсе, что RX L9637 нужно цеплять к RX ардуино? А то может перекрёстно подключили. Говорю вам, скетч #25 проверен и работает.
значит к-лайн неправильно у вас работает. в курсе, что RX L9637 нужно цеплять к RX ардуино? А то может перекрёстно подключили. Говорю вам, скетч #25 проверен и работает.
Получается когда мы пишем Softwareserial (8 ,9) мы подключаем к 8 rx а к 9 tx? Сейчас проверю пойду 25.