26.03.2018, 18:30 | #231 | |
Старший Пользователь
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
|
Цитата:
Ардуина или СТМ это всего лишь микроконтроллеры. Они не предназначены для вывода карт GPS и так далее. Максимум что можно на них сотворить, так это мостик между машиной и планшетом/компьютером. Как совсем максимум- сделать БК с норм дисплеем (это уже стм). Так что если есть нужда читать-писать в кан, дёргать какие нить релюшки и понимать нажатие кнопок на руле, то это микроконтроллер, а играть музыку, показывать карты и вообще быть с интерфейсом, так это планшет или компьютер. Распбери эту проблему не решит- очень геморно там запускать и навигацию и плеера разные... Так что дальше уже задавайся конкретной целью. Если что-то навороченое нужно, что требует быстрой реакции, то выбирай СТМ, если следить за кнопками на руле, то ардуины за глаза. Опять же учти что у СТМ (кроме 105 серии и совсем дорогих) нет возможности одновременной работы USB и CAN. Так что туда ещё потребуется как минимум UART<>USB конвертер ну и микросхема CAN трансивера (tja1040, 1050, 1054 от шины зависит). Или блютус/wi-fi модуль вместо UART<>USB. Последний раз редактировалось admin; 28.03.2018 в 23:15. |
|
27.03.2018, 21:03 | #232 | |
Новый Пользователь
Регистрация: 19.03.2018
Регион: 54
Сообщений: 5
|
Цитата:
Последний раз редактировалось admin; 28.03.2018 в 23:16. |
|
20.09.2018, 16:29 | #233 |
Пользователь
Регистрация: 13.04.2011
Город: Ростов-на-Дону
Регион: 61
Машина: Z51
Сообщений: 42
|
Приветствую всех!
Автомобиль Nissan Murano Z51 в комплектации с двумя матричными монохромными дисплеями для климата и магнитолы. Климат и штатная магнитола общаются по can-шине со своими дисплеями, каждое устройство со своим. Есть цель -- заменить это безобразие на Андроид-девайс и отображать на его экране показания климата и штатной магнитолы. Последовательность действий видится следующей: 1. Считать пакеты в can-шине при нажатии и отображении на дисплеях соответствующих кнопок при помощи связки Ардуино+кан-шилд. 2. Сделать некое устройство (скорее всего на той же Ардуине), которое формировало видеосигнал при поступлении соответствующего пакета. 3. Ввести сформированный видео сигнал в Андроид-девайс. Буду признателен за любую информацию в этом направлении. Последний раз редактировалось Misha2066; 20.09.2018 в 23:31. |
21.09.2018, 12:37 | #234 |
Старший Пользователь
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
|
Первый пункт более или менее правильный, а остальные это слова человека который ни чего не понимает в данной теме.
На андроид устройстве должен быть самописный интерфейс который будет что-то отображать при поступлении каких либо команд от микроконтроллера. Да и вообще микроконтроллером можно ни чего не делать- пришёл пакет, переправили на андроид, а там дальше обрабатываем. Да и с пакетами не всё так просто. Скорее всего дисплеи формируют какое-то подтверждение или ответ. Да и для начала надо узнать что за CAN шина. HS, FT? |
22.09.2018, 18:58 | #235 | |
Пользователь
Регистрация: 13.04.2011
Город: Ростов-на-Дону
Регион: 61
Машина: Z51
Сообщений: 42
|
Цитата:
Если подключаться непосредственно на контакты CAN самого блока (климата или магнитолы), то скорее всего будет та шина которая нужна. |
|
23.09.2018, 20:48 | #236 |
Старший Пользователь
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
|
А какая шина нужна?
В Ситроенах салонная шина FT, у шкоды HS. А узнать что идёт в шине можно только после того, как туда залезешь, перед этим узнав какой тип шины и её скорость. А от типа шины будет зависеть тип CAN трансивера. А узнать тип шины можно двумя способами- первый тупой подбор, а второй- открыть любой блок подключённый к этой шине, найти микросхему трансивера и потом скачать на неё даташит в интернете и оттуда узнать какой тип шины она поддерживает, ну а дальше уже подобрать скорость методом тыка. Ну и третий способ, он доступен вообще избранным Подключить анализатор логический и сразу узнать и тип шины и её скорость. По поводу что куда и откуда идёт. Сначала цепляемся к шине и пытаемся разобраться что там к чему. Скорее всего будут найдены все кнопки, температуры и лампочки. С пакетами сообщений может быть сложнее, но до этого ещё надо дойти... Есть всякие гадские ID в которых есть вяло меняющиеся информация и всякие "фичи" в самих дисплеях. Но до этого тоже надо дойти По первой проще анализировать компом, а чтоб понимать что куда идёт нужно спаять на STM32 простой бридж с возможностью фильтрации и отображением всего этого на дисплей. Я собирал такой бридж на STM32F105 и OLED дисплее мелком. С первого входа пришедшие ID забивались в лист и по этому листу можно было перемещаться двумя кнопочками, а третий блокировать прохождение данного ID с первого на второй вход, со второго на первый пакеты пролетали без каких либо обработок. Если требовалось отфильтровать пакет с другой стороны, то просто устройство переворачивалось. Да и вообще- паять надо сразу на STM всё... И не пугаться того что у той же 103 серии нельзя одновременно работать с CAN и USB. Это обходится переходником UART<>USB. Ну чтоб к планшету цепляться. Но зато получаешь нормальную скорость, ни каких шилдов, просто микросхему трансивера CAN дешёвую, а если у тебя FT шина, то микросхему на шилде ардуины всё равно перепаивать придётся. |
23.09.2018, 22:20 | #237 |
Новый Пользователь
Регистрация: 24.05.2017
Регион: Беларусь
Сообщений: 13
|
Здравствуйте. Прошу прощения за ламерские вопросы, 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 видела все четыре байта? |
24.09.2018, 12:38 | #238 |
Старший Пользователь
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
|
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; } |
24.09.2018, 19:47 | #239 |
Новый Пользователь
Регистрация: 24.05.2017
Регион: Беларусь
Сообщений: 13
|
T_r_D, спасибо!!! (canMsg.data[1]), прописал вторые, меняющиеся байты и всё ок.
И вопросик так, для развития. А если бы менялись не один, а два байта? Последний раз редактировалось ganson; 24.09.2018 в 22:08. |
24.09.2018, 22:43 | #240 |
Старший Пользователь
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
|
Ну сравнивать нужно было бы сразу два.
If (canMsg.data[1] = 0x10 && canMsg.data[0] = 0x02) { Только не вторые, а первые Яж тебе на это и указываю что счёт начинается не с 1, а с 0 |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
|
|