Страница 2 из 4

MCP2515 CAN Bus Модуль

Добавлено: 19 апр 2017, 13:36
AVGN
stapmoff, модуль пока жду. Железа нет проверить не могу.

MCP2515 CAN Bus Модуль

Добавлено: 19 апр 2017, 13:44
stapmoff
AVGN писал(а):Железа нет проверить не могу.
Просто я взял железяку под названием CAN-LOG она для переворачивания протоколов спец.техники в протокол понятный нашему оборудованию! Так вот в ней есть постоянная попылка статических данных в кан шину, я прочитал их и взял первую попавшеюся строку ID: 18FEC101 Data: EA 80 00 00 FF FF FF FF
Нааше оборудование определяет это как уровень топлива в баке, попытался сделать на дуине, не вышло оборудование данных не видит

MCP2515 CAN Bus Модуль

Добавлено: 20 апр 2017, 09:08
DrMario
stapmoff писал(а):Попробывал этот проэкт, прием работает данные читаетБ только подскажите как переделать скейтч чтоб ID был 18FEC101 а данные вот такие к примеру EA 80 00 00 FF FF FF FF
Пока не приехал модуль, для меня эти данные не понятны, что такое ID: 18FEC101 ?
У любого устройства есть адрес, на который нужно отсылать запросы. Для CAN 11_500 выглядит примерно так:
Req:08 07 DF 02 01 00 FF FF FF FF FF
Ans:08 07 E8 06 41 00 90 07 E0 11 00

Расшифровывается так:
1 строка (отправляемые данные)
7DF - запрос по адресу (в данном случае общий протокол)
02 - количество отправляемых байт
01 00 - непосредственно данные (общий протокол, OBD-II PIDs (0-20))
FF FF FF FF FF - заполнение пустоты

2 строка (принимаемые данные)
7E8 - физический адрес ЭБУ
06 - кол-во байт данных в строке
41 - зеркальный байт + 40
00 - зеркальный байт
90 07 E0 11 - непосредственно данные о поддерживаемых PIDs

после определение поддерживаемых параметров (сравнив ответ с таблицей) можно делать запросы непосредственно самих параметров.
К примеру запрос температуры ОЖ будет таким:

Req:08 07 DF 02 01 05 FF FF FF FF FF
Ans:08 07 E8 03 41 05 28 00 00 00 00

7E8 - физический адрес ЭБУ
03 - кол-во байт данных в строке
41 05 - зеркальные байты команды запроса (01 05)
28 - непосредственно байт информации о температуре ОЖ
Подставив 0x28 в формулу расчета температуры (A-40), получаем результат 0 °C
Вот как то так

MCP2515 CAN Bus Модуль

Добавлено: 20 апр 2017, 15:51
omich66
DrMario писал(а):для меня эти данные не понятны, что такое ID: 18FEC101 ?
Посмотрите здесь п. 10.5.3 29-битные заголовки сообщений CAN

MCP2515 CAN Bus Модуль

Добавлено: 20 апр 2017, 19:30
stapmoff
DrMario писал(а):что такое ID: 18FEC101 ?
Это выдает сам модуль при чтении данных из устройства которое их шлет

MCP2515 CAN Bus Модуль

Добавлено: 19 окт 2017, 08:25
ElectroMechaniC
Вопрос к 
support писал(а):Ребята, у меня пришли такие платки, к следующей версии постараюсь сделать блоки.
Не подскажете, платки пришли? И скиньте ссылочку на блок готовый? А то уже версий с апреля вышло много, а блока всё нет и нет!!!!

MCP2515 CAN Bus Модуль

Добавлено: 03 мар 2018, 20:03
ElectroMechaniC
Что то тема заглохла? Кто то сможет блок запилить для MCP 2515?

Помогите по выводу информации

Добавлено: 03 апр 2018, 17:03
ElectroMechaniC
Доброго времени. Есть код, который читает из кан-шины автомобиля данные и печатает их в ком-порт! Всё работает прекрасно,но по задумке нужно проводить операции над этими данными, а не тупо читать их. Вопрос в том, как правильно и вообще как их перевести в переменные... может не корректно выражаюсь...
Нужно в общем что бы содержимое буфера( это 8 байт информации) и ID можно было дальше в программе умножать, делить, конвертировать, перекладывать отправлять в ком порт....ну в общем сделать их работо-пригодными а не просто читать их в терминалке....Помогите...Братья...
Файлы проекта приложил...

Код: Выделить всё

if(CAN_MSGAVAIL == CAN.checkReceive())            // check if data coming
    {
        CAN.readMsgBuf(&len, buf);    // read data,  len: data length, buf: data buf

        unsigned int canId = CAN.getCanId();
        
        Serial.print("ID: ");
        Serial.print(canId, HEX);

        for(int i = 0; i<len; i++)    // print the data
        {
            Serial.print(buf[i], HEX);
            Serial.print("\t");
        }
        Serial.println();
    }

Помогите по выводу информации

Добавлено: 03 апр 2018, 17:15
Deuce
ElectroMechaniC писал(а): 03 апр 2018, 17:03Нужно в общем что бы содержимое буфера( это 8 байт информации) и ID можно было дальше в программе умножать, делить, конвертировать, перекладывать отправлять в ком порт
А где это должно производиться и каким образом? В ардуине? или допускается использование компьютера для всех этих операций?

Помогите по выводу информации

Добавлено: 03 апр 2018, 17:28
nalnik
Сколько можно?
НЕ потянет ардуино!
кУПИТЕ себе БК - их много, есть дешевле - дороже. Не экономьте и не экспериментируйте на своих и чужих жизнях.
Девять лет у меня работает (старый - голосом не говорит -- зато все в реальном времени на экране и по Русски - все коды и их описание).
Пример - не реклама.
Прочтите его возможность -- дешевле Вы даже при помощи всех форумов НЕ сделаете.
http://microline.ru/products/Car-Comput ... -CAN-Plus/

Помогите по выводу информации

Добавлено: 03 апр 2018, 19:25
ElectroMechaniC
[ref]Deuce[/ref], нет нужно средствами ардуино!

Отправлено спустя 2 минуты 56 секунд:
[ref]nalnik[/ref], спасибо за ссылочку, обязательно прочту! Но я ведь задал вполне конкретный вопрос! Как вместо написания информации в порт запихнуть её в переменные!? Если не можете помочь, лучше не пишите...

Отправлено спустя 3 минуты 15 секунд:
[ref]nalnik[/ref], и что по вашему не сможет Atmega328, перевести 4е переменные из hex в dec и передать их по последовательному соединению? Если не знаете то не пишите...повторюсь.

Помогите по выводу информации

Добавлено: 03 апр 2018, 20:42
Sancho
Так Вы же их получили в виде массива (buf[]) и canId - делайте, что хотите.

Отправлено спустя 34 секунды:
сейчас гляну проекты...

Отправлено спустя 3 минуты 13 секунд:
Если я правильно понимаю, речь о блоке в САN-BUS.flp ?

Помогите по выводу информации

Добавлено: 03 апр 2018, 21:14
ElectroMechaniC
[ref=#ff8000]Sancho[/ref], так точно! Об этом блоке! Мне бы из него грамотно хвостики(выходы)сделать! Дело в том что данные обновляются очень быстро и их много! Мне их прийдётся ещё как то сортировать и выборочно обрабатывать. Вот и нужно разделить их. Я сейчас выложу ссылочку на видео, что прилетает в ком порт. Для ясности! Так вот например в кадре с ID:318(прим), в 3м и 4м байтах лежит инфо об оборотах мне нужно сначала выделить ID из потока, затем прочитать то что записано в 3м и 4м байта этого ID, после сложить эти 2 байта и перевести в dec. Полученное число(обороты) отправить дальше по серийному порту уже в виде переменной! Но если с последними операциями я споконенько разберусь средствами flprog, то с выводами блока на "Cи" туго туго)))

Отправлено спустя 3 минуты 14 секунд:
https://youtu.be/oB7RzafajnE вот!

Помогите по выводу информации

Добавлено: 03 апр 2018, 21:18
Sancho
Ок, если никто не поможет сегодня - завтра обязательно сделаю.
Сегодня пока всё - танки зовут...

Помогите по выводу информации

Добавлено: 04 апр 2018, 00:17
ElectroMechaniC
[ref=#ff8000]Sancho[/ref], Спасибо! С надеждой буду ждать вестей!

Помогите по выводу информации

Добавлено: 04 апр 2018, 10:13
Sancho
[ref]ElectroMechaniC[/ref],
Проба 1

Помогите по выводу информации

Добавлено: 04 апр 2018, 10:52
ElectroMechaniC
[ref=#ff8000]Sancho[/ref], пробую)

Отправлено спустя 33 минуты 27 секунд:
[ref=#ff8000]Sancho[/ref], все работает, огроменное спасибо! Для проверки повесил на выходы конвертацию в строки и отправил в порт. Получил начальный результат! ))) То есть всё верно. И я могу теперь управлять этим потоком.
Возник вопрос. Как лучше разделить данные? Если мне нужно считывать определённый ID и его буфер, мне нужно повесить на выход ID блок сравнения? И если пришел нужный ID - разрешить считывать байты? Так?
А можно сделать один общий блок для инициализации модуля, а к нему дочерние блоки, что бы считывать разные ID? так можно? что бы в дочерних стояли фильтры только на приём нужного ID?

Отправлено спустя 1 минуту 19 секунд:
Нужного ID и его буфера...

Помогите по выводу информации

Добавлено: 04 апр 2018, 10:56
Sancho
ElectroMechaniC писал(а): 04 апр 2018, 10:52А можно сделать один общий блок для инициализации модуля, а к нему дочерние блоки, что бы считывать разные ID? так можно? что бы в дочерних стояли фильтры только на приём нужного ID?
Это самое простое, что можно сделать!
Нужны номера ID и алгоритмы сборки данных из байтов по нему - наверняка разные!

Помогите по выводу информации

Добавлено: 04 апр 2018, 11:24
ElectroMechaniC
Алгоритмы сборки, если я Вас правильно понял, для меня не составляют препятствий...
Главное что я могу понимать и читать нужную мне информацию... Мне для понимания нужно получать информацию в .hex и по ID и по байтам...
Приведу пример того что понятно мне...
К примеру: у нас получен (.hex)
ID= 0x217
и его буфер (.hex)
FF FF A0 00 00 00 00 38
Я знаю что 4й, 5й, 6й байты это скорость автомобиля
С этими данными я уже понимаю как работать.
Я эти байты сложу, переведу в десятичное число и умножу по формуле...
Соответственно мне нужно получать такой формат данных ID и его 8мь байт полезной информации, раздельно, как в вашем примере.... только таких блоков по задумке может быть несколько... Обороты, скорость, концевики дверей, всё что можно достать из кана...

Помогите по выводу информации

Добавлено: 04 апр 2018, 11:44
Sancho
Тогда так, пока особо мыслей других нет.
Просто пример
[spoiler]
Пример Алгоритма V1.png
[/spoiler]