www.open-tager.ru

открытый лазертаг форум
Текущее время: 27 ноя 2024, 07:12

Часовой пояс: UTC + 3 часа [ Летнее время ]


Реклама

Правила форума


В разделе запрещены - обсуждение оборудования не поддерживающего открытых протоколов, реклама и ссылки на готовые продукты лазертага, обсуждение политики производителей и самих производителей. Виден всем.



Начать новую тему Ответить на тему  [ Сообщений: 58 ]  На страницу Пред.  1, 2, 3, 4, 5, 6
Автор Сообщение
СообщениеДобавлено: 08 ноя 2013, 14:07 
Не в сети
Аксакал форума

Зарегистрирован: 29 авг 2011, 11:08
Сообщений: 1849
G-man писал(а):
Допустимо. Более того умная зарядка просто до уровня зарядить побыстрому,


Величину тока решил ограничить программно значениями поменьше, иначе придётся ставить в схему терморезистор прикленный к АКБ, один контроль по "ступенке" уже недостаточен для обеспечения безопастности.

_________________
"За 2 месяца максимум можно чертёж сделать, еще за 3 фундамент." (c) Номернабис


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 18 фев 2014, 11:41 
Не в сети
Местный

Зарегистрирован: 21 фев 2013, 19:18
Сообщений: 417
Откуда: Украина
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; //принятая по ИК команда
с чем может быть это связано? Не могу никак победить прием команд с пульта, фиксирует все как ошибку приема.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 18 фев 2014, 12:29 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
Пардон - мой косяк.
extern
а не export! :oops:

Ошибку фиксирует потому что длинна команды больше 14 бит.
Тоже прерывание надо подправить.

_________________
Ваше оружие становиться значительно эффективней, если его снять с предохранителя!


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 18 фев 2014, 12:31 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
Так у меня есть где то прошивка-шаблон для работы с командами.
Только, наверно - для 3.1
А может и для 3.0
Надо поискать.

Там уже и обработчик принятых команд написан, только команды добавляй в список.

А что - пульт уже сваяли?

Вроде она


Вложения:
LTAscet_3_1_Atmega32_RC.zip [445.68 KiB]
Скачиваний: 466

_________________
Ваше оружие становиться значительно эффективней, если его снять с предохранителя!
Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 18 фев 2014, 12:51 
Не в сети
Местный

Зарегистрирован: 21 фев 2013, 19:18
Сообщений: 417
Откуда: Украина
Да пульт давно собран, но пока не в корпусе, да мне и под 3.1 пойдет для примера, я пробовал и extern ставить но не обрабатывало команду. На счет прерываний где и как нужно подправить?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 18 фев 2014, 12:53 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
Sabbah писал(а):
Да пульт давно собран, но пока не в корпусе, да мне и под 3.1 пойдет для примера, я пробовал и extern ставить но не обрабатывало команду. На счет прерываний где и как нужно подправить?

в файле isr.c там где то после фиксации таймаута идет проверка количества принятых бит.

_________________
Ваше оружие становиться значительно эффективней, если его снять с предохранителя!


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 18 фев 2014, 12:57 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
Вот обработчик приема сообщения
Код:
   
                  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); //если передача не ведётся - выключаем прерывания
      }

_________________
Ваше оружие становиться значительно эффективней, если его снять с предохранителя!


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 18 фев 2014, 13:11 
Не в сети
Местный

Зарегистрирован: 21 фев 2013, 19:18
Сообщений: 417
Откуда: Украина
ага спс бум пробовать


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 58 ]  На страницу Пред.  1, 2, 3, 4, 5, 6

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


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

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB