www.open-tager.ru

открытый лазертаг форум
Текущее время: 30 ноя 2024, 14:33

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


Реклама

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


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



Начать новую тему Ответить на тему  [ Сообщений: 5319 ]  На страницу Пред.  1 ... 249, 250, 251, 252, 253, 254, 255 ... 532  След.
Автор Сообщение
 Заголовок сообщения: Re: LTAscetik
СообщениеДобавлено: 08 апр 2013, 12:10 
Не в сети
Местный

Зарегистрирован: 13 июл 2011, 17:05
Сообщений: 475
Откуда: Perm
Pingvin писал(а):
Либо используем ШИМ для формирования несущей (переделываем схему).
хоть и не принимаю участия в разработке, но всячески плюсую :)

ну или в 112КГц прерывании только инвертировать ногу и больше ничего не делать.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: LTAscetik
СообщениеДобавлено: 08 апр 2013, 13:38 
Не в сети
Старожил

Зарегистрирован: 26 окт 2012, 00:26
Сообщений: 670
25.02.2013 был пост от вас.

Цитата:
Попробовал отключать прерывания - вроде получается!
Пуляет и ловит пули (на 36 000).
На 56 000 надо ТСОП искать.
Но надо аккуратно все перепроверить - багов можно наделать...


Если эт как то поможет. (204 страница)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: LTAscetik
СообщениеДобавлено: 08 апр 2013, 14:27 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
Фу.
Все нормально.
Ложная тревога, но порядок надо навести.
Пробовал ставить кварц на 18 МГц - девайс вроде запускается, но как только ставлю в свойствах проекта 18000000 - фигня какая то творится.

Короче - пока играем на 53300 Гц.
Вроде чувствительность хорошая - зажимал датчик в руке и пробивает.
Светодиод без тубуса.

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: LTAscetik
СообщениеДобавлено: 08 апр 2013, 22:23 
Не в сети
Редкий гость
Аватар пользователя

Зарегистрирован: 08 апр 2013, 20:56
Сообщений: 14
не успевает прерывание отработать, тут гадать не надо. компилятор на прерывание минимум 70-80 тактов хоронит, на сохранение и восстановление РОН. на ассемблере- самое оно, тактов 25-30 вместе с уходом на вектор и возвратом.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: LTAscetik
СообщениеДобавлено: 09 апр 2013, 05:42 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
hexFF писал(а):
не успевает прерывание отработать, тут гадать не надо. компилятор на прерывание минимум 70-80 тактов хоронит, на сохранение и восстановление РОН. на ассемблере- самое оно, тактов 25-30 вместе с уходом на вектор и возвратом.

А помочь сможете?
Я в AVR-овском ассемблере ни бум-бум... :( :?
Как то же ещё значения из переменных в регистры передать надо. :?
Вот, собственно, код прерывания
Код:
/**************************************************************************************
* Обработчик прерываний таймера
***************************************************************************************/

ISR(TIMER2_COMP_vect){
static volatile uint8_t prt;
prt = TSOP_IN&TSOP_PIN;
if (prt==0) //На ножке ИК-приемника низкий уровень сигнала (пойман сигнал несущей)
   {
       low_level_counter++;//Увеличиваем счетчик длительности низкоуровнего сигнала на ножке ИК-приемника
   }
else  //На ножке ИК-приемника высокий уровень сигнала (пойман сигнал несущей)
   {
       high_level_counter++;///Увеличиваем счетчик длительности высокоуровнего сигнала на ножке ИК-приемника
      if((start_bit_received)&&(high_level_counter > IR_ZERO*8))
      {//Фиксируем окончание приема по таймауту
         start_bit_received   = false;    //отменяем прием
         rx_event = RX_COMPLETE;         //Генерим событие "принят пакет"
         receiver_on = false;//выключаем приемник
         if (ir_transmitter_on==false) TIMSK &=~_BV(OCIE2); //если передача не ведётся - выключаем прерывания
      }
      if((high_level_counter > IR_ZERO*8)&&(ir_transmitter_on==false))
      {
         receiver_on = false;//выключаем приемник
         TIMSK &=~_BV(OCIE2);
      }
   
   }
if (ir_transmitter_on==true)
   {//Если передача разрешена

      if (ir_pulse_counter > 0)      //необходимая длительность пачки импульсов
      {                        //ещё не достигнута, "мигаем" дальше
         IR_LED_INVERT;           //необходимая длительность пачки
         ir_pulse_counter--;
      }
      else                     //пачка импульсов была отправлена,
      {
         IR_LED_OFF;         //тушим ИК-диод
         if ( ir_space_counter > 0)   //проверим, выдержан ли промежуток между импульсами
         {                     //нет, промежуток не выдержан
         
               IR_LED_OFF;   //тушим ИК-диод
               ir_space_counter--;   //уменьшаем обратный счетчик паузы на один "тик"      
         }
         else //Пакет импульсов и промежуток между битами переданы
         {    //нужно формировать следующую пачку (передаваемый бит)
            
            
            if (data_packet.data[cursor_position]!=0) //если указатель указывает не на пустую ячейку
            {
               ir_pulse_counter =data_packet.data[cursor_position++] ; //передадим импульс указанной длительностью
               ir_space_counter = IR_SPACE;      //и про паузу не забудем
            }
            else //Все данные переданы (элемент, на который ссылается указатель, равен 0)
            {
               ir_transmitter_on=false; //выключаем передатчик
               FIRE_LED_OFF;
               display_bullets_update_now++;
            // если    
               if (!receiver_on) //если нет приема пакета
               {
                  TIMSK &=~_BV(OCIE2);          // Запрещаем прерывания по захвату/сравнению
                  
               }   
            }   
         }            
      }
   }
else    {//Если передача запрещена

      }


}



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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: LTAscetik
СообщениеДобавлено: 09 апр 2013, 08:39 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
Возникла мысль (идея подсказана LTagKirov) - измерять длительность принятых пачек от другого таймера - который 8000 Гц молотит.
Тем самым разгрузим прерывание, формирующее несущую!
8000 Гц это 125 микросекунд на период.
То есть "нолику" (600 микросекунд по протоколу) должно соответствовать 4 тика.
"Единичке" (1200 микросекунд по протоколу) - 9 тиков.
Старт-биту (2400 микросекунд по протоколу) - 19 тиков.
Надо попробовать. ;) :)

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: LTAscetik
СообщениеДобавлено: 09 апр 2013, 09:02 
Не в сети
Местный

Зарегистрирован: 13 июл 2011, 17:05
Сообщений: 475
Откуда: Perm
а может ещё и входящий сигнал убрать совсем из прерывания, хотяб. вход же на инт0 висит - там свои прерывания есть.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: LTAscetik
СообщениеДобавлено: 09 апр 2013, 09:51 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
tommy писал(а):
а может ещё и входящий сигнал убрать совсем из прерывания, хотяб. вход же на инт0 висит - там свои прерывания есть.

Убрал.
Вынес прием в другое прерывание.
Сократил передающий обработчик до такого состояния
Код:
/**************************************************************************************
* Обработчик прерываний таймера
***************************************************************************************/

ISR(TIMER2_COMP_vect){

if (ir_transmitter_on==true)
   {//Если передача разрешена

      if (ir_pulse_counter > 0)      //необходимая длительность пачки импульсов
      {                        //ещё не достигнута, "мигаем" дальше
         IR_LED_INVERT;           //необходимая длительность пачки
         ir_pulse_counter--;
      }
      else                     //пачка импульсов была отправлена,
      {
         IR_LED_OFF;         //тушим ИК-диод
         if ( ir_space_counter > 0)   //проверим, выдержан ли промежуток между импульсами
         {                     //нет, промежуток не выдержан
         
               ir_space_counter--;   //уменьшаем обратный счетчик паузы на один "тик"      
         }
         else //Пакет импульсов и промежуток между битами переданы
         {    //нужно формировать следующую пачку (передаваемый бит)
            
            
            if (data_packet.data[cursor_position]!=0) //если указатель указывает не на пустую ячейку
            {
               ir_pulse_counter =data_packet.data[cursor_position++] ; //передадим импульс указанной длительностью
               ir_space_counter = IR_SPACE;      //и про паузу не забудем
            }
            else //Все данные переданы (элемент, на который ссылается указатель, равен 0)
            {
               ir_transmitter_on=false; //выключаем передатчик
               FIRE_LED_OFF;
               display_bullets_update_now++;
               TIMSK &=~_BV(OCIE2);          // Запрещаем прерывания по захвату/сравнению
            }                     
         }            
      }




   }
else    {//Если передача запрещена

      }


}


Похрен. :? :(
Дальше жать - только на ассемблер переходить.
Может, где то математика подводит? :?

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: LTAscetik
СообщениеДобавлено: 09 апр 2013, 10:01 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
Точно!!!!!


Математика!!!!!!


Считаем!
Код:
#define IR_START (IR_START_BIT_DURATION*2*IR_F0)/1000000 //Длительность заголовка
                                          //выраженная в "тиках" таймера

 


2400*2*56000/1000000=268!!!!!!!

Разумеется, 268 в байт не помещается!!!!

2400*2*53300/1000000=255!

Деление целочисленное!

Старт-бит не влазиет.
Твою дивизию!!!

Как обойти ограничение?
Какие идеи?


Понял как - старт бит не ложим в буфер передатчика, а передаем отдельно.
Решаемо! ;) :)

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: LTAscetik
СообщениеДобавлено: 09 апр 2013, 10:24 
Не в сети
Старожил

Зарегистрирован: 26 окт 2012, 00:26
Сообщений: 670
Ура ?


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 5319 ]  На страницу Пред.  1 ... 249, 250, 251, 252, 253, 254, 255 ... 532  След.

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


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

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


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

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