www.open-tager.ru http://www.open-tager.ru/forum/ |
|
LTAscet - расширяем функционал прошивки http://www.open-tager.ru/forum/viewtopic.php?f=5&t=2178 |
Страница 6 из 6 |
Автор: | LTagKirov [ 08 ноя 2013, 14:07 ] |
Заголовок сообщения: | Re: LTAscet - расширяем функционал прошивки |
G-man писал(а): Допустимо. Более того умная зарядка просто до уровня зарядить побыстрому, Величину тока решил ограничить программно значениями поменьше, иначе придётся ставить в схему терморезистор прикленный к АКБ, один контроль по "ступенке" уже недостаточен для обеспечения безопастности. |
Автор: | Sabbah [ 18 фев 2014, 11:41 ] |
Заголовок сообщения: | Re: LTAscet - расширяем функционал прошивки |
Pingvin писал(а): Посмотрел я тут на описание команд - состоят они из двух байт. Первый байт как раз и указывает на команду, а второй - параметр команды. Я предлагаю такую структуру Цитата: //----------------------------------------------------- //Определим структуру для хранения полученной по ИК команды typedef struct IR_Comand { uint8_t name; //наименование команды uint8_t param;//параметр команды } tir_comand; Откойте файл types.h и опишите её в любом месте (копи-паст ) Теперь добавим к глобальным переменным новую переменную для принятой команды. Открываем файл global_variables.c и добавляем Цитата: volatile tir_comand ir_comand; //принятая по ИК команда volstile говорит компилятору - "не удаляй и не игнорируй эту переменную при оптимизации!" Чтобы наша глобальная переменная была видна из других файлов проекта - экспортируем её. Пропишем в файле ltag_ascetic.h следующее Цитата: export volatile tir_comand ir_comand; //принятая по ИК команда Теперь не плохо бы написать фукцию, которая брала бы из буфера принятую команду и заносила её в нашу новую переменную. Задекларируем нашу новую функцию в файле ltag_ascetic.h Цитата: tir_comand get_ir_comand(void);//получим из буфера ИК приемника команду Функция вернет структуру, которую мы описали для нашей переменной ir_comsnd Элементарно! В файле ltag_ascetic.c пишем реализацию функции Цитата: tir_comand get_ir_comand(void){//получим из буфера ИК приемника команду tir_comand cmd_tmp; //создаем временную пересенную нужного типа cmd_tmp.name = rx_buffer[0];//имя функции в первом принятом байте (индекс 0) cmd_tmp.param= rx_buffer[1];//параметры функции во втором принятом байте (индекс 1) return cmd_tmp; } Прошу помощи, при компиляции выдает ошибку на строку с Код: export volatile tir_comand ir_comand; //принятая по ИК команда с чем может быть это связано? Не могу никак победить прием команд с пульта, фиксирует все как ошибку приема.
|
Автор: | Pingvin [ 18 фев 2014, 12:29 ] |
Заголовок сообщения: | Re: LTAscet - расширяем функционал прошивки |
Пардон - мой косяк. extern а не export! Ошибку фиксирует потому что длинна команды больше 14 бит. Тоже прерывание надо подправить. |
Автор: | Pingvin [ 18 фев 2014, 12:31 ] | ||
Заголовок сообщения: | Re: LTAscet - расширяем функционал прошивки | ||
Так у меня есть где то прошивка-шаблон для работы с командами. Только, наверно - для 3.1 А может и для 3.0 Надо поискать. Там уже и обработчик принятых команд написан, только команды добавляй в список. А что - пульт уже сваяли? Вроде она
|
Автор: | Sabbah [ 18 фев 2014, 12:51 ] |
Заголовок сообщения: | Re: LTAscet - расширяем функционал прошивки |
Да пульт давно собран, но пока не в корпусе, да мне и под 3.1 пойдет для примера, я пробовал и extern ставить но не обрабатывало команду. На счет прерываний где и как нужно подправить? |
Автор: | Pingvin [ 18 фев 2014, 12:53 ] |
Заголовок сообщения: | Re: LTAscet - расширяем функционал прошивки |
Sabbah писал(а): Да пульт давно собран, но пока не в корпусе, да мне и под 3.1 пойдет для примера, я пробовал и extern ставить но не обрабатывало команду. На счет прерываний где и как нужно подправить? в файле isr.c там где то после фиксации таймаута идет проверка количества принятых бит. |
Автор: | Pingvin [ 18 фев 2014, 12:57 ] |
Заголовок сообщения: | Re: LTAscet - расширяем функционал прошивки |
Вот обработчик приема сообщения Код: case RX_MESSAGE_COMPLITE://принято сообщение { if(get_buffer_bit(0)) //если этот бит равен 1, то это пакет с командой { ir_message = get_ir_message_from_buffer();//выдергиваем значения команды из буфера ИК приемника if (ir_message.control_byte ==Valid_value )//сообщение принято корректно (контрольный байт принят без ошибок) { switch(ir_message.ID)//если имя команды { case Add_Health: //добавить "жизни" { //код для добавления жизни break; } case Add_Rounds://добавить "патронов" { //код для добавления патронов break; } case Command://какая то дополнительноя команда { switch(ir_message.param)//выясним, какая это командв { case 0x05://начать новую игру немедленно { init_var(); //инициализируем переменные joystick_event=no_pressing; //очищаем события джойстика keyboard_event=no_key_pressing;//очищаем события триггера reload_key_event=no_key_pressing;//очищаем события перезарядки rx_event = NOT_EVENT; //очищаем события ИК приемника display_status();//обновляем информацию на дисплее WOUND_LED_ON; play_sound_6(); //код обработки дополнительной команды WOUND_LED_OFF; break; } case 0x00://"выключить" игрока { break; } default: break; } break; } } } } else//контрольный байт сообщения не корректный - ошибка приема { } rx_event = NOT_EVENT; break; } А вот как прерывание подправлено Код: {//Фиксируем окончание приема по таймауту
start_bit_received = false; //отменяем прием switch(bit_in_rx_buff)//проверим, сколько бит принято { case 14: { rx_event = RX_COMPLETE; //Генерим событие "принят пакет" break; } case 24: { rx_event = RX_MESSAGE_COMPLITE;//принято сообщение; break; } default: { rx_event = RX_ERROR; //генерируем событие - "ошибка приёма" } } receiver_on = false;//выключаем приемник if (ir_transmitter_on==false) TIMSK &=~_BV(OCIE2); //если передача не ведётся - выключаем прерывания } |
Автор: | Sabbah [ 18 фев 2014, 13:11 ] |
Заголовок сообщения: | Re: LTAscet - расширяем функционал прошивки |
ага спс бум пробовать |
Страница 6 из 6 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |