Дружим магнитолу 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? |
А зачем такой изврат?
По CAN всё идёт, зачем в магнитолу лезть? Но если так хочется, то код должен на любом атмеле работать, только возможно порты надо переназначить. Инклюд SPI порадовал :) Открой этот самый файл библиотеки и там будут все эти "низкоуровневые коды" |
Цитата:
Про CAN, забудь... не забивай себе голову, там VAN (E-manchester, они похожи) Когда я нажимаю кнопки на руле, команды по VAN шине летят в магнитолу. В магнитоле стоит уже готовый VAN контроллер (MTC30521 + TSS463C) управляемый магнитольным процессором. Процессор обменивается данными с VAN микросхемами по SPI шине (глянь на схему в ссылке там всё понятно. Это часть схемы магнитолы) Т.е. придумывать и разрабатывать ничего не нужно!!! Всё итак готово! Всё что мне нужно - это припаять к SPI шине TSS463C леонарду (6 проводочков) , сделать леонарду SPI слейвом, чтоб она отслеживала команды нажатий рулевых кнопок и передавала их на планшет. Как передавать команды на планшет - я, думаю разберусь... А вот как правильно настроить леонарду в качестве SPI слейва... тут у меня затык... настраивать её надо на основе того кода что в ссылке. Там указана полярность сигнала, какой бит летит первым, маски регистров, ну и всё такое. Я в тырьнете нарыл код для SPI слейва, прошил им леонарду, вывел поток данных в монитор порта и... мама дорогая... Сколько ж там циферек!!! Вобщем загвоздка состоит в том что я не знаю - правильная ли это прошивка и правильные ли это циферки... У меня есть одна идейка... Эх ладно... попробую, потом расскажу. Эх жалко что на форум нельзя картинки заружать |
Цитата:
1 Выбери расширенный режим=>управление вложениями. 2 Залей на хостинг и вставь готовую ссылку - например сюда |
Как я выше и написал уже- код работает на любой атмеге.
Просто надо переконфигурировать порты/ноги. Нужно знать только на какой ноге ЮАРТ и 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 Уже есть... |
Цитата:
Чтото я делаю не то... Там ещё по ходу кода надо чтото смотреть мож что-то надо изменить. Цитата:
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 я не знаю |
леонардо(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 маленький не знаю как называется ПИПЕЦ!!! я запутался!!! |
Ну идея ясна думаю?
Я просто в ногах атмела разбираться не хочу. В чём-то могу и ошибаться, просто реально давно атмелы не програмил. На стм переполз. Да и про сериал я прав. Про вывод туда команд. Про диод не угадал, хотя очень было похоже. Распиновки под рукой нету, с мобилы полутрезвый пишу :) Посильную помощь надеюсь оказал... |
Да идея-то ясна, а вот нюансы!... я многого не догоняю, а в тырнетах этого не могу найтить.
Про диоды ты, можно сказать, угадал. Именно так им и мигают ) Цитата:
Ладно, спасибо, буду ковырять дальше. Дюже затягивает эта бодяга |
Да про диоды и гадать нечего.
Нога подтягивается то к высокому уровню, то к низкому. А СТМ шустрее и программная среда под него покруче ардуино ИДЕ. Хотя для ардуино можно и атмел студию пользовать, но зачем? Если по цене ардуины та же блю пилл (stm32f103c8t6)? Но по скорости в 5 раз быстрее и порты все аппаратные включая CAN. |
Часовой пояс GMT +4, время: 02:51. |
Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot