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

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

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

Цитата:
Но зачем (UART) он тебе?
Включи порт на котором диод на микре и мигай им как принят пакет. Ну чтоб видеть что происходит по началу.
Потом прикручивай уже usb.
ЮАРТ, это что? RX и TX?... не знаю нужны они мне или нет. Ты ж сам говорил их надо переназначать зачем-то. Кстати, я так и не понял может этот ЮАРТ конфликтует с чем-то...
Цитата:
Задействованы ноги PB0-5.
А именно сигналы GPIO (PB0), CS2(PB1), CS1(PB2) это как цифровые выходы.
И PB3-5 - MOSI, MISO, SCK как SPI шина.

Ну и PD0 и PD1 как UART.
Короче... вот часть кода, которую я переделал:

Цитата:
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); // 0xeb... 8.00 k
// PORTB &= ~( 1 << PINB0); //Установить "0" на линии SS
Serial.println ("колесо вверх");
}
else if( wheel < oldwheel || wdwnloop != ( button & ( 1 << WDWN))) {
wdwnloop = ( button & ( 1 << WDWN));
oldwheel = wheel;
// PORTB |= ( 1 << PINB0); //Подтягивающий резистор к порту PB0 Установить "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);
}
С помощью него я в сериал порте вижу нажатия рулевых кнопок.
С частотой кварца я давно разобрался. Верхние строки кода я удалил ибо они никак не управляют ардуиной. Вернее не я а, разработчик этого кода - Лазаров. Я с ним списывался. Адаптировать его под 32U4 он, паразит не хочет. Ну это не беда.
Это код не полностью (только луп).

Цитата:
В принципе тебе надо всего 3 ноги изменить для промикры. Или одну если обвес ещё из двух микрух не нужен.
Еще раз говорю - НЕТ!... НЕ ВЫХОДИТ!!! НЕ ПОЛУЧАЕТСЯ!!! Этого не достаточно!Где-то загвоздка кроется не могу найти хоть тресни!!!
Попробую ещё раз повнимательнее, но чувствую что бесполезно
nikey вне форума   Ответить с цитированием
Старый 31.12.2018, 13:41   #22
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
По умолчанию

Ок. Давай сначала.
Что из электронной схемы ты уже выкинул.
Избавимся от лишнего кода сначала.

Убери из кода который ты выше представил 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; 31.12.2018 в 14:28.
T_r_D вне форума   Ответить с цитированием
Старый 31.12.2018, 16:39   #23
nikey
Новый Пользователь
 
Регистрация: 28.10.2018
Город: орел
Регион: 57
Машина: пежо 307
Сообщений: 17
nikey is on a distinguished road
По умолчанию

T_r_D, что такое - execCmd?
Гуглил, бесполезно
блин... НГ... как ни крути, мешает творчеству... дети послали за тетраборатом в аптеку... ох блин...
nikey вне форума   Ответить с цитированием
Старый 31.12.2018, 18:19   #24
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 вне форума   Ответить с цитированием
Старый 31.12.2018, 21:10   #25
nikey
Новый Пользователь
 
Регистрация: 28.10.2018
Город: орел
Регион: 57
Машина: пежо 307
Сообщений: 17
nikey is on a distinguished road
По умолчанию

я в юности на бейсике писал, фор ту некст лет принт, гоу ту, ну и тд... это и спасает.

Погоди, я чот не догоняю... - пишешь в ком порт, а функция передаёт данные на другую микруху... у микрухи, что... ком порт чтоль есть???

Не... шампунь мы не пьём!.. а водка, думаю, растворит эту мерзкую субстанцию, навязанную нам ненавистными буржуями :-) ))). ну или накрайняк - проскочит...
nikey вне форума   Ответить с цитированием
Старый 31.12.2018, 21:31   #26
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
По умолчанию

execCmd( tdwn);
// PORTB &= ~( 1 << PINB0); //установить 0 на линии SS
Serial.println ("колесо вниз");

Чей это код? )))))
А execCmd?
А если посмотреть в тело функции, то понятно что он CS вешает на вторую микруху, которую ты не используешь (PB1).

Так если ты её не используешь, так зачем код?

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

Цитата:
Так если ты её не используешь, так зачем код?
Братан, да я всё понимаю!))) Но тут вот как получается...
Начинаешь удалять лишние строчки (или добавлять свои) и... код не проходит проверку. Ну сам понимаешь, к примеру, если вверху обьявлена переменная, а я внизу удалил строчку где есть на неё ссылка, то всё!... пипец... И сидишь ломаешь голову - что не так...
НГ зараза. ща буду ковырять
nikey вне форума   Ответить с цитированием
Старый 01.01.2019, 17:12   #28
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
По умолчанию

Делай как описываю выше.
Сначала убери прерывание полностью.
Затем убери из кода execCmd, саму функцию и её объявление сверху.
Затем убери лишние порты.
Перепиши один порт на другой и перепаяй проводок.

Если всё работает, то переназначь выводы SPI и перекинь на другой контроллер.

Но нужно на работающем экземпляре добиться того, чтоб не использовались не нужные ноги, чтоб CS перешёл на ногу PB6 поскольку она свободна на промикре и чуть покромсать код чтоб не было лишнего.
T_r_D вне форума   Ответить с цитированием
Старый 01.01.2019, 17:32   #29
nikey
Новый Пользователь
 
Регистрация: 28.10.2018
Город: орел
Регион: 57
Машина: пежо 307
Сообщений: 17
nikey is on a distinguished road
По умолчанию

Сука, заработала! про микро мучать не стал, врубил леонардо. Леонардо сразу заработала, правда почемуто иногда ложные команды залетают, типа наводки чтоли какието.. не знаю. с ардуино уно такого нет... Там всё нормально.
Спасибо, братан, буду пробовать библиотеку подключать для управления планшетом
Начало положено)))) теперь надо запустить леонарду в режиме слейв, чтоб она не мешала магнитоле! ))

PS/ execcmd не убирал. прерывания не убирал. только порты переназначил. я и раньше это делал на про микро, но почемуто только щас на леонарде заработала...
ПРобовал на ардуине уно убирать execCmd. Работает, но в начале работы монитора порта залетают ложные нажатия, потом всё норм. Не знаю с чем это связано

Последний раз редактировалось nikey; 01.01.2019 в 18:13.
nikey вне форума   Ответить с цитированием
Старый 02.01.2019, 21:57   #30
nikey
Новый Пользователь
 
Регистрация: 28.10.2018
Город: орел
Регион: 57
Машина: пежо 307
Сообщений: 17
nikey is on a distinguished road
По умолчанию

Подцепил библиотеку управления планшетом Александра Фёдорова с сайта DIXOM. Теперича хоть планшет, хоть ноутбук управляются с подрулевых кнопок. Надо, конечно, еще многое что допилить, но пока и так прикольно :-)
Чото с наводками надо делать...
T_r_D, прикинь, подключил планшет к леонарде, а леонарду к магнитоле (ну все как надо по схеме)... Как поперли ложные нажатия!... Песни, громкость как начали щёлкать!... Ну я поплевал на левую руку (чтоб контакт получче был) и взялся за металлическую крышку планшета. Ложные нажатия сразу прекратились и всё заработало. Надо где-то в коде массу прописать :-))))

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

Последний раз редактировалось nikey; 02.01.2019 в 23:10.
nikey вне форума   Ответить с цитированием
Ответ


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

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

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



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


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