Оружие будущего

Форум про оружие будущего
Текущее время: Чт окт 18, 2018 10:29 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: ИК управление
СообщениеДобавлено: Вс фев 15, 2015 5:45 pm 
Аватар пользователя

Зарегистрирован: Вт сен 23, 2008 10:59 am
Сообщений: 1588
Откуда: Moskva
При ремонте квартиры сделал ошибку в разводке освещения, забыл для ламп подсветки картины сделать отдельный выключатель.
Недавно озаботился выключением этих ламп и ничего не придумал как сделать дистанционное управление по ИК. Найдя старый пульт от видеомагнитофона изучил его сигнал и сделал (из того, что под рукой було) на релюхе устройство которое включает и выключает лампы.
Реализацию можно посмотреть
Изображение
А работу здесь

Устройство и общая программа интереса не представляет. И поэтому хочу поделиться только подпрограммой обработчика приемника ИК сигналов.
Сигнал с пульта оказался примерно таким
http://www.sbprojects.com/knowledge/ir/nec.php
но, насколько я понял, инверсии в посылках не было и все посылки после первой были в полной версии. В смысле не урезанные.
Посему, если вдруг кому понадобиться то, вот подпрограмка которая может обрабатывать посылки основанные на длине паузы. Подпрограмму можно настроить на любую длину до 32 бит. После обработки входных данных поднимается флаг получения новых данных и передается 32 битное число которое можно будет разбирать как захочется.

Код:
//Подпрограммы обработчиков глобальных прерываний для ATtiny_25******************
//Версия    :000.02
//Дaта      :18.10.13
//
//    #include <lib_interr_ATtiny_25_V_02.c>
//*******************************************************************************

//Обработчики прерываний
//*******************************************************************************
//Прерывание по EXT_INT0 Внешнее прерывание 0                 (INT0addr = 0x0001)  #define EXT_INT0 2
    interrupt [EXT_INT0] void ext_int0_interrapt (void){
    //Прерывание настроено по спаду MCUCR = (0<<PUD)|(0<<SE)|(0<<SM1)|(0<<SM0)|(1<<ISC01)|(0<<ISC00);
    //Таймер 0 работает постоянно TCCR0B = (0<<FOC0A)|(0<<FOC0B)|(0<<WGM02)|(1<<CS02)|(0<<CS01)|(0<<CS00);
    //Общие макросы
    //   #define ZERO 0                                  //обнуление
    //   #define OFF 0                                   //выключение
    //   #define ON 1                                    //Включение
    //   #define CLEAN 0                                 //очистка
      
    //псевдонимы
        #define DIV         0x3a                       //делитель между 0/1
        #define KEY_MIN      0x1a                      //минимальное значение ключа
        #define KEY_MAX      0x1d                      //максимальное заначение ключа
        #define LONG_DATA    32                        //длинна получаемых данных без ключа
    //внешние переменные
    //   unsigned char f_now_data = OFF;              //флаг получения новых данных
    //   unsigned long int d_dat = ZERO;               //передаваемые данные
   
    //внутренние переменные
        unsigned char d_timer = ZERO;                 //данные таймера
        static unsigned char c_dat = LONG_DATA;         //счетчик импульсов
      static unsigned char f_key = OFF;               //флаг ключа

    //обработчик
        d_timer = TCNT0;                          //получение данных счетчика
        TCNT0 = CLEAN;                             //очистка счетчика
        if (d_timer > KEY_MIN && d_timer <= KEY_MAX){   //проверка начала посылки
         c_dat = LONG_DATA;                          //установка длинны счетчика передаваемых данных
         f_key = ON;                                 //установка флага начала приема данных
         d_dat = CLEAN;                               //обнуления переменной передаваемых данных
      }
        else{
          if (f_key){                                 //разрешение на обработку
             c_dat--;                                //декримируем счетчик данных
             if (d_timer < DIV)d_dat = (d_dat<<1);   //сдвиг с 0
             else d_dat = (d_dat<<1)+1;              //сдвиг с 1
             if (!(c_dat)){                          //Условия выхода
                f_now_data = ON;                    //Устанавливаем флаг новых данных. Выключить после обработки данных
                f_key = OFF;                        //Снимаем флаг разрешения на обработку
                    GIMSK &= (0<<INT0);                 //отключаем прерывания по инт. Включить после обработки данных
             }
           }
        }
    } //END Прерывание по EXT_INT0 Внешнее прерывание 0

//*******************************************************************************
//end***Обработчики прерываний


_________________
Извините за грамотность, сызмальства не обучен. ;-)
P.S. Это я не извиняюсь, это я предупреждаю.

http://www.facebook.com/piton.kaa.10


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: ИК управление
СообщениеДобавлено: Вс фев 15, 2015 6:31 pm 

Зарегистрирован: Пт ноя 14, 2008 10:54 pm
Сообщений: 6794
Откуда: империя зла
картина - заебись :mrgreen:

_________________
Уверен - стреляй. Не уверен - выстрели еще раз! (С) Я

Колупание STM32 - 2% (мигает светиком).


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: ИК управление
СообщениеДобавлено: Вс фев 15, 2015 11:53 pm 
Аватар пользователя

Зарегистрирован: Вт сен 23, 2008 10:59 am
Сообщений: 1588
Откуда: Moskva
ADF писал(а):
картина - заебись :mrgreen:

Я предполагал, что всем понравиться только картина. :-(

Для справки ее название "Довольные люди".
:-)

_________________
Извините за грамотность, сызмальства не обучен. ;-)
P.S. Это я не извиняюсь, это я предупреждаю.

http://www.facebook.com/piton.kaa.10


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: ИК управление
СообщениеДобавлено: Вс мар 01, 2015 8:49 pm 
Аватар пользователя

Зарегистрирован: Вт сен 23, 2008 10:59 am
Сообщений: 1588
Откуда: Moskva
Вот на волне удачного решения вопроса с дистанционным управлением забабахал себе настольную лампу и верхний свет на один пульт.

Прикольно.

В приложенном файле исходник. Может кому пригодиться посмотреть чо как.


Вложения:
Комментарий к файлу: Исходник к дистанционному управлению настольной лампой.
Lampa_IC.rar [89.44 KIB]
Скачиваний: 114

_________________
Извините за грамотность, сызмальства не обучен. ;-)
P.S. Это я не извиняюсь, это я предупреждаю.

http://www.facebook.com/piton.kaa.10
Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


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

Найти:

 

Яндекс цитирования
Русская поддержка phpBB