![]() |
Дружим магнитолу 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. |
Понял. Я так и думал ))
T_r_D, я кажется нашёл ещё одну хрень... Смотри: EICRA |= (1 << ISC01); EIMSK |= (1 << INT0); Я в прерываниях ещё не совсем шарю... но, вот вторая строка... Я так понимаю в бит под названием INT0 (регистра EIMSK) мы пишем единичку? Так?... чем мне это грозит?... У меня на 32u4 вывод PCINT0 совпадает с выводом SS он же PB0, чего быть не должно. Это опасно или я чото путаю?... В 328p вывод PCINT не совпадает с SS! PCINT0 и INT0 - это разные вещщи?!... Напомнило анекдот про чукчу... Карл маркс и фридрих энгельс это не четыре человека, а два! А слава КПСС - вообще не человек )))))) |
Если совпадают выводы, то так нельзя оставлять.
Ведь это внешний вывод при приходе сигнала на который будет срабатывать внешнее прерывание. Но у тебя есть второе прерывание- INT1. И оно на другой ноге. Так что можно поменять. EICRA |= (1 << ISC11); EIMSK |= (1 << INT1); Ну и пару ссылок чтоб было понятнее: http://mainloop.ru/avr-atmega/avr-ex...interrupt.html http://arduino.ru/forum/programmirov...preryvaniyam-0 PS. Не забудь разрешить обработку прирывания INT1 вместо INT0 (всё подробно в первой ссылке). И кстати я этого в коде не вижу? К этой ноге точно что-то подключено от трансивера? А то код настройки прирывания есть, а включения его нет! GICR |= 1< Ещё ссылка на английском, но более наглядная: http://www.avr-tutorials.com/interru...nal-Interrupts Ха! Точно! ISR(INT0_vect) { //interr = register_get( INTSTATUS); //if( interr & ( 1 << ROKR) && interr & ( 1 << RNOKR)) //register_set( INTRESET, 0x83); //inter |= ( 1 << 1) | (1 << 0); //register_set( INTRESET, 0x00); }; Обработчик прерывания пустой! В общем эта настройка нафиг не нужна. Не помню sei(); надо оставлять для конвеера SPI или нет, но вроде нет... Так что настройку внешнего прерывания и включение глобального не имеет смысла оставлять. |
Видимо всё получилось раз тишина. :)
Удачи в разработке! |
Цитата:
Во-первых работа не даёт нихрена вникнуть толком, что такое прерывание... до койки б доползти... Событие, событие... какое нахрен событие... восьмую ногу (pcint0) завалили на массу (или на плюс) - это чтоль событие?... EIMSK |= (1 << INT0) В схеме вроде как наоборот, ардуино управляет транзюком, а не транзюк ардуиной... короче в голове пока каша... на новый год вместо того чтоб втыкать в зомбоящщик и смотреть на педиков пенсионеров, буду ставить эксперименты. Вот эта канитель: EIMSK |= (1 << INT0) что это?.. на вывод инт0 подали 5 вольт? так? |
Нет.
EIMSK |= (1 << INT0) разрешает обработку прибывания 0. Я выше затупил. Так что прирывание включилось. Тоесть вывод INT0 настроен на реакцию на внешний импульс и срабатывание будет по заднему фронту отрицательного импульса. Другими словами: EICRA |= (1 << ISC01); EIMSK |= (1 << INT0); sei(); Включит обработку прирывания на выводе INT0 по отрицательному импульсу его спаду. EICRA |= (1 << ISC11); EIMSK |= (1 << INT1); sei(); Включит обработку прирывания на выводе INT1 по отрицательному импульсу его спаду. А ещё проще- если на выводе INT0 (или INT1) появляется отрицательное напряжение, то после прекращения его подачи обработается код прерывания: ISR(INT0_vect) { //interr = register_get( INTSTATUS); //if( interr & ( 1 << ROKR) && interr & ( 1 << RNOKR)) //register_set( INTRESET, 0x83); //inter |= ( 1 << 1) | (1 << 0); //register_set( INTRESET, 0x00); }; Но поскольку в теле функции ни чего нету (всё закоменчено), то ни чего и не произойдёт. А прерывание это аппаратный приоритет кода. Тоесть как только будет вызвано событие прерывания, основной код остановит своё выполнение и отработается код из функции прерывания. НО! Поскольку в коде прерывания пусто, то настраивать и разрешать его не имеет смысла! И на схеме видно что выводы INT0(4) и INT1(5) ни куда не подключены! Тоесть не парься по поводу этих строк. Можешь их из кода вообще выкинуть и функцию тоже. Ни чего не изменится. Видимо был рассчёт на то, что контроллер шины или выдаёт импульс на приём пакета или что очевиднее это увод в SLEEP контроллера когда на шине тихо. Но это ни как не реализовано. Задействованы ноги PB0-5. А именно сигналы GPIO (PB0), CS2(PB1), CS1(PB2) это как цифровые выходы. И PB3-5 - MOSI, MISO, SCK как SPI шина. Ну и PD0 и PD1 как UART. Так что забудь о прерывании. При переделку кода на другой контроллер нужно поменять назначения 8 выводов если они не совпадают (те что написал выше). |
Цитата:
Цитата:
Цитата:
PB0... Этот вывод подсоединён к базе транзистора и он мне не нужен. Соответственно, там где в коде есть - "PINB0", удаляем её (вернее комментим на всякий случай). PB1... он же SS2, управляет электронным потенциометром. Я управлять им не собираюсь. Соответственно там где в коде содержится надпись "PB1", вернее PINB1, смело удаляем эти строки. Так?... void execCmd( const byte cmd) { // PORTB &= ~( 1 << PINB1); // заземляем вывод SS это точно!!!))) // spi_transfer( 0x11); //передаём по spi // spi_transfer( cmd); //передаём по spi // PORTB |= ( 1 << PINB1); // отпускаем SS // delay( CMD_WAIT_MS); //задержечка 50 милисек // PORTB &= ~( 1 << PINB1); // опять заземляем SS это точно!! //spi_transfer( 0x11); //передаём по spi //spi_transfer( nocmd); //передаём по spi // PORTB |= ( 1 << PINB1); // и отпускаем SS }; Иначе, если этого не сделать, то в моём контроллере 32U4 эти 4 строчки будут валить вывод SCLK он же PB1 на массу. Так?... Я их тоже закомментил чтобы не удалять совсем. Далее идёт PB2... он же контакт SS для TSS463C Соответственно, мне надо строчки PINB2 заменить на PINB0, потому что на моей атмеге 32U4 вывод SS - это PB0. Так же думаю что не обязательно заменять на PINB0... Можно, пожалуй и на PINB6, чтоб рядышком было PB3-5 - MOSI, MISO, SCK как SPI шина Вот тут затык!... нету таких строчек где было б указано PINB3, PINB4, PINB5, видимо тут как-то все назначается автомасиськи PD0 и PD1... Опять затык!... где это в коде прописано? Нет такого!... У меня в 32U4 юарт находится на ногах: TXD1 - PD3 (PD1 атмега 328) RXD1 - PD2 (PD0 атмега328) Надеюсь я правильно понимаю что юарт это RX и TX... И в 32U4 там какаято хрень с этим юартом... толком не пойму какая там два юарта чтоли... И, кстати!!! причём тут этот самый юарт?... разве в коде он гдето есть? execCmd - это юарт?... помоему вот эта строка: execCmd( source); отправляет по SPI команду на цифровой потенциометр, чтоб он выставил определённое сопротивление, в данном случае source у нас равна 0xfd т.е - 1.20 kom разве нет? |
Ой как ты далеко от этого!
Смотри! Открываем даташит на 328:https://d3s11pzv7w3h1q.cloudfront.ne...GA328-PU-3.jpg Видишь что внутри корпуса написано? Это физические контакты. А снаружи что они делают. Соответственно Ищем даташит на 32U4 https://www.arduino.cc/en/uploads/Ha...PinMapping.png И если в коде ни чего менять не хочешь то ищешь какой вывод какому соответствует и просто меняем их физически. Если хочешь сделать удобнее их расположение, то придётся в прошивке менять выводы и порты. Но есть выводы которые ты не сможешь поменять! SPI и UART будут именно на тех выводах, что написаны на контроллере. А вот цифровые входы-выходы можно менять на любые. Тоесть выводы PB0-2 можешь назначить любые удобные поменяв их в коде, А выводы MOSI, MISO, SCK, RX, TX будут только те, что написаны в даташите. Смотрим на 32U4 и понимаем что выводы SPI занимают те же выводы что и нужные нам цифровые входы-выходы. Тоесть придётся менять на другие. Тоесть скажем PORTB |= ( 1 << PINB1); это вывод PB1 можно сделать любым, только помни что с номером вывода меняется и порт. PORTА |= ( 1 << PINА1); |
Тоесть шины данных ищем по даташиту, если у нового контроллера они совпадают с задействоваными нами цифровыми входами-выходами, то переназначаем цифровые порты, а не шины.
у 32U4 SCK равен PB0 который у нас занят в исходнике. Так что PB0 придётся переносить на любой удобный нам вывод. И так далее. Сначала подключи все шины, потом смотри какие выводы удобно использовать чтоб дорожки не перекручивать особо. можно их двинуть на PB4-6... Меньше циферок в коде менять. PB0 > PB4 PB1 > PB5 PB2 > PB6 В коде соответственно PINB0 > PINB4 PINB1 > PINB5 PINB2 > PINB6 Всё, дальше подключаешься в соответствии с ремапом и вперёд. Даже порт не менять если тяжело по началу. PS! Чуть не забыл! Если плата спаяна уже или купил готовую, то просто используй переходник UART<>USB. Всё равно софтину свою писать для планшета, так что не важно HID это будет устройство или конвертер уровня. Тем более что если думаешь что будет просто завести HID с одновременной эмуляцией клавы и порта воода-вывода, то сильно заблуждаешься. |
Блин... у меня такое чувство что ты меня держишь за полного идиота, но это не совсем так! ))) С даташитами обоих контроллеров я разве что не сплю. Я пробовал переназначать выводы (щас уже не вспомню с каких на какие, ибо пробовал по-разному), но толку - НОЛЬ!!! Видимо где-то в какой-то строчке закралась ошибочка и... в монитор порта выводятся не те команды
Короче... Я б тебе показал бы свой модифицированный код, и прокомментировал бы как он работает, но здесь на форуме его хрен вставишь... На почту могу скинуть Цитата:
Хрен его знает что в коде не так... Что там с ЮАРТом? Так и не ответил... Цитата:
А вот там где в коде будет - PINB2, я напишу - PINB0! Но этого недостаточно! Чтото где-то ещё клинит... Юарт?... Цитата:
Цитата:
|
Выводы PB0-2 на промикре это SPI.
Так что цифровые выводы придётся сдвинуть как не крути. И сдвинуть их проще на PB4-6. При этом в коде менять минимум. А что с УАРТом не так? В коде про него ни слова нет. И о порте D тоже. Если хочешь с UART работать не средствами arduino ide, точнее библиотеки оттуда, то вот это почитай: https://alex-exe.ru/radio/avr/avr-uart/ Но зачем он тебе? Включи порт на котором диод на микре и мигай им как принят пакет. Ну чтоб видеть что происходит по началу. Потом прикручивай уже usb. В принципе тебе надо всего 3 ноги изменить для промикры. Или одну если обвес ещё из двух микрух не нужен. И посмотри скорость кварца, а то в коде стоит 16 мегагерц. При прошивке ардуино иде вообще можно это из кода убрать. PS. Вот нормальный пример работы с uart. Стоит заметить что скорость зависит от частоты тактирования проца Цитата:
|
Цитата:
Цитата:
Цитата:
С частотой кварца я давно разобрался. Верхние строки кода я удалил ибо они никак не управляют ардуиной. Вернее не я а, разработчик этого кода - Лазаров. Я с ним списывался. Адаптировать его под 32U4 он, паразит не хочет. Ну это не беда. Это код не полностью (только луп). Цитата:
Попробую ещё раз повнимательнее, но чувствую что бесполезно |
Ок. Давай сначала.
Что из электронной схемы ты уже выкинул. Избавимся от лишнего кода сначала. Убери из кода который ты выше представил execCmd везде. И если работает убери и саму функцию. Убери это: ISR(INT0_vect) { //interr = register_get( INTSTATUS); //if( interr & ( 1 << ROKR) && interr & ( 1 << RNOKR)) //register_set( INTRESET, 0x83); //inter |= ( 1 << 1) | (1 << 0); //register_set( INTRESET, 0x00); }; и это: // Enable ATMega Interrupts on INT0 EICRA |= (1 << ISC01); // The falling edge of INT0 generates an interrupt request EIMSK |= (1 << INT0); // Enable INT0 После этого обязательно проверь работу кода! В коде поменяй строку на DDRB |= (1 << DDB3) | (1 << DDB5) | (1 << DDB2) Если работает, то поедем дальше. Убираем из кода который ты переделывал уже, там где отсылка в КОМ порт все строки начинающиеся с execCmd. Проверяем работает ли, если да, то убираем и функцию: void execCmd( const byte cmd) { PORTB &= ~( 1 << PINB1); spi_transfer( 0x11); spi_transfer( cmd); PORTB |= ( 1 << PINB1); _delay_ms( CMD_WAIT_MS); PORTB &= ~( 1 << PINB1); spi_transfer( 0x11); spi_transfer( nocmd); PORTB |= ( 1 << PINB1); }; и сверху void execCmd( const byte cmd); Затем эту же строку меняем на DDRB |= (1 << DDB3) | (1 << DDB5) | (1 << DDB6) И во всём коде заменяем PINB2 на PINB6 И перепаиваем вывод PB2 на PB6 После проделанного пиши получилось или нет. И если нет, то на каком шаге? Потом спортируем на другой контроллер. Забегая вперёд. Для портации строка DDRB |= (1 << DDB3) | (1 << DDB5) | (1 << DDB6) поменяется на DDRB |= (1 << DDB2) | (1 << DDB1) | (1 << DDB6) | (0 << DDB3) (вот это может и не надо | (0 << DDB3), но логичнее включить на вход порт, хотя он и так в 0... попробуй сначала без) (Вот поэтому у тебя на 32U4 не заводился SPI скорее всего). выводы SPI физически тоже поменяются, расположение PB6 поменяется физически, но уже программно останется как есть. |
T_r_D, что такое - execCmd?
Гуглил, бесполезно блин... НГ... как ни крути, мешает творчеству... дети послали за тетраборатом в аптеку... ох блин... |
А-ха-ха!
Зачёт! Ну ты в свой код посмотри. :) у тебя куча вызовов этой функции, там где в КОМ порт пишешь. Видимо эта функция передаёт данные на вторую микруху которую ты не используешь. Про тетраборат порадовало :) Лизунов в шампанском вылавливать будешь :))))) |
я в юности на бейсике писал, фор ту некст лет принт, гоу ту, ну и тд... это и спасает.
Погоди, я чот не догоняю... - пишешь в ком порт, а функция передаёт данные на другую микруху... у микрухи, что... ком порт чтоль есть??? Не... шампунь мы не пьём!.. а водка, думаю, растворит эту мерзкую субстанцию, навязанную нам ненавистными буржуями :-) ))). ну или накрайняк - проскочит... |
execCmd( tdwn);
// PORTB &= ~( 1 << PINB0); //установить 0 на линии SS Serial.println ("колесо вниз"); Чей это код? :)))))) А execCmd? :) А если посмотреть в тело функции, то понятно что он CS вешает на вторую микруху, которую ты не используешь (PB1). Так если ты её не используешь, так зачем код? Пробуй делать как выше написал короче. Если всё будет ок, то и от ножек избавимся и код поуменьшится. А если совсем всё норм, то и на промикре станет пахать (ну если до низу сообщения дойдём без ошибок). |
Цитата:
Начинаешь удалять лишние строчки (или добавлять свои) и... код не проходит проверку. Ну сам понимаешь, к примеру, если вверху обьявлена переменная, а я внизу удалил строчку где есть на неё ссылка, то всё!... пипец... И сидишь ломаешь голову - что не так... НГ зараза. ща буду ковырять |
Делай как описываю выше.
Сначала убери прерывание полностью. Затем убери из кода execCmd, саму функцию и её объявление сверху. Затем убери лишние порты. Перепиши один порт на другой и перепаяй проводок. Если всё работает, то переназначь выводы SPI и перекинь на другой контроллер. Но нужно на работающем экземпляре добиться того, чтоб не использовались не нужные ноги, чтоб CS перешёл на ногу PB6 поскольку она свободна на промикре и чуть покромсать код чтоб не было лишнего. |
Сука, заработала! про микро мучать не стал, врубил леонардо. Леонардо сразу заработала, правда почемуто иногда ложные команды залетают, типа наводки чтоли какието.. не знаю. с ардуино уно такого нет... Там всё нормально.
Спасибо, братан, буду пробовать библиотеку подключать для управления планшетом Начало положено)))) теперь надо запустить леонарду в режиме слейв, чтоб она не мешала магнитоле! )) PS/ execcmd не убирал. прерывания не убирал. только порты переназначил. я и раньше это делал на про микро, но почемуто только щас на леонарде заработала... ПРобовал на ардуине уно убирать execCmd. Работает, но в начале работы монитора порта залетают ложные нажатия, потом всё норм. Не знаю с чем это связано |
Подцепил библиотеку управления планшетом Александра Фёдорова с сайта DIXOM. Теперича хоть планшет, хоть ноутбук управляются с подрулевых кнопок. Надо, конечно, еще многое что допилить, но пока и так прикольно :-)
Чото с наводками надо делать... T_r_D, прикинь, подключил планшет к леонарде, а леонарду к магнитоле (ну все как надо по схеме)... Как поперли ложные нажатия!... Песни, громкость как начали щёлкать!... Ну я поплевал на левую руку (чтоб контакт получче был) и взялся за металлическую крышку планшета. Ложные нажатия сразу прекратились и всё заработало. Надо где-то в коде массу прописать :-)))) Если серьёзно, то надо получше поизучать код - какая строчка за что отвечает. Я в общих чертах понимаю что и как, но многого всё равно не догоняю. Надо выяснить как код отлавливает нажатия кнопок... Ты ежели что, не пропадай хоть, а то я без тебя как... баран на новые ворота |
Как не пытался избавиться от ложных нажатий (это колесо вверх\вниз), переделывал\исправлял код несколько раз - бесполезно. В конце концов сменил ардуину (благо что у меня их килограмм) и ложные нажатия сразу прекратились на 99 процентов. Когда машина впадает в спячку, (вернее пытается впасть, выключая главное реле, а ардуина не даёт) нажатия начинают проскакивать. на 328 чипе такого не замечал. Надо будет попробовать
|
Интересно узнать, удалось вам довести ваш проект до финиша?
|
Часовой пояс GMT +4, время: 05:16. |
Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot