PCCar.ru - Ваш автомобильный компьютер

PCCar.ru - Ваш автомобильный компьютер (http://pccar.ru/index.php)
-   Общение с машиной (http://pccar.ru/forumdisplay.php?f=14)
-   -   Arduino+CANBUS Shield (http://pccar.ru/showthread.php?t=23221)

T_r_D 26.03.2018 18:30

Цитата:

Сообщение от Paziy (Сообщение 400602)
Может быть у кого-нибудь еще мнения есть или кто может подсказать где еще можно почитать/спросить чтобы определится?

Ты для себя сначала определись.
Ардуина или СТМ это всего лишь микроконтроллеры.
Они не предназначены для вывода карт GPS и так далее.
Максимум что можно на них сотворить, так это мостик между машиной и планшетом/компьютером.
Как совсем максимум- сделать БК с норм дисплеем (это уже стм).

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

Распбери эту проблему не решит- очень геморно там запускать и навигацию и плеера разные...

Так что дальше уже задавайся конкретной целью.
Если что-то навороченое нужно, что требует быстрой реакции, то выбирай СТМ, если следить за кнопками на руле, то ардуины за глаза.

Опять же учти что у СТМ (кроме 105 серии и совсем дорогих) нет возможности одновременной работы USB и CAN. Так что туда ещё потребуется как минимум UART<>USB конвертер ну и микросхема CAN трансивера (tja1040, 1050, 1054 от шины зависит).
Или блютус/wi-fi модуль вместо UART<>USB.

Paziy 27.03.2018 21:03

Цитата:

Сообщение от T_r_D (Сообщение 400742)
Ты для себя сначала определись.
Ардуина или СТМ это всего лишь микроконтроллеры.
Они не предназначены для вывода карт GPS и так далее.
Максимум что можно на них сотворить, так это мостик между машиной и планшетом/компьютером.
Как совсем максимум- сделать БК с норм дисплеем (это уже стм).

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

Распбери эту проблему не решит- очень геморно там запускать и навигацию и плеера разные...

Так что дальше уже задавайся конкретной целью.
Если что-то навороченое нужно, что требует быстрой реакции, то выбирай СТМ, если следить за кнопками на руле, то ардуины за глаза.

Опять же учти что у СТМ (кроме 105 серии и совсем дорогих) нет возможности одновременной работы USB и CAN. Так что туда ещё потребуется как минимум UART<>USB конвертер ну и микросхема CAN трансивера (tja1040, 1050, 1054 от шины зависит).
Или блютус/wi-fi модуль вместо UART<>USB.

Это был очень полезный и продуктивный совет которого я и ждал. Огромное спасибо! :read2: :good:

Misha2066 20.09.2018 16:29

Приветствую всех!
Автомобиль Nissan Murano Z51 в комплектации с двумя матричными монохромными дисплеями для климата и магнитолы. Климат и штатная магнитола общаются по can-шине со своими дисплеями, каждое устройство со своим.
Есть цель -- заменить это безобразие на Андроид-девайс и отображать на его экране показания климата и штатной магнитолы.
Последовательность действий видится следующей:
1. Считать пакеты в can-шине при нажатии и отображении на дисплеях соответствующих кнопок при помощи связки Ардуино+кан-шилд.
2. Сделать некое устройство (скорее всего на той же Ардуине), которое формировало видеосигнал при поступлении соответствующего пакета.
3. Ввести сформированный видео сигнал в Андроид-девайс.

Буду признателен за любую информацию в этом направлении.

T_r_D 21.09.2018 12:37

Первый пункт более или менее правильный, а остальные это слова человека который ни чего не понимает в данной теме.
На андроид устройстве должен быть самописный интерфейс который будет что-то отображать при поступлении каких либо команд от микроконтроллера. Да и вообще микроконтроллером можно ни чего не делать- пришёл пакет, переправили на андроид, а там дальше обрабатываем.

Да и с пакетами не всё так просто. Скорее всего дисплеи формируют какое-то подтверждение или ответ.

Да и для начала надо узнать что за CAN шина. HS, FT?

Misha2066 22.09.2018 18:58

Цитата:

Сообщение от T_r_D (Сообщение 405446)
Да и с пакетами не всё так просто. Скорее всего дисплеи формируют какое-то подтверждение или ответ.

И как это можно узнать? Документации никакой не нашел.

Цитата:

Сообщение от T_r_D (Сообщение 405446)
Да и для начала надо узнать что за CAN шина. HS, FT?

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

T_r_D 23.09.2018 20:48

А какая шина нужна? :)
В Ситроенах салонная шина FT, у шкоды HS.

А узнать что идёт в шине можно только после того, как туда залезешь, перед этим узнав какой тип шины и её скорость.
А от типа шины будет зависеть тип CAN трансивера.

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

Ну и третий способ, он доступен вообще избранным :)
Подключить анализатор логический и сразу узнать и тип шины и её скорость.

По поводу что куда и откуда идёт.
Сначала цепляемся к шине и пытаемся разобраться что там к чему.
Скорее всего будут найдены все кнопки, температуры и лампочки.
С пакетами сообщений может быть сложнее, но до этого ещё надо дойти...
Есть всякие гадские ID в которых есть вяло меняющиеся информация и всякие "фичи" в самих дисплеях.
Но до этого тоже надо дойти :)
По первой проще анализировать компом, а чтоб понимать что куда идёт нужно спаять на STM32 простой бридж с возможностью фильтрации и отображением всего этого на дисплей.
Я собирал такой бридж на STM32F105 и OLED дисплее мелком. С первого входа пришедшие ID забивались в лист и по этому листу можно было перемещаться двумя кнопочками, а третий блокировать прохождение данного ID с первого на второй вход, со второго на первый пакеты пролетали без каких либо обработок. Если требовалось отфильтровать пакет с другой стороны, то просто устройство переворачивалось.

Да и вообще- паять надо сразу на STM всё...
И не пугаться того что у той же 103 серии нельзя одновременно работать с CAN и USB. Это обходится переходником UART<>USB.
Ну чтоб к планшету цепляться.
Но зато получаешь нормальную скорость, ни каких шилдов, просто микросхему трансивера CAN дешёвую, а если у тебя FT шина, то микросхему на шилде ардуины всё равно перепаивать придётся.

ganson 23.09.2018 22:20

Здравствуйте. Прошу прощения за ламерские вопросы, Arduino nano неделя как в руках, в написании программ - 0. Хочу сделать управление не заводской магнитолой с руля ( CAN ). Скетч , человека который это делал , пытаюсь подправить под свою шину. Изначально написано для посылок - ID + data 1 байт. У меня посылки - ID + data 4-е байта. Как не правлю под четыре байта - либо ошибка, либо принимает только первый.
Вот кусок

void can()
{
if (mcp2515.readMessage(&canMsg) == MCP2515::ERROR_OK) {
switch(canMsg.can_id & 0x5FF) {

case 0x5c1: // кнопки
if(key != canMsg.data[0]) {
switch(canMsg.data[0]) {
case 00: // Unpress (All)
switch(key) {
case 6: // Unpress Vol Up
Serial.println("Unpress Vol Up");
digitalWrite(vol_up, LOW);
break;
case 7: // Unpress Vol Down
Serial.println("Unpress Vol Down");
digitalWrite(vol_down, LOW);
break;
case 2: // Unpress Next
Serial.println("Unpress Next");
digitalWrite(next, LOW);
break;
case 3: // Unpress Prev
Serial.println("Unpress Prev");
digitalWrite(prev, LOW);
break;
case 0x1a: // Unpress SRC
Serial.println("Unpress SRC");
digitalWrite(sourse, LOW);
break;
case 0x2b: // Unpress Mute
Serial.println("Unpress Mute");
digitalWrite(mute, LOW);
break;
}
break;
case 6: // Press Vol Up
Serial.println("Press Vol Up");
digitalWrite(vol_up, HIGH);
break;
case 7: // Press Vol Down
Serial.println("Press Vol Down");
digitalWrite(vol_down, HIGH);
break;
case 2: // Press Next
Serial.println("Press Next");
digitalWrite(next, HIGH);
break;
case 3: // Press Prev
Serial.println("Press Prev");
digitalWrite(prev, HIGH);
break;
case 0x1a: // Press SRC
Serial.println("Press SRC");
digitalWrite(sourse, HIGH);
break;
case 0x2b: // Press Mute
Serial.println("Press Mute");
digitalWrite(mute, HIGH);
break;
}
key = canMsg.data[0];
}
break;

break;
}
}
}

У меня ID - 32A, ничего не нажато - 02 00 00 00, + 02 10 00 00, - 02 20 00 00, > 02 40 00 00, < 02 80 00 00, up 02 01 00 00, dn 02 02 00 00.
Как написать , что бы arduino видела все четыре байта?

T_r_D 24.09.2018 12:38

void can()
{
if (mcp2515.readMessage(&canMsg) == MCP2515::ERROR_OK) {
If (canMsg.can_id = 0x32A) {
If (canMsg.data[1] = 0x10) {нажато +}
}

И так далее
Или через switch:
switch(canMsg.data[1]) {
case 0x20:
плюс
break;

}

ganson 24.09.2018 19:47

T_r_D, спасибо!!! (canMsg.data[1]), прописал вторые, меняющиеся байты и всё ок.
И вопросик так, для развития. А если бы менялись не один, а два байта?

T_r_D 24.09.2018 22:43

Ну сравнивать нужно было бы сразу два.
If (canMsg.data[1] = 0x10 && canMsg.data[0] = 0x02) {

Только не вторые, а первые :)
Яж тебе на это и указываю что счёт начинается не с 1, а с 0 :)


Часовой пояс GMT +4, время: 10:04.

Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot