PDA

Просмотр полной версии : CAN BUS и все что с ним связано.


mishka
03.04.2015, 21:32
Коллеги, привет!
Давно хотел заняться подключением к машине, до этого пробовал к А4 В6, потом к Туарегу и вот Q5. К ней к счастью мне удалось подключиться.
Сначала подключился через разъем диагностики по OBD UART шнурку к Ардуино. Кроме как более или менее адекватного показания температуры ОЖ я не смог получить. С оборотами черт те знает какие показания... может нужна другая формула для их вычисления.При оборотах 1100 показывал около 650 RPM. При холостых вообще ничего не показывал.
После перешел к следующей части балета... подключению через CAN шину путем прямого подключения к шине. Удалось подключиться к шине Infotainment на 100 Kbits/s, и Drivetrain на 500 Kbits/s. потоки данных посыпались. Казалось бы ура...
получив формат данных ID: 82 Data: 73 0CFE 03 00 00 00 00
Осталось только разобраться за что отвечают ID и какие байты в этих ID за какое оборудование.
Даже если брать казалось бы авто одного VAG концерна марки Ауди, то уже понятно становится, что в каждой модели А2, А3, А4 и т.п. ID могут относиться к разному оборудованию. Так вот вопрос в том, есть на форуме единомышленники, кто этим занимался? Дело в том, что люди, которые занимались этим для других машин, их коды не подходят. Пытался подключиться при помощи программы CANHacker. Как то не очень она захотела работать с VCDS 12.12 . Пытался прочекать, что проходит через USB порт через программу USBTRACE путем подключения ELM327 + ScanMaster. Получаю какие то результаты, но найти их при прямом подключении к CAN шине не могу, нет таких ID. Для чего я все это затеял - хочу попробовать вывести нужные мне данные на небольшой экран , чтобы можно было бы контролировать некоторые интересующие меня вещи в процессе эксплуатации. Так же можно упростить схему управления закрытия крышки багажника от ключа и с кнопки двери и прочее ....В общем если кто то занимался подобной темой или есть размышления и наработки помогите.

---------- Сообщение добавлено в 21:32 ---------- Предыдущее сообщение размещено в 21:25 ----------

Для тех кто исках, но не смог найти
Все что связано с шиной CAN BUS AUDI Course Number 971603
http://cycle-planet.com/canbus/971603.pdf
http://www.volkspage.net/technik/ssp/ssp/SSP_238.pdf

sergikoff
04.04.2015, 11:03
ха. вчера как раз замутил тему про протоколы DDP и BAP (http://audi-a3club.ru/showthread.php?t=3995)

Давно маячит тема про FIS control (http://www.fis-control.de/)
Хочется попробовать самим реализовать...

итак... надо рюхнуть протокол, по которому rns-e шлет картинки на экран приборки.
конкретизируем цель: разрюхать протоколы DDP и BAP

Если получится, то можно будет реализовать в том числе и FIS control

На данный момент имеем:
собственноручно спаяный SPI-CAN, подключенный к малинке (http://www.raspberrypi.org/)
по софту: socketcan (в нем есть candump, и готовый iso-tp (http://en.wikipedia.org/wiki/ISO_15765-2))

из инет ресурсов:
canhack.de (тут чуваки хакают каншину)
вот подходящая темка: http://www.canhack.de/viewtopic.php?t=988

подключился через разъем диагностики по OBD UART шнурку к Ардуино. Кроме как более или менее адекватного показания температуры ОЖ я не смог получить. С оборотами черт те знает какие показания...
в диагностическом разъеме общение только с гейтвеем.
Чтобы полноценный кан увидеть, надо подлючаться к башке сзади...

mishka
04.04.2015, 18:30
Да, собственно говоря я туда и врезался так сказать. Ибо, у меня есть информация, что если подключаться к Гейтвею тоего нужно предварительно раскачать, путем отправки каких то временных уровней сигналов, хотя это может относится к KWP2000.
Просмотрел софт который обрабатывает OBD UART (ELM327) то там вроде все как просто, Подключаем, отправляем запрос ATI (типа Кто здесь? ) и ждем ответа, в котором будет содержаться строка "ELM327" дальше вроде после того как признались друг другу кто есть кто... просто тупо отправляются запросы типа "01 05" на температуру жижы охлаждающей. В настройках задаются только скорости обмена шнура и компа, а вот на какой скорости они договариваются общаться мне не известно, догадываюсь, что 10400 KBits/sec, а может и 15765 KBits/sec
Однако если подключиться после Гейтвея то там четко нужно указывать скорость обмена либо 500 либо 100 KBits/sec в зависимости от шины.
Я пока еще не работал с Малиной, она конечно же поинтереснее, но по моему она на Linux'е ? Ардуино на больше смахивает на С.
За наводки спасибо, но у меня никак не получается подключить CANHACKER. Софт видит шнурок VCDS 12.12 но упорно не хочет коннектиться... не понимаю по чему?? Подключаю ELM327, тоже самое. выставляю различные вариации скоростей обмена между портами ни в какую...может кто работал с этим, подскажите в чем подвох?
По поводу протоколов DDP & BAP почитаю, я так далеко еще не заходил. ))

sergikoff
04.04.2015, 18:49
а зачем вообще VCDS?
к башке с тылу подрубился к кану и наслаждайся...

у тебя конечная цель какая? что хочешь сделать?

mishka
04.04.2015, 20:12
VCDS хотел использовать для сниффинга по USBTRACE хотел выудить IDшники по оборудованию, что к чему относится. к примеру, какой ID отвечает за RPM, какой за Vehicle speed etc.. Хочу, для начала вывести на небольшой экран кое какие данные по работе авто, чтобы не чекать их VCDS. Но в целом твоя идея с работой над приборкой тоже заинтересовала.
В USBTRACER'e я вижу запросы и ответы, но расшифровать их не могу. Вообще меня даже смутило что правильно ли я подключился, к той ли шине. их же 3 шт которые могут читаться на 500 kb/s. Если не ошибаюсь то, у нее цвет оранжево-черный. По моему это моторная шина.
Да, я так и сделал подключился напрямую к кан шине.. Я вижу все коды, но не могу идентифицировать кто есть кто... У тебя есть какие нибудь наработки к определении по ID кто есть кто? Для начала мне хотя бы определиться со скоростью и RPM. Я понимаю, что это банально, что это видно на приборке, но мне хотя бы для старта понимания.

ShMN4161
04.04.2015, 21:59
сниффинга по USBTRACEЯ, вань,такую же хачуу...
Парни,хоть слово по-русски...

mishka
04.04.2015, 23:35
Я, вань,такую же хачуу...
Парни,хоть слово по-русски...
Сниффинг - сканирование потока данных. просто если этим заниматься то проще выразиться терминами общепринятыми в этих делах. Никого не хотел обидеть этим.

ShMN4161
05.04.2015, 10:45
Никого не хотел обидеть этим. Да никого и не обидел - понятно, что это специфические термины,просто уж совсем мудрено,для меня во всяком случае...Читаешь как увлекательный роман на ...китайском языке.

mishka
05.04.2015, 13:51
Да никого и не обидел - понятно, что это специфические термины,просто уж совсем мудрено,для меня во всяком случае...Читаешь как увлекательный роман на ...китайском языке.
Хорошо, тогда попробую расписать, что и как детально. Потому как вдруг еще кому то захочется увлечься этим же. Мне это кажется интересным в силу моей специфики работы в направлении электроники. А программирование приходится по ходу изучать. ))

mishka
05.04.2015, 19:07
Начну с начала, для тех кто заинтересуется или захочет повторить идею. Так как люди любят больше наблюдать и лицезреть постараюсь использовать побольше картинок, при возможности буду добавлять. За основу взял плату Leonardo из семейства Arduino. В качестве базы можно взять и Arduino UNO или MEGA 2560. Разница лишь в цене и программных корректировках управляющих выводов и передачи данных.

http://www.fayloobmennik.net/4759971]Leonardo.PNGhttps://cloud.mail.ru/public/66eada08c3e4/Leonardo.PNG7182

Для создания интерфейса с CAN шиной автомобиля использовал также шилд (плату) совместимую с семейством Arduino CAN BUS Shield V1.2 ElecFreaks.com

7185

Так как плату подключал к машине не как конечное устройство, то резистор R выпаял, он нужен для согласования с сетью. т.е. по сути он является неким элементом обозначающим, что после этой платы никого нет - я последний в цепи, он (резистор) называется терминатор. Его сопротивление должно быть 120 Ом, но я его не измерял. Подключение сделал напрямую к CAN BUS сети машины. Для этого снимаем бардачок и слева в район печки видим коробку черную с разъемом красного цвета и оранжевыми проводами - это диагностический интерфес шины данных J533. Он объединяет различные сети данных машине. На рисунке с машиной обозначено как номер 22

7186

7187

7188

Выключаем зажигание, ждем минуту, для того чтобы отключилась шина CAN BUS, которая отвечает за связь с мотором. Она не поддерживает связь после выключения зажигания. А вот если мы захотим подключиться к шине Комфорта, то она работает всегда, ибо как же нам тогда будет открыть двери если она отключится? :-)
Вытаскиваем разъем и видим на нем кучу казалось бы одинаковых оранжевых проводов, однако, видим, что они парно сплетены как компьютерные провода и на всех имеются разного цвета полоски - зеленые, серые, черные и т.п. По полоскам они и различаются, какие провода какие данные пропускают. Нам, для примера, нужно подключиться к блоку управления двигателем, чтобы получить от него данные о температуре масла в коробке или более точной температуре двигателя. Потому что стрелка на приборной панели может показывать температуру +- 10С. ну или какие либо еще данные связанные с мотором. Для этого ищем пару с проводами на которых на одном есть черная полоска, а на другом коричневая.
На схеме это обозначено как

7189

Резать провода не рекомендуется, для подключения достаточно снять немного изоляции на каждом проводе и желательно на разных участках как проводом как можно дольше друг от друга, чтобы не произошло случайного короткого замыкания. Не хотелось бы чтобы на ходу они закоротились между собой и мотор вашей машины заглох на скорости 200 км/ч на автобане естественно :\"\":. Прикручиваем наши два провода, желательно взять такое же сечение и желательно чтобы они тоже были скручены в витую пару. Это необходимо для того чтобы не было наводок на эти провода от бортовой сети и прочего оборудования. Напряжение в сети около 5 вольт. Так что диэлектрические перчатки одевать не стоит, если вы будете подключаться к шине, которая работает всегда (комфорт). Затем эту пару проводов подключаем к синему разъему на плате CAN модуля. соблюдая правильность подключения CAN H и CAN L. Провод с черной полоской - CAN H , с коричневой CAN L на плате контакты подписаны.
Замечу, что соединение с массой автомобиля не требуется, так как данные передаются исключительно по этим проводам и общая масса не нужна при подключении к ноутбуку. Подключаем к плате Leonardo провод USB и к ноутбуку. Если на плате загорелись светодиодики, то уже хорошо... Далее будем заливать программу, чтобы Leonardo смог увидеть данные, которые бегут по этим проводам.

Продолжение следует...

mishka
05.04.2015, 21:16
Продолжим наш марафон....
Для того чтобы получать данные от машины, мы должны настроить наш порт на плате со скоростью передачи данных машиной... для каждой шины он свой. И если он выставлен не правильно, то мы просто не получим данные от машины. Для нашего примера, т.е. шины данных мотора устанавливаем скорость 500 Kbit/sec . Для шины комфорта она равна 100 Kbit/sec . В нашем случае, нам нужно установить сначала программу на ноутбук, с помощью которой мы будем редактировать и заливать саму программу. Ее мы найдем на сайте http://arduino.cc/ там в дистрибутивах отыскиваем нужную версию программы 1.0.5 , так как последняя не подойдет нам. http://arduino.googlecode.com/files/arduino-1.0.5-r2-windows.exe (http://arduino.googlecode.com/files/arduino-1.0.5-r2-windows.exe)
Скачиваем, устанавливаем.
Запускаем программу. Видим интерфейс программы. В нем есть окно, в котором собственно и должен быть наш код.

7192

Затем мы копируем программу в это окно.

#include <mcp_can.h>
#include <SPI.h>

long unsigned int rxId;
unsigned char len = 0;
unsigned char rxBuf[8];

MCP_CAN CAN0(10);

void setup()
{
Serial.begin(9600);
if(CAN0.begin(CAN_500KBPS) == CAN_OK)
{
Serial.println("can init ok!!");
}
else
{
Serial.println("Can init fail!!");
}

}

void loop()
{
CAN0.readMsgBuf(&len, rxBuf);
rxId = CAN0.getCanId();

Serial.print("ID: ");
Serial.print(rxId, HEX);
Serial.print(" Data: ");
for(int i = 0; i<len; i++) // Print each byte of the data
{
if(rxBuf[i] < 0x10) // If data byte is less than 0x10, add a leading zero
{
Serial.print("0");
}
Serial.print(rxBuf[i], HEX);
Serial.print(" ");
}
Serial.println();
}

Но, чтобы это все заработало мы должны закачать нужные файлы, так называемые библиотеки в наш компьютер.

Скачиваем файл :
https://cloud.mail.ru/public/ec4187dacb97/CANBUS.zip

Распаковываем его и получаем из архива папку CANBUS внутри которой
будет 7 файлов и одна папка.
Эту папку (CANBUS) копируем в нашу программу на компьтере
у каждого свой путь будет, последняя часть одинаковая -
...\Program Files\Arduino\libraries
Прям так с ногами ее туда и запихиваем. :crazy:

Делаем настройки нашего железа... в меню программы выбираем СЕРВИС, далее выбираем ПЛАТА и там выбираем ту плату которую мы используем. В нашем случае это Leonardo.

7194

Устанавливаем порт соединения с нашей платой. Для этого она должна быть подключена к компьютеру.
Выбираем СЕРВИС, далее - ПОРТ и находим порт нашей платы. Скорее всего он будет больше чем COM2.

7195

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

7193

Если внизу появилась надпись компилирование выполнено, то это значит Ура! программа должна работать.

Затем наживаем вторую кнопку со стрелочкой для начала заливки нашего софта.

Ждем окончания загрузки платы. Желтая полоска добежит до конца и исчезнет. При этом внизу не высветится никаких сообщений оранжевого цвета.
Значит все хорошо.
После чего на нашей плате CAN должны начать мигать два красных светодиодика рядом с синим разъемом куда подключены провода от машины.
Это хороший признак того что мы идем верным путем.
Для того что бы увидеть, что же все таки скрывается за этими мигающими светодиодиками RX и INT , нажимаем кнопку монитора порта находится в правом верхнем углу

7196

Мы видим бегущие данные типа


ID: 6C0 Data: 01 40 04 00 00 0F 03
ID: 585 Data: 00 00 00 00 00 00 00 80
ID: 309 Data: 4A 00 00 40

Ура, мы прошли второй этап нашего марафона ... но до Финиша еще далеко..

Да, совсем забыл сказать, что все что вы делаете - выделаете на свой страх и риск. Держитесь поговорки - "Не уверен - не обгоняй!" :crazy:

DUK63
06.04.2015, 13:21
mishka, А вот на эти приблуды (http://canny.ru/) смотрел?

sergikoff
06.04.2015, 18:16
нарыл немного доков для самообучения...
загрузил в файловый архив форума:
SSP 238 (Data Exchange On The CAN Bus I) (http://www.club-q5.ru/forum/downloads.php?do=file&id=62)
SSP 269 d1 (Data transfer on CAN data bus II) (http://www.club-q5.ru/forum/downloads.php?do=file&id=63)
CAN Specification (v. 2.0) (http://www.club-q5.ru/forum/downloads.php?do=file&id=64)

з.ы. есть еще оч полезный файл (pdf), но не лезет в файловый архив (весит 22 мега)

mishka
06.04.2015, 19:19
Парни, Спасибо вам, буду разбираться! )

mishka
06.04.2015, 22:20
mishka, А вот на эти приблуды (http://canny.ru/) смотрел?

Посмотрел штуковину. В сущности, получается, что это такой же контроллер, только собран более компактно. И в него загружаются настройки для корректного подключения к разным брендам авто.

Но, в любом случае спасибо, за помощь. )

В моем контроллере мне настройки приходится менять самому в программе, в зависимости от типа шины к которой я подключаюсь у них как я говорил разные скорости передачи информации.

И так в продолжении марафона....

Все те коды что мы видим на экране монитора или иного устройства отображения информации - это и есть значения состояния оборудования.
Получается, что ID - это и есть некий идентификатор какой то части оборудования, через который мы можем обратиться к машине для запроса данных. Если мы непосредственно изменим нашу программу для тог чтобы мы могли отправлять в контроллер машины данные то тем самым образом мы повлияем на ее состояние. Проще говоря, мы этими командами сможем опустить стекло в двери, открыть крышку багажника или закрыть ее, поморгать фарами и даже подудеть в сигнал ))) но это все остается лирикой пока мы не разберемся какие коды к чему относятся. Если присмотреться к первым знакам ID, а каждый символ - это есть так называемый байт информации, в ID мы видим три байта, то получается, что их можно разделить на какие то условные группы по оборудованию. Скажем, к примеру, первая цифра 6 означает что мы получаем данные с приборной панели, другая цифра или буква будет означать другую группу оборудования.

Практическим путем мне удалось определить только лишь данные которые передаются часами, т.е. показания времени.
т.е. прочитав блок 0х62F 44 51 0F 31 0F Я отследил, что значения в тот момент равные 0F 31 были равны текущему показанию времени 15:49. Как это определить? Открываем калькулятор и переводим его в режим работы программиста или инженерный в зависимости от вида операционной системы. Переключение делается в меню ВИД в калькуляторе. Для начала выбираем шестнадцатеричную систему путем нажатия кнопки HEX. Вводим в регистр число F так первым ноль нам не удастся ввести. Затем выбираем кнопку DEC для перевода этого числа в десятеричную систему и получаем значение 15. тоже самое сделаем с числом 31 и получим 49. т.е. у нас получилось реальное значение времени 15:49 и при переходе на следующую минуту (50) мы во втором байте получим шестнадцатеричное число 32.
Но это касается только данных которые отображаются через один байт, т.е. байт 0F равен 15, а байт 31 равен 49.
Но бывают значения которые выражаются двухбайтовым числом, например количество оборотов или количество километров.
тогда наше число приобретает двухбайтовое значение 0х02F8 что собственно будет равно десятичному числу 760, скажем оборотов в минуту. Но в нашей строчке данных эти числа будут перевернуты. т.е. сначала будет идти F8, а потом 02. Это связано со сложностью программного выражения чисел, так называемые старший байт и младший байт.

Подводя некоторые итоги поиска наших данных. вот только таким образом мы можем определить какие значения к чему относятся. Практически сканируя каждый адрес ID. Для этого существуют такие программы как CANHACKER которые показываю значения адресов и нам будет легче определить, где меняется значение когда мы , скажем открываем дверь и у нас срабатывает концевик открытия двери, хотя ведь это может стать сигналом для включения плафона света в салоне...

На этом пока все.

В двух словах объяснил то, что я знаю. Если я в чем то ошибаюсь, то я буду рад выслушать ваши комментарии, так как они будут полезны не только для меня.

P.S. Позже сделаю видео как это выглядит живьем )

sergikoff
07.04.2015, 08:53
вот еще добыл русскоязычных SSP

Обмен данными посредством шины CAN I (http://www.club-q5.ru/forum/downloads.php?do=file&id=65)
Обмен данными посредством шины CAN II (http://www.club-q5.ru/forum/downloads.php?do=file&id=66)
Новые технологии обмена данными – LIN, MOST, Bluetooth (http://www.club-q5.ru/forum/downloads.php?do=file&id=67)

---------- Сообщение добавлено в 08:53 ---------- Предыдущее сообщение размещено в 08:44 ----------

и вот еще полезненького

sergeynik с турбо-кваттро запалил на одном ресурсе (http://audiforum.us/threads/id-codes-can-protocol.4999/)
по айдишникам инфа:

hello
Has started to understand with the report here that it was possible to find.
But there are still unknown to me codes, help if who knows
0x223 BNS-Button ????
0x461 tv ?????
0x543 rear camera???
0x602 video ????
0x6c0 ???
0x6c1 ???
0x436 ???
0x651 ???
0x428 ???
0x653 ???
0x627 ????
0x604 ????
0x621 ???


и еще под спойлером:

#define VW_MULTI_RUL 0x5C1
/*
ID DLC Data
5C1 1 06 Vol up
5C1 1 07 Vol Down
5C1 1 0A Menu
5C1 1 1A Phone
5C1 1 22 Arrow Up
5C1 1 23 Arrow Down
5C1 1 28 OK
5C1 1 2B Mute
5C1 1 00 Button is released
*/
#define AUDI_MULTI_RUL 0x5C3
/*
5C3 2 39 00 none
5C3 2 39 02 Prev
5C3 2 39 03 Next
5C3 2 39 04 Scan Up
5C3 2 39 05 Scan down
5C3 2 39 06 Volume+
5C3 2 39 07 Volume-
5C3 2 3C 2A Phone button pressed
5C3 2 3C 00 Phone button released, changes to 39 00 after a second or so
5C3 2 3A 1C Mode button pressed
5C3 2 3A 00 Mode button released, changes to 39 00 after a second or so
5C3 2 39 01 Mode button pressed before it turns back to 39 00
5C3 2 3A 1A up/down button pressed within 2 seconds after pressing Mode button
5C3 2 3A 02 up within 2 seconds after pressing Mode
5C3 2 3A 03 down within 2 seconds after pressing Mode
5C3 2 3B A7 vol up/down pressed
5C3 2 3C 07 vol down after pressing phone button
5C3 2 3C 06 vol up after pressing phone button
*/
// _______________________________ КОНЕЦ МУЛЬТИ РУЛЬ______________________________________________

// _______________________________ ПАНЕЛЬ ПРИБОРОВ__________________________________________ ____
#define INSTR_DATE_TIME 0x623
/*
h623 ДАТА И ВРЕМЯ, 8 byte, 100ms
- byte 0: ??
- byte 1: Hour
- byte 2: Minute
- byte 3: Sekunde
- byte 4: Tag
- byte 5: Monat
- byte 6: Jahr (1./2. Stelle)
- byte 7: Jahr (3./4. Stelle)

ID 623 : Uhrzeit (einmal pro Sekunde)
--------------------------------------
623h 8 05 19 44 01 13 09 20 06 = 19:44:01 13.09.2006

*/
#define INIG_STATE 0x271
/*
h271 зажигание, 1 byte, 100ms
-h10: Fzg. unverschlossen, Schluessel steckt nicht ключ снят
-h11: Fzg. unverschlossen, Schluessel steckt in Pos. 0, Zuendung aus
-h01: Fzg. unverschlossen, Schluessel steckt in Pos. 1, Zuendung aus
-h05: Fzg. unverschlossen, Schluessel steckt in Pos. 2, Zuendung aus
-h07: Fzg. unverschlossen, Schluessel steckt in Pos. 3, зажигание включено
-h0B: Fzg. unverschlossen, Schluessel steckt in Pos. 4, зажигание включено, стартер крутит
*/
#define Light_STATE 0x635
/*
h635 Licht, 3 byte, 100ms
-h 00 00 00: Licht aus, 58d 100% Dimmung
-h 64 00 00: Licht aus, 58d 0% Dimmung
-h 64 64 00: Licht an, 58d 0% Dimmung
ID 635 : Licht Dimmung (noch nicht fertig)
*/
#define VIN_IDENTIF 0x65F
/*
h65F Fahrzeug Ident Nummer, 8 byte, 100ms, vier Zeilen je 8 byte
1. Zeile: Z 'WAU
2. Zeile: VT68E34
3. Zeile: Z 'WAU
4. Zeile: Axxxxxx

ID 65F : Fahrgestellnummer (alle 200ms eine Zeile)
--------------------------------------------------

65Fh 8 00 00 00 00 00 57 41 55 = WAU
65Fh 8 01 5A 5A 5A 38 50 58 37 = ZZZ8PX7
65Fh 8 02 41 XX XX XX XX XX XX = A0XXXXX

*/

#define PROBEG 0x65D

/*
ID 65D : Kilometerstand (Datum+Uhrzeit ?)
-----------------------------------------

65Dh 8 7E A4 1D 60 C8 B8 60 1A

1+2 :
A4 1D = LSB MSB = 7588km Gesamt

6+7:
6 Bit 8 ist ein und aus im Sekundentakt
6 unteren Bits zahlen immer rauf
7 geht von 00 bis 1D (0..29)

Beispiel1: 7E A4 1D 60 C8 E8 A8 03 14:20 17.09.2006
Beispiel2: 7E A4 1D 60 C8 E8 AA 05 14:21 17.09.2006
Beispiel3: 7E A4 1D 60 C8 E8 BE 03 14:31 17.09.2006

*/


#define SPEED 0x351
/*
351h 8 45 00 00 00 00 75 7B 10 100 1795 Geschwindigkeit speed

h351, Geschwindigkeit, 8 byte, 100ms
- byte 0: h00 vorwaerts, h02 rueckwaerts
- byte 1/2: Geschwindigkeit
- byte 4/5: Wegstreckenimpuls

*/
#define TANK_FUEL 0x621
//621:
// byte 0: anzeigen aus dem kombi intrument
//byte 3: tankinhalt+ warnung

// _______________________________ КОНЕЦ ПАНЕЛЬ ПРИБОРОВ__________________________________________ ____

// _______________________________ navi______________________________________________
#define RADIO_ONLINE 0x664
/*
ID 664 : Radio
----------------------

664h 8 01 01 12 00 00 00 00 00

0:
00 Radio aus
01 Radio ein
*/

#define RADIO_STATUS 0x660

/*
ID 660 : Frequenz, Modus:
-------------------------

660h 8 01 0C 4A 09 04 24 A3 D3

0:
00 Radio aus
01 Radio an und UKW 100kHz)
02 Radio an und MW (9kHz)
03 Radio an und LW (9kHz)

1: Mono / Stereo - Kennung
01 Mono
0C Stereo

2:
4A unbekannt

3: RDS
01 RDSaus
09 Sender hat RDS
29 Sender hat kein RDS

4..5:
Aufbau LSB MSB, Frequenz in kHz oder MHz*100
99 00 153kHz
A2 00 162kHz
AB 00 171kHz
17 01 279kHz

13 02 531kHz
1c 02 540khz
42 06 1602kHz

2e 22 87,5Mhz (87500)
38 22 87,6MHz (87600)
42 22 87,7MHz (87700)
30 2a 108MHz (10800)

6..7: RDS Sendercode (pi_id) LSB MSB
0A 13 Die neue 107,7
04 D7 SWR4 TU
0D D7 Radioton
04 DD SWR4 HN
A2 D5 SWR2 BW
63 D3 HR3
A3 D3 SWR3
0A 13 Die neue 107,7
Kann hier eingesehen werden:
http://www.myradiobase.de/fmlist/ul_login.php
*/




#define AUDIO_SOURSE 0x661
/*
h661 Radio/Navi, 8 byte, 100ms
beim RNS-E wird hier zum Beispiel angezeigt, in welchem Mode das Geraet ist
-h 81 01 12 A0 00 00 00 00 FM/AM
-h 81 01 12 2F 00 00 00 00 SAT
-h 81 01 12 A5 00 00 00 00 CD
-h 81 01 12 A4 00 00 00 00 MP3
-h 81 01 12 37 00 00 00 00 TV
-h 81 01 12 3A 00 00 00 00 PHONE

ID 661 : Radio Audio-Quelle:
----------------------

661h 8 01 01 12 A0 00 00 00 00

0:
00 Radio aus
01 Radio an

03:
A0 Radio
A1 TP (Traffic Programm) Speicher Wiedergabe
A5 CD-Player
38 CD-Wechsler

*/
#define RADIO_STATUS2 0x663

/*
ID 663 : Radio Audio-Quelle:
----------------------

663h 8 01 01 12 00 A5 00 00 00

00:
00 Radio aus
01 Radio an

04:
A0 Radio
A1 TP Memo Wiedergabe
A5 CD-Player
38 CD-Wechsler
*/

#define DIS_TEXT_line1 0x261
#define DIS_TEXT_line2 0x263
//h261/h263 erste/zweite Zeile im FIS, wenn Radio aktiv, 8 byte, 100ms

#define FIS_TEXT_line1 0x265
#define FIS_TEXT_line2 0x267
//h265/h267 erste/zweite Zeile im FIS, wenn FSE aktiv, 8 byte, 100ms


#define FIS1_TEXT_line1 0x363

//ID 363 : Zeile 1 FIS (alle 800ms)
//363h 8 53 57 52 33 20 20 20 20 = SWR3 Space Space Space Space

#define FIS1_TEXT_line2 0x365

//ID 365 : Zeile 2 FIS (alle 800ms)
//365h 8 46 4D 20 31 20 20 20 20 = FM Space 1 Space Space Space Space

// _______________________________ КОНЕЦ navi______________________________________________

// _______________________________ motor bus______________________________________________
#define ESP_rate 0x0c2
#define ABS_mess 0x1a0
#define ENGINE_SPEED 0x280
//rprintdec16((can_buff[2]<<10)|(can_buff[1]<<2));
#define FUEL_LEVEL 0x320
//rprintfdec((can_buff[2]&0x7f));
#define FUEL_RASHOD 0x480
#define TEMPERATUREN 0x420
// rprintfStr("Temp ext= "); rprintfdec((can_buff[0]-100)/2);z
// rprintfStr("Temp coolant= "); rprintfdec((can_buff[3]-100)/2);

кнопки на руле проверяли - рабочие.
мафон отзывается на них...

DUK63
07.04.2015, 09:22
Мы видим бегущие данные типа я буду рад выслушать ваши комментарии
Добавь в программу перевод кодов в символы.
Или сохраняй дампы в файле и смотри в HEX-редакторе при разных настройках кодировок (ASCII, UTF-8). Тогда можно будет выловить явно текстовые посылки, например название трека или радио от музыки в приборку

А подключится на диагностическую шину (шину на разъем OBD-2) пробовал? Хакать посылки VCDS на USB - бесполезно, КМК, т.к. там совсем другие, хитроже...лт..ые, протоколы. А вот отследить, что собственно шнурок посылает на гейт и что получает, думаю, можно попробовать.
В свое время, когда ковырял Lacetti, делал так: дилерский сканер подключался к машине через K-Line снифер. Снифер тупо передавал данные в обе стороны без обработки, просто протоколировал поток. Затем научным тыком выяснялись посылки от сканера и ответы от ЭБУ. Далее писался эмулятор ЭБУ, к которому подтыкался дилерский сканер. Сканер посылал запрос, эмулятор отвечал полной "херней", главное, что бы размер посылки и КС были правильные. И меняя данные, передаваемые эмулятором, выясняли, какой байт(-ы) за что отвечает и вычисляли размерность или коэффициент пересчета.
Понятно, что там было проще, протокол известен (KWP2000), неизвестна была только набивка данными, т.к. это зависит от конкретного автомобиля.

Думаю, что можно пойти именно этим путем - VCDS запрашивает - эмулятор отвечает и в VCDS смотрим, что же мы там ответили :)

Результатом этой работы с лачиком стал БК GF-241 ( http://www.lacetti-club.ru/vb_forum/showthread.php?t=4708 )

sergikoff
07.04.2015, 10:20
А подключится на диагностическую шину (шину на разъем OBD-2) пробовал? Хакать посылки VCDS на USB - бесполезно, КМК, т.к. там совсем другие, хитроже...лт..ые, протоколы. А вот отследить, что собственно шнурок посылает на гейт и что получает, думаю, можно попробовать.
Работа через OBDII-разъем как раз не очень интересна, т.к. общение только через гейтвей идет абсолютно неполноценное...
интересно именно полностью конторолировать все шины, тогда возможности раскрываются огого какие...

DUK63
07.04.2015, 10:27
Я имел в виду "начать с этого", пока все очень туманно, т.к. в этой шине нет постоянно летающих данных, только по запросу от шнурка. А когда будет опыт, когда и если удастся своим девайсом считывать, допустим, блоки измеряемых величин, тогда уже лезть на другие, постоянно работающие шины. Хотя, если попытаться разобраться в инфе, которую ты (точнее sergeynik) выдал чуть раньше - м.б. можно и на рабочую шину цепляться.

sergikoff
07.04.2015, 10:35
м.б. можно и на рабочую шину цепляться.
думаю, НУЖНО именно так делать...
через гейтвей оно типа так, но не так...

которую ты (точнее sergeynik) выдал чуть раньше
пост кстати от 2007 года... думаю, у него уже полная инфа есть)

потеплеет немного... на даче в выхи потихонечку будем ковырять...

sergikoff
07.04.2015, 16:15
вот еще файлик залил...
CAN univortrag (https://yadi.sk/i/Hg6LcS1SfpfHu)
22 мега... жалко, что нельзя залить на форум...

mishka
07.04.2015, 20:04
Парни, приятно, что не только мне одному это интересно... Обязательно почитаю вашу инфу... за нее спасибо отдельное. По поводу Сергейника, я вчера ему написал в личку по поводу этой информации на сайте ауди клаб, но не знаю когда дойдет до него эта информация и будет ли у него время ответить для меня. Теоретически можно и позвонить ему ибо он работает как раз в Питере на ш.Революции. Я был в его компании. они в действительности занимаются Ауди...
Ну да ладно, это лирика....
Парни вы мне подали идею о том, что в действительности, я может не вижу те данные которые хочу увидеть потому что я их не запрашиваю. Тот же самый ID 0x351 о значении скорости, я его не вижу он не выдает данные. Хотя я подключался к шине Комфорта и там тоже нет его. В большинстве своем ID по номерам похожи, что в одной шине, что в другой (мотора). Может имеет смысл сформировать запрос на конкретный ID и после этого послушать шину...? Вообще в реальности удобнее было бы пользоваться каким нибудь софтом, который может их как CANHACKER считывать, вплоть до фильтрации конкретных ID и отправки на них данных.
Да, в предыдущих постах я не стал описывать ситуацию о составе самого Can сообщения, где указывается длинна сообщения , количество байт и прочее. Иначе конечно же машине будет не понять что мы хотим ей сказать )
т.е. может получиться что мы отправляем наши байты не по тем адресам... что может вызвать нежелательный эффект в работе чего либо.
Но все равно желание разобраться "Как это работает" - оно есть )))
P.S. А может длинные файлики можно заливать как то частями через архивацию? неудобно конечно же, но зато работает ))

sergikoff
08.04.2015, 00:18
По поводу Сергейника, я вчера ему написал в личку по поводу этой информации на сайте ауди клаб, но не знаю когда дойдет до него эта информация и будет ли у него время ответить для меня. Теоретически можно и позвонить ему ибо он работает как раз в Питере на ш.Революции. Я был в его компании. они в действительности занимаются Ауди...

Понимаешь, для него - это бизнес.
Пост, на который я ссылку давал от 2007 года. Я думаю н давно уже всё разрюхал.
Он немного дает подсказки на своем форуме турбо-кваттро. Думаю врядли он прям все тебе выложит как на духу... но попытка - не пытка)

У меня к этой теме вопросец:
ни у кого нету приборки полудохлой на время... чтобы не у машины этим заниматься, а дома на столе разложиться... с возвратом и бережным использованием...

mishka
08.04.2015, 13:02
Сергей, подскажи, я просто пока не в курсе, к приборке можно подключиться автономно, даже если она не в сети, а просто подключена к сканеру? т.е. при прямом подключении она тоже будет отправлять какие то данные сама или она будет будет ждать запрос?

sergikoff
08.04.2015, 15:58
ну вот у нас мафон на столе, подключен только мой шнурок. Когда включаешь - тупо спамит, но потом перестает (видимо ожидает получить такой же спам от других блоков)
Есть ощущение, что во внутренней сети нет никаких особых протоколов и просто летает инфа с определенной периодичностью и нет запросов (ну возможно они есть для диагностических целей), но и то не факт.
Возможно, протокол запрос-ответ сделан только для гейтвея, а тот, слушая все шины просто может выдавать нужные ответы

....но это лишь догадки... это дело не сниффили....

mishka
08.04.2015, 18:27
Сегодня написал Сергейнику на сайт Турбо, но как то слабо верится, что он ответит. Думаю ему не до этих мелочей. Ответит буду благодарен за оказанное уважение. В принципе о многом не просил.
Вообще из понимания моего в промышленной электронике, есть некоторое устройство называемое Master(главный) оно собственно и опрашивает всех так называемых Slave (вторичный). Поэтому возможно, что в роли Мастера в сети CanBus в машине выступает какое то устройство, тот же самый гейтвей, но у него должны быть какие то мозги, для того чтобы он отправлял запросы. Я еще не дошел до раздела где об этом идет речь. Если мы просто подключаем устройство к питанию, оно опять же теоретически должно отправить в сеть какую то информацию о своем присутствии для идентификации себя в сети, что типа я здесь у меня такой вот адрес если что я здесь есть. После чего вполне вероятно Мастер перекинется пару слов с ним для настройки соединения. Далее все устройства переходят кроме мастера в режим "я вас слушаю", и если они идентифицируют что обращение адресовано к ним - они отвечают. В противном случае игнорируют.

У меня все еще висит вопрос кто нибудь пользовался CANHACKEROM или чем то что позволяет слушать сеть и отправлять в нее сообщения? Как им подключиться к сети? Потому как не очень удобно отслеживать только по одному адресу. А если сниффить все подряд то тогда не видно изменения.

sergikoff
08.04.2015, 20:25
схема "мастер-слейв" (о чем ты говоришь) - это подходит для какого-нить RS-232, RS-485 (там нет арбитража, т.е. если два устройства будут передавать одновременно)
а на кан-шине встроенный арбитраж
В SSP про это расписано, читай внимательнее....
т.е. там нет проблемы одновременной передачи, потому мастер-слейв и необязательно должен быть 8-)

TheTERMINATOR
08.04.2015, 20:28
В LIN шине еще остался мастер-слейв...

sergikoff
08.04.2015, 20:30
ну много где есть....
особенно, когда она последовательная однонаправленная
просто КАН - немного другая история :-)

mishka
11.04.2015, 18:16
Ура! покопавшись в CAN Bus, я все таки нашел те байты что отвечают за скорость и прочую информацию попутно в этом адресе.
0x3С3 00 21 00 10 16 CE 0A 14
что мы имеем:
00 21 = 3 км/ч
CE 0A = ACE = 2766/ 4 = 691 RPM
16 - включен реверс (15 - включен паркинг, 17 - нейтралка, 18 - драйв, 1Е - драйв мануал, 19 - драйв спорт
10 - ручник отпущен
18 - взвод/отпуск ручника
14 - ручник взведен.

Конечно все будет выглядеть проще если это сообщение перевести в двухбайтовое выражение.


0000 0000 0010 0001 0000 0000 0001 0000 0001 0110 1100 1110 0000 1010 0001 0100

0101 - Паркинг
0110 - Реверс
0111 - Нейтраль
1000 - Драйв
1001 - Драйв спорт
1110 - Драйв Мануал

и так далее .

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

mishka
11.04.2015, 21:03
Вот, получил исходный код подводя вышесказанное. В качестве примера взял получение RPM

#include <mcp_can.h>
#include <SPI.h>
int A;
int B;
int rpm;
long unsigned int rxId;
unsigned char len = 0;
unsigned char rxBuf[8];
MCP_CAN CAN0(10);
void setup()
{
Serial.begin(9600);
if(CAN0.begin(CAN_100KBPS) == CAN_OK)
{
Serial.println("can init ok!!");
}
else
{
Serial.println("Can init fail!!");
}
}
void loop()
{
if(!digitalRead(2))
{
CAN0.readMsgBuf(&len, rxBuf);
rxId = CAN0.getCanId();
if (rxId == 0x3C3){
A = (unsigned char)rxBuf[0x06],DEC;
B = (unsigned char)rxBuf[0x05],DEC;
rpm=(A*256+B)/4;
Serial.println(rpm);
Serial.println();
}
}
}

В реальности видим количество оборотов мотора.
:-)

Продолжаем расщеплять CAN Bus дальше.

Платформа Arduino по моему мнению является самой дешевой и доступной, поэтому на ней легче всего экспериментировать.

---------- Сообщение добавлено в 22:03 ---------- Предыдущее сообщение размещено в 21:37 ----------

Ура! покопавшись в CAN Bus, я все таки нашел те байты что отвечают за скорость и прочую информацию попутно в этом адресе.
0x3С3 00 21 00 10 16 CE 0A 14
что мы имеем:
00 21 = 3 км/ч
CE 0A = ACE = 2766/ 4 = 691 RPM
16 - включен реверс (15 - включен паркинг, 17 - нейтралка, 18 - драйв, 1Е - драйв мануал, 19 - драйв спорт
10 - ручник отпущен
18 - взвод/отпуск ручника
14 - ручник взведен.

Конечно все будет выглядеть проще если это сообщение перевести в двухбайтовое выражение.


0000 0000 0010 0001 0000 0000 0001 0000 0001 0110 1100 1110 0000 1010 0001 0100

0101 - Паркинг
0110 - Реверс
0111 - Нейтраль
1000 - Драйв
1001 - Драйв спорт
1110 - Драйв Мануал

и так далее .

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



С расчетом скорости немного ошибся, нужна формула. Чуть позже определюсь.

sergikoff
11.04.2015, 23:30
mishka, еще раз повторю...
ты в итоге чего добиться хочешь?
все, чем занимаешься сейчас в доках, выложенных в этой теме, в принципе есть...

mishka
12.04.2015, 00:01
Я хочу наковырять ID, которые работают для Q5. Все остальное факультатив получается.
Ок, я понял, что в принципе для форума эта тема не интересна.

sergikoff
12.04.2015, 00:17
Ок, я понял, что в принципе для форума эта тема не интересна.
ну почему же не интересна. интересна

Я хочу наковырять ID, которые работают для Q5.
и что с ними дальше будешь делать? просто самообразование?

сейчас немного потеплеет, бум на даче по выходным ковырять...

mishka
12.04.2015, 00:37
Вообще, я тему разжевывал для тех кому интересно, но они не знают с чего начать и как все это работает.
просто по началу я сам не сразу во все въехал. потому как я не программист. Но мне интересно это.
Данные хочу собрать, чтобы можно было подключить свой гаджет с экраном и "на ходу" контролировать параметры. Я можно так сказать сам разбираюсь с этим. Не легко дается потому как времени совсем мало.
На форуме была тема с закрытием крышки багажника, вот хочу тоже попробовать найти эти иденты управления крышкой и переключить управление на закрытие с пульта через контроллер.
Разберусь этим, пойду дальше лезть в приборку или MMI.

Вот по ходу возник вопрос,
а каким образом мне составить сообщение, если в нем мне нужно изменить только , скажем второй байт из 8 , а остальные не трогать? При чем остальные постоянно изменяются...

sergikoff
12.04.2015, 09:38
Вот по ходу возник вопрос,
а каким образом мне составить сообщение, если в нем мне нужно изменить только , скажем второй байт из 8 , а остальные не трогать? При чем остальные постоянно изменяются...
маску наложи.
сначала ANDом "вырежи" (обнули) нужные битики, потом ORом вставь, что надо...

mishka
22.04.2015, 19:31
Коллеги, подскажите, а чем можно послушать LIN ? Ибо как мне объяснили, это куда интереснее чем CAN :-)

TheTERMINATOR
22.04.2015, 20:26
http://github.com/zapta/linbus

kvazk
16.03.2017, 20:17
всем привет, подыму тему) кто-нибудь дальше пошел или нет? вплане чтения инфы из кэн баса с ардуиной
хочу выводить инфо о температуре кол-во оборотов.. вобщем есть пару задумок..

какой шилд использовать? и где подключаться чтобы читать CAN который с мотором и коробкой общается...?

mishka
16.03.2017, 21:15
Покупать обычный шилд за 200 рублей подключаться к выходу Гейта моторному и читать по фильтрам что интересует. Если не хочется кромсать шину то подключиться к ОБД и отправлять запросы на подключение к нему и запросы на информацию. Хотел подключиться к LIN шине... и даже купил Canny 7 но лень взяла вверх.... старость )
Хотел все выудить код на команду открытия и закрытие задней крышки багажника... отловил коды посылаемые ключом зажигания, а на открытие и закрытие не хватило терпения.

kvazk
17.03.2017, 10:07
так самое интересное где взять эти фильтры
как определить где температура масла, где воздуха.. и т.д.

связка MCP2515 + TJA1050 подойдет или нужно что-то другое?

Slava P
17.03.2017, 10:49
и всё таки, ключевой вопрос, зачем ??

mishka
17.03.2017, 12:34
так самое интересное где взять эти фильтры
как определить где температура масла, где воздуха.. и т.д.

связка MCP2515 + TJA1050 подойдет или нужно что-то другое?

Я ставил 2515. Если читать через ОВД, то некоторые коды можно найти в общей таблице PID запросов по ОБД https://ru.wikipedia.org/wiki/OBD-II_PIDs
Если напрямую подключаетесь к шинами то ищите адреса в инете или путем поиска и сравнения с математическим преобразованием данных.
Что то нашел, но эти данные есть только дома.

kvazk
17.03.2017, 15:50
по возможности скинь что у тебя есть если не жалко)
я себе поставил видеоинтерфейс к ауди концерт и там есть видеовход, вот и хочу туда выводить инфу с интересной инфой об авто.. на ардуино сделаю TVout)

mishka
17.03.2017, 17:49
Это если из OBD ловить:

0x04 A*100/255 ENGINE_LOAD
0x05 A-40 Engine Coolant Temperature
0x0C (A*256+B)/4 RPM
0x0D A SPEED
0x0F A-40 INTAKE_TEMP
0x10 ((256*A)+B)/100) MAF_SENSOR
0x1F (256*A)+B ENGINE_RUNTIME
0x23 ((256*A)+B)*0.079 FUEL_RAIL_PRESSURE

В приложении, адресса выуженные из шины комфорта.. если отправлять на эти адреса указанные значения, можно управлять объектами. что относится к флагам, что то управляющими командами. Пока это то, что я сам накопал. найду еще - скину.

kvazk
17.03.2017, 18:33
я буду всё под панель прятать поэтому наверное напрямую к кан буду подключаться..
а так спс ;) заказал шилд.. буду ждать) и потом мучать)

kvazk
26.04.2017, 19:47
пришела наконец то мцпшка

подскажите если через обд ловить это к 6 и 14 пину подключаться обд2 разъёма?

а скорость там 500?

kvazk
30.07.2017, 15:25
кому интересно, нашел ID за кнопки на руле)
ID: 66A
пробовал отправлять, всё работает)

---------- Сообщение добавлено в 15:25 ---------- Предыдущее сообщение размещено в 14:46 ----------

ID: 66A Data: 00 00 F0 00 VOL -
ID: 66A Data: 00 00 10 00 VOL+
ID: 66A Data: 00 20 00 00 MUTE/unmute
ID: 66A Data: 00 02 00 00 voice
ID: 66A Data: 02 00 00 00 MODE
ID: 66A Data: 00 00 0F 00 down
ID: 66A Data: 00 00 01 00 up
ID: 66A Data: 20 00 00 00 pres up\down

mishka
11.08.2017, 15:18
Еще бы найти команды управления задней двери багажника... вообще было бы огонь. Ибо, шина приходит к контроллеру привода багажника, а найти пока не удалось.

Через OBD ловить неудобно, лучше напрямую к сети подключаться.

kvazk
22.08.2017, 18:07
это только опытным путём.. щелкаешь и ловишь)

mishka
22.08.2017, 19:27
на выходных попытался половить на шине комфорта, похоже что поймал на 582 адресе только фидбэки исполнительных устройств в 00 адресе статус концевиков, а в 01 адресе как я понял идет положение крышки багажника.
больше никто не ведется на команду кнопки с крышки багажника. Правда она сама дает команду в J605 (исполнительное устройство привода) который видимо по своим понятиям решает, что делать. Поймал сигналы кнопок ключа . Но от них толку мало. Ловил через Canny 7. В принципе достаточно удобно. этим же можно и к LIN BUS подключиться

kvazk
15.10.2017, 10:29
я тут подумал, можно замутить авто включение аварийки при движении задним ходом.. адрес реверса есть вот только осталось найти адрес кнопки аварийки..

KOKA
15.10.2017, 13:45
я тут подумал, можно замутить авто включение аварийки при движении задним ходом..
Замутишь, не забудь рассказать, как :)

kvazk
15.10.2017, 15:45
обязательно;) сюда в первую очередь отпишу ;)

можно поступит легче код переключения кпп уже известен а на параллельно кнопки аварийки повесить ключ транзисторный через ардуино и будет всё работать.. но мы же не ищем легких путей.. будем ловить ID кнопки аварийки)

sergikoff
16.10.2017, 17:58
с кнопкой багажника бы разобраться...

kvazk
17.10.2017, 11:02
ну мне она особо не интересна.. толку на а5 спортбэк нет.. нет электропривода(
ещё в мечтах каким-то образом свой текст выводить на экран концерта или на центральный.. но это из разряда фантастики..

kvazk
17.10.2017, 18:51
и ещё сейчас подумал.. что в принципе на концерте есть кнопка Info и там (у нас в стране) всегда пусто. возможно что есть какая-то возможность подменять данные и выводить туда..

kvazk
30.10.2017, 16:37
получилось)) то что хотел
ID: 363 Data: 00 84 0F 00 - аварийка включена
ID: 363 Data: 00 84 00 00 - аварийка выключена

причем нужно выдержвать последовательность) и задавать интервал моргания..
т.е. отпрваляем аварийка включена ждем 400мс(можно свою паузу) потом аварийка выключена опять ждем..

https://www.youtube.com/watch?v=Vbv_oKatQh0

kvazk
31.10.2017, 14:08
подскажите кто норм бтиблиотеку что читать из OBDII с ардуиной
а то нашел OBDIICanbus.h но не разобрался.. пусто в мониторе порта..

mishka
31.10.2017, 15:26
подскажите кто норм бтиблиотеку что читать из OBDII с ардуиной
а то нашел OBDIICanbus.h но не разобрался.. пусто в мониторе порта..

https://yadi.sk/d/WQ9EIlIM3PGRkr

А вообще та библиотека, что я публиковал в первых постах работает неплохо, если подключаться напрямую в шину.
если хотите чекать через OBD порт то по указанной ссылке можно

kvazk
31.10.2017, 18:44
так я этой и пользуюсь, если напрямую подключаюсь то вижу сообщения.. а если к ОБД2 разъему то пусто.. уже все скорости перепробывал..(
или через обд2 нужно запросы какие-то отправлять чтоб получить что-то..

mishka
01.11.2017, 09:58
так я этой и пользуюсь, если напрямую подключаюсь то вижу сообщения.. а если к ОБД2 разъему то пусто.. уже все скорости перепробывал..(
или через обд2 нужно запросы какие-то отправлять чтоб получить что-то..

Да, если подключаться через OBD, то вначале нужно отправить запрос, чтобы получить на него ответ. как раз последний скеч это и делает для ВАГ авто.

---------- Сообщение добавлено в 09:58 ---------- Предыдущее сообщение размещено в 09:25 ----------

#include <mcp_can.h>
#include <SPI.h>
long unsigned int rxId;
unsigned char len = 0;
unsigned char rxBuf[8];
MCP_CAN CAN0(10); // Set CS to pin 10

void setup()
{
Serial.begin(115200);

// Initialize MCP2515 running at 16MHz with a baudrate of 500kb/s and the masks and filters disabled.
if(CAN0.begin(MCP_ANY, CAN_500KBPS, MCP_8MHZ) == CAN_OK) Serial.println("MCP2515 Initialized Successfully!");
else Serial.println("Error Initializing MCP2515...");

CAN0.setMode(MCP_NORMAL); // Set operation mode to normal so the MCP2515 sends acks to received data.
pinMode(2, INPUT); // Setting pin 2 for /INT input

Serial.println("MCP2515 Library Receive Example...");
}
byte data[8] = {0x02, 0x01, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00};
void loop()
{
byte sndStat = CAN0.sendMsgBuf(0x7DF, 0, 8, data);
if(sndStat != CAN_OK){
Serial.println("Error Sending Message...");
}
delay(100); // send data per 100ms

if(!digitalRead(2)) // If pin 2 is low, read receive buffer
{
CAN0.readMsgBuf(&rxId, &len, rxBuf); // Read data: len = data length, buf = data byte(s)
Serial.print("ID: "); // Print the message ID.
Serial.print(rxId, HEX);
Serial.print(" Data: ");
for(int i = 0; i<len; i++) // Print each byte of the data.
{
if(rxBuf[i] < 0x10) // If data byte is less than 0x10, add a leading zero.
{
Serial.print("0");
}
Serial.print(rxBuf[i], HEX);
Serial.print(" ");
}
float rpm = (rxBuf[3] * 256 + rxBuf[4]) / 4.0;
Serial.println();
Serial.print("RPM : ");
Serial.print(rpm);

Serial.println();
delay(100);
}
}

kvazk
01.11.2017, 10:39
Standard_MaskFilter.ino - это???

что-то я не могу понять.. а маску и фильтр это и есть PID или нет?

---------- Сообщение добавлено в 10:39 ---------- Предыдущее сообщение размещено в 10:11 ----------

obd в ауди на 500кбит? ое попробую отпишусь)

mishka
01.11.2017, 11:29
Standard_MaskFilter.ino - это???

что-то я не могу понять.. а маску и фильтр это и есть PID или нет?

---------- Сообщение добавлено в 10:39 ---------- Предыдущее сообщение размещено в 10:11 ----------

obd в ауди на 500кбит? ое попробую отпишусь)

В данном примере фильтр выбран по адресу
byte sndStat = CAN0.sendMsgBuf(0x7DF, 0, 8, data);
byte data[8] = {0x02, 0x01, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00};
по моему он обороты смотрит.
скорость да, выбрана 500, потому что к мотору подключаемся.
if(CAN0.begin(MCP_ANY, CAN_500KBPS, MCP_8MHZ) == CAN_OK) Serial.println("MCP2515 Initialized Successfully!");

mishka
04.11.2017, 21:18
Попробовал подключиться через ELM327 - убого мало данных он выдал...
и тупит страшно. обновление данных идет долго.

kvazk
06.11.2017, 16:50
пробовал тем скетчем что выше писал??

mishka
06.11.2017, 21:31
пробовал тем скетчем что выше писал??
нет,
для ELM своя тема...

когда то купил эту приблуду,
http://arduinodev.com/hardware/obd-kit/
валялась долго и в результате разочарование полное.
наверное возможно и взять обычный шнур ELM убрать с него преобразователь сигнала для USB, получится тоже самое, только дешевле.
код из примера, только почему то он работал на UNO, а на MEGA через Serial 1

#include <Arduino.h>
#include <Wire.h>
#include <OBD.h>
COBD obd;
void setup()
{
Serial.begin(38400);
// start communication with OBD-II UART adapter
obd.begin();
// initiate OBD-II connection until success
while (!obd.init());
}

void loop()
{
int value;
if (obd.readPID(PID_RPM, value)) {
// RPM is successfully read and its value stored in variable 'value'
Serial.println(value);
}
}

отсюда берешь все PID и подставляешь вместо PID_RPM на адреса в формате 0х0С, можешь указывать и названиями если они прописаны в библиотеке.


https://en.wikipedia.org/wiki/OBD-II_PIDs#Mode_01

kvazk
07.11.2017, 14:13
я сегодня попробовал сделать так.. подключил китайский vcdc 12.12 там внутри mcp2561 выбрал в программе в блоке двигателя измеряемые велечины air mass например
потом параллельно подключил ардуинку и монитор порта и обрадовался ID и data есть!!!)) но радовался не долго... если выбирать другую величену ID остается одним и темже.. только данные меняются и если сразу подцепить ардуинку то кан шина не хочет инициализироваться( толко когда подключшь уже с работающей программой

а из выше примера скорость обмена большая?? не проверял? с адаптером что ты купил

mishka
07.11.2017, 19:46
интересные вариации... может не хочет увязываться из-за каких то согласований. обычно на последнем Can устройстве стоит резистивный терминатор.

ELM считывает быстро один параметр. но если пытаться считать последовательно некоторую группу значений то получается долго. 5-7 параметров обновляются в течение 1-3 секунд. скорость передачи они сами устанавливают а вот серийный порт я выставил 38400

в личку кинул номер телефона, можешь на вотсап если что писать.

Помню sergikoff писал, что пытался подключиться к приборке... удалось ли продвинуться в этом вопросе?

sergikoff
08.11.2017, 09:00
Помню sergikoff писал, что пытался подключиться к приборке... удалось ли продвинуться в этом вопросе?
чо-т подзабили... времени не хватает...

kvazk
08.11.2017, 09:31
в личку кинул номер телефона, можешь на вотсап если что писать.

Помню sergikoff писал, что пытался подключиться к приборке... удалось ли продвинуться в этом вопросе?

напиши на почту, в личке пусто( taras точка igor.m сабакака gmail.com