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

Вернуться   PCCar.ru - Ваш автомобильный компьютер > MP3Car ТехИнфа > Разработка устройств

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2018, 00:17   #1
nikey
Новый Пользователь
 
Регистрация: 28.10.2018
Город: орел
Регион: 57
Машина: пежо 307
Сообщений: 17
nikey is on a distinguished road
По умолчанию Дружим магнитолу RD3-01 от пежо c планшетом

Приветствую.
Раскурочил свою RD3-01, стал изучать... повключал разные ауксы по i2c и всё такое... Стал ковырять дальше... Короче раскопал в ней 3 шины - VAN, SPI, i2c... Взял ардуину уно, прошил её вот этим
https://github.com/lazarov-g/vanread.../master/main.c
кодом и подключил к SPI шине. Ардуино UNO прекрасно видит нажатия рулевых кнопок и выдаёт их на сериал монитор, но на этом, к сожалению, затык... Для управления планшетом, UNO, к сожалению не годится... Нет в ней HID клавиатуры. Нужна леонардо, с её ХИД клавиатурой. НО! код написан, что называется, на низком уровне. т.е. в нём нет инклюд SPI. Нужен специалист, который может подправить код под леонарду, или же написать свой код.
Никто не силён в SPI?
nikey вне форума   Ответить с цитированием
Старый 20.12.2018, 01:08   #2
T_r_D
Старший Пользователь
 
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
T_r_D is a jewel in the roughT_r_D is a jewel in the roughT_r_D is a jewel in the rough
По умолчанию

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

Инклюд SPI порадовал
Открой этот самый файл библиотеки и там будут все эти "низкоуровневые коды"
T_r_D вне форума   Ответить с цитированием
Старый 21.12.2018, 02:04   #3
nikey
Новый Пользователь
 
Регистрация: 28.10.2018
Город: орел
Регион: 57
Машина: пежо 307
Сообщений: 17
nikey is on a distinguished road
По умолчанию

Цитата:
Сообщение от T_r_D Посмотреть сообщение
А зачем такой изврат?
По CAN всё идёт, зачем в магнитолу лезть?
Но если так хочется, то код должен на любом атмеле работать, только возможно порты надо переназначить.

Инклюд SPI порадовал
Открой этот самый файл библиотеки и там будут все эти "низкоуровневые коды"
Вот!!! Братан, ты то мне и нужен!!! Сразу видно - понимающий спец! Ты не понял, это не изврат! Тут всё продумано! Смотри:
Про CAN, забудь... не забивай себе голову, там VAN (E-manchester, они похожи) Когда я нажимаю кнопки на руле, команды по VAN шине летят в магнитолу. В магнитоле стоит уже готовый VAN контроллер (MTC30521 + TSS463C) управляемый магнитольным процессором. Процессор обменивается данными с VAN микросхемами по SPI шине (глянь на схему в ссылке там всё понятно. Это часть схемы магнитолы) Т.е. придумывать и разрабатывать ничего не нужно!!! Всё итак готово!
Всё что мне нужно - это припаять к SPI шине TSS463C леонарду (6 проводочков) , сделать леонарду SPI слейвом, чтоб она отслеживала команды нажатий рулевых кнопок и передавала их на планшет. Как передавать команды на планшет - я, думаю разберусь... А вот как правильно настроить леонарду в качестве SPI слейва... тут у меня затык... настраивать её надо на основе того кода что в ссылке. Там указана полярность сигнала, какой бит летит первым, маски регистров, ну и всё такое.
Я в тырьнете нарыл код для SPI слейва, прошил им леонарду, вывел поток данных в монитор порта и... мама дорогая... Сколько ж там циферек!!! Вобщем загвоздка состоит в том что я не знаю - правильная ли это прошивка и правильные ли это циферки... У меня есть одна идейка... Эх ладно... попробую, потом расскажу. Эх жалко что на форум нельзя картинки заружать
nikey вне форума   Ответить с цитированием
Старый 22.12.2018, 00:01   #4
seriousstas
Бывалый писикарщик
 
Регистрация: 14.06.2013
Регион: Украина
Машина: Nissan Qashqai+2
Сообщений: 3,424
seriousstas has a brilliant futureseriousstas has a brilliant futureseriousstas has a brilliant futureseriousstas has a brilliant futureseriousstas has a brilliant futureseriousstas has a brilliant futureseriousstas has a brilliant futureseriousstas has a brilliant futureseriousstas has a brilliant futureseriousstas has a brilliant futureseriousstas has a brilliant future
По умолчанию

Цитата:
Эх жалко что на форум нельзя картинки заружать
Есть два варианта:
1 Выбери расширенный режим=>управление вложениями.
2 Залей на хостинг и вставь готовую ссылку - например сюда
seriousstas вне форума   Ответить с цитированием
Старый 23.12.2018, 18:09   #5
T_r_D
Старший Пользователь
 
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
T_r_D is a jewel in the roughT_r_D is a jewel in the roughT_r_D is a jewel in the rough
По умолчанию

Как я выше и написал уже- код работает на любой атмеге.
Просто надо переконфигурировать порты/ноги.
Нужно знать только на какой ноге ЮАРТ и SPI в другой атмеге.
Тут это надо переправить:
DDRB |= (1 << DDB3) | (1 << DDB5) | (1 << DDB2) | (1 << DDB1) | ( 1 << DDB0);

PORTB |= ( 0 << PINB0);
PORTB |= ( 1 << PINB2);
SPCR = (1 << SPE) | (1 << MSTR) | (1 << CPOL) | (1 << CPHA);
byte clr = SPSR;
clr = SPDR;
(void)clr;

DDRB настройка порта B
PORTB доконфигурирование отдельных ног порта.

SPCR настраивает режим SPI.
как настроить ссылка:
http://www.gaw.ru/html.cgi/txt/doc/m...mega103_49.htm

Как настраиваются ноги порта:
http://easyelectronics.ru/avr-uchebn...da-vyvoda.html

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

А вот тут мы это получаем из прирывания (точнее буфера):
while (1)
{
if( !error) {

button = register_get( GETMAIL( 1));
wheel = register_get( GETMAIL( 2));

if( wheel > oldwheel || wuloop != ( button & ( 1 << WUP))) {
wuloop = ( button & ( 1 << WUP));
oldwheel = wheel;
PORTB |= ( 1 << PINB0);
execCmd( tup);
PORTB &= ~( 1 << PINB0);
}
else if( wheel < oldwheel || wdwnloop != ( button & ( 1 << WDWN))) {
wdwnloop = ( button & ( 1 << WDWN));
oldwheel = wheel;
PORTB |= ( 1 << PINB0);
execCmd( tdwn);
PORTB &= ~( 1 << PINB0);
}
else if ( button & ( 1 << SRC)) {
execCmd( source);
}

PORTB |= ( 1 << PINB0);
и
PORTB &= ~( 1 << PINB0);
Это мигание светодиодом как я понимаю

execCmd( tdwn); это отправка в UART.
Вместо отправки в UART можно делать что угодно.
Ну условия все эти проверяют что пришло в посылке SPI.

PS. Про RD3 почитал. Там действительно нет КАН походу...
У RD4 Уже есть...
T_r_D вне форума   Ответить с цитированием
Старый 23.12.2018, 23:18   #6
nikey
Новый Пользователь
 
Регистрация: 28.10.2018
Город: орел
Регион: 57
Машина: пежо 307
Сообщений: 17
nikey is on a distinguished road
По умолчанию

Цитата:
Тут это надо переправить:
DDRB |= (1 << DDB3) | (1 << DDB5) | (1 << DDB2) | (1 << DDB1) | ( 1 << DDB0);
Пробовал... Бесполезно
Чтото я делаю не то... Там ещё по ходу кода надо чтото смотреть мож что-то надо изменить.

Цитата:
А вот тут мы это получаем из прирывания (точнее буфера):
while (1)
{
if( !error) {

button = register_get( GETMAIL( 1));
wheel = register_get( GETMAIL( 2));

if( wheel > oldwheel || wuloop != ( button & ( 1 << WUP))) {
wuloop = ( button & ( 1 << WUP));
oldwheel = wheel;
PORTB |= ( 1 << PINB0);
execCmd( tup);
PORTB &= ~( 1 << PINB0);
}
else if( wheel < oldwheel || wdwnloop != ( button & ( 1 << WDWN))) {
wdwnloop = ( button & ( 1 << WDWN));
oldwheel = wheel;
PORTB |= ( 1 << PINB0);
execCmd( tdwn);
PORTB &= ~( 1 << PINB0);
}
else if ( button & ( 1 << SRC)) {
execCmd( source);
}

PORTB |= ( 1 << PINB0);
и
PORTB &= ~( 1 << PINB0);
Это мигание светодиодом как я понимаю
Не! )))) Это не мигание ))) Я точно сам не знаю что, но это... как бы это сказать-то... код нажатия кнопок чтоли...

void loop() {

while (1)
{
if( !error) {

button = register_get( GETMAIL( 1));
wheel = register_get( GETMAIL( 2));

if( wheel > oldwheel || wuloop != ( button & ( 1 << WUP))) {
wuloop = ( button & ( 1 << WUP));
oldwheel = wheel;
PORTB |= ( 1 << PINB0); //Установить "1" на линии SS?
execCmd( tup);
PORTB &= ~( 1 << PINB0); //Установить "0" на линии SS?
Serial.println ("колесо вверх");
}
else if( wheel < oldwheel || wdwnloop != ( button & ( 1 << WDWN))) {
wdwnloop = ( button & ( 1 << WDWN));
oldwheel = wheel;
PORTB |= ( 1 << PINB0); //Установить "1" на линии SS?
execCmd( tdwn);
PORTB &= ~( 1 << PINB0); //установить 0 на линии SS?
Serial.println ("колесо вниз");
}
else if ( button & ( 1 << SRC)) {
execCmd( source); // source = 0xfd; // 1.20 kom
Serial.println ("источник");
}
else if ( ( button & ( 1 << VUP)) && ( button & ( 1 << VDWN))) {
execCmd( att);
Serial.println ("атт какойто");
}
else if ( button & ( 1 << VDWN)) {
execCmd( voldwn);
Serial.println ("громк-");
}
else if ( button & ( 1 << VUP)) {
execCmd( volup);
Serial.println ("громк+");
}
else if ( button & ( 1 << SDWN)) {
execCmd( tdwn);
Serial.println ("т вниз");
}
else if ( button & ( 1 << SUP)) {
execCmd( tup);
Serial.println ("т вверх");
}

register_set( CHANNEL_ADDR( 0) + 3, 0xf8);
}
else {
tss_init();
}
delay(10);
}

}
Это мною добавленны команды вывода на сериал порт...
Короче, когда нажимаешь кнопки на руле, то в сериал порте пишется - громкость вверх... громкость вниз... колесо вверх... колесо вниз... )))

..........................
PORTB |= ( 1 << PINB0); //Установить "1" на линии SS
execCmd( tup);
PORTB &= ~( 1 << PORTB |= ( 1 << PINB0); //Установить "1" на линии SS
execCmd( tup);
PORTB &= ~( 1 << PINB0); //Установить "1" на линии SS); //Установить "1" на линии SS

Это я прокомментировал как управление SS... но это не точно!!!

Что такое PINB0 я не знаю
nikey вне форума   Ответить с цитированием
Старый 24.12.2018, 00:00   #7
nikey
Новый Пользователь
 
Регистрация: 28.10.2018
Город: орел
Регион: 57
Машина: пежо 307
Сообщений: 17
nikey is on a distinguished road
По умолчанию

леонардо(32u4):
SCK он же PB1... 9 нога чипа (15вывод)
MISO он же PB3... 11 нога чипа (14вывод)
MOSI он же PB2... 10 нога (16 вывод)
SS он же PB0... 8 нога (17 вывод его нет, на нём светодиод висит. Светик выпаял и припаял проводянку)

уно (328P):
SCK он же PB5... 17 нога чипа 13вывод
MISO он же PB4... 16 нога чипа 12вывод
MOSI он же PB3... 15 нога 11вывод
SS он же PB2... 14 нога 10вывод

у чувака на схеме 17 нога чипа - моси, 18нога чипа - мисо, 19 нога чипа - SCLK... не совпадос, но работает! Правда у него корпус PDIP, а у меня на UNO маленький не знаю как называется
ПИПЕЦ!!! я запутался!!!
nikey вне форума   Ответить с цитированием
Старый 24.12.2018, 06:26   #8
T_r_D
Старший Пользователь
 
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
T_r_D is a jewel in the roughT_r_D is a jewel in the roughT_r_D is a jewel in the rough
По умолчанию

Ну идея ясна думаю?
Я просто в ногах атмела разбираться не хочу.
В чём-то могу и ошибаться, просто реально давно атмелы не програмил.
На стм переполз.

Да и про сериал я прав. Про вывод туда команд.
Про диод не угадал, хотя очень было похоже.
Распиновки под рукой нету, с мобилы полутрезвый пишу
Посильную помощь надеюсь оказал...
T_r_D вне форума   Ответить с цитированием
Старый 24.12.2018, 10:27   #9
nikey
Новый Пользователь
 
Регистрация: 28.10.2018
Город: орел
Регион: 57
Машина: пежо 307
Сообщений: 17
nikey is on a distinguished road
По умолчанию

Да идея-то ясна, а вот нюансы!... я многого не догоняю, а в тырнетах этого не могу найтить.

Про диоды ты, можно сказать, угадал. Именно так им и мигают )
Цитата:
На стм переполз.
предатель )))
Ладно, спасибо, буду ковырять дальше. Дюже затягивает эта бодяга
nikey вне форума   Ответить с цитированием
Старый 24.12.2018, 13:14   #10
T_r_D
Старший Пользователь
 
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
T_r_D is a jewel in the roughT_r_D is a jewel in the roughT_r_D is a jewel in the rough
По умолчанию

Да про диоды и гадать нечего.
Нога подтягивается то к высокому уровню, то к низкому.

А СТМ шустрее и программная среда под него покруче ардуино ИДЕ.
Хотя для ардуино можно и атмел студию пользовать, но зачем?
Если по цене ардуины та же блю пилл (stm32f103c8t6)?
Но по скорости в 5 раз быстрее и порты все аппаратные включая CAN.
T_r_D вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



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


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