Например TDA7294

Форум РадиоКот • Просмотр темы - Дешифратор ИК-пульта
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Ср апр 17, 2024 00:06:06

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


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Дешифратор ИК-пульта
СообщениеДобавлено: Вс мар 18, 2018 21:17:27 
Грызет канифоль
Аватар пользователя

Карма: 2
Рейтинг сообщений: 10
Зарегистрирован: Сб янв 23, 2016 00:59:59
Сообщений: 287
Откуда: Чебоксары
Рейтинг сообщения: 0
Приветствую!
нужно раскодировать данные передаваемые с ИК пульта от телека. Протоколы смотрел,но ничего подходящего не нашел. Решил сам их добыть написав свой протокол декодирования. Пощупав осциллографом получил что при нажатии любой кнопки пульт просаживает линию на 3 мс затем отпускает на 3 мс. после начинает просаживать перед каждым битом на время около 500 мкс затем,если 0 отпускает линию на 1,5 мс, если 1 линия в плюсе 2,5 мс и так 16 бит.+ в конце передачи я так понимаю бит завершения передачи линия в плюсе 4 мс. При нажатии любой кнопки первые 8 бит одинаковые, вторые 8 бит меняются. в моем протоколе включено считывание начала передачи и 16 бит данных. Стоп-бит я упускаю.
Решил все это считывать с помощью прерывании и таймера для отсчитывания времени удержания в плюсе.
Все прерывания срабатывают, но считывается всякий бред в основном 1. Грешил на время отсчитываемое таймером,но все варианты предделителя перепробовал, В OCR0 все возможные варианты вписал. Может алгоритм не верный, не могу понять... Спасибо за ранее!!!
Спойлер
Код:
#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#define IR_sens    3
#define IR_DDR     DDRD
#define IR_PIN     PIND
#define IR_PORT    PORTD


uint16_t DATA=0;
uint16_t DATA_buf=0;
uint16_t i=0;

uint8_t START_flag=0;              // флаг о начале приема


void init_INT1(void)
{
   MCUCR|=(1<<ISC11)|(0<<ISC10); //генерация прерывания по падающему фронту
   GICR|=1<<INT1;                // включаем прерывание по INT1
}


void init_T0(void)
{
   TCCR0=(0<<WGM00)|(1<<WGM01)|(1<<CS02)|(0<<CS01)|(1<<CS00); // делитель 1024
}



ISR (TIMER0_COMP_vect)
{
   TIMSK&=~(1<<OCIE0);    // отключаем прерывание по таймеру
   if(i<16)
   {
      if((IR_PIN&(1<<IR_sens))) 
      DATA|=1<<i;
      else
      DATA|=0<<i;
      i++;
   }
   
   if(i==16)
   {
      START_flag=0;
      DATA_buf=DATA;

      DATA=0;
      GICR&=~(1<<INT1);            //отключаем прерывание по INT1               
       MCUCR=(1<<ISC11)|(0<<ISC10);// восстанавливаем прерывание INT1 по падающему фронту
      GICR|=(1<<INT1);             //включаем прерывание по INT1 
      i=0;

   }
};
   
   

ISR (INT1_vect)
{
   
   if(!START_flag)                       // если флаг старт не установлен проверяем на достоверность начала приема
   {
      _delay_us(800);                  //
      if((IR_PIN&(1<<IR_sens))==0)     // проверяем достоверность  начала приема
      START_flag=1;                    // если достоверно устанавливаем флаг стат
                                     
   }
   else                                // если флаг установлен
   {
      if((MCUCR&(0x03<<2))==0xC)     //  проверяем по какому фронту прерывание iNT1,
      {
                                             // если прерывание было установлено по восходящему фрнту начинаем отсчитывать время для считывания бита
        TIMSK|=1<<OCIE0;            // включение прерывание таймера
        TCNT0=0x00;                 
      }
      else   
      {
      GICR&=~(1<<INT1);                      //отключаем прерывание по INT1               
      MCUCR|=(1<<ISC11)|(1<<ISC10); // устанавливаем прерывание по восходящему
      GICR|=(1<<INT1);                         //включаем прерывание по INT1
      }           
   }
   //GIFR|=1<<INTF1;
};

int main(void)
{
   
   IR_DDR&=~(1<<IR_sens); // ножку подключенную к датчику настравиваем на вход. данные только входные
   IR_PORT&=~(1<<IR_sens);   // ножку подтягиваем.
     
  init_T0();
  init_INT1();

    OCR0=15;
    sei();
    while (1)
    {   
      
    }
}


Вложения:
2018-03-18_21-58-41.png [28.84 KiB]
Скачиваний: 293
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Дешифратор ИК-пульта
СообщениеДобавлено: Пн мар 19, 2018 07:12:39 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 1
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Вот здесь полностью универсальный алгоритм приема ИК-кодов, проверенный неоднократно и подходящий для 99% всех типов пультов. Для RC5 есть вариант и проще...

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Дешифратор ИК-пульта
СообщениеДобавлено: Пн мар 19, 2018 10:01:49 
Грызет канифоль
Аватар пользователя

Карма: 2
Рейтинг сообщений: 10
Зарегистрирован: Сб янв 23, 2016 00:59:59
Сообщений: 287
Откуда: Чебоксары
Рейтинг сообщения: 0
Для RC5

моя диаграмма разве схожа с этим протоколом?


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Дешифратор ИК-пульта
СообщениеДобавлено: Пн мар 19, 2018 10:06:54 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
ROMan2947 писал(а):
моя диаграмма разве схожа с этим протоколом?
вы читать умеете?
ARV писал(а):
Вот здесь полностью универсальный алгоритм приема ИК-кодов, проверенный неоднократно и подходящий для 99% всех типов пультов.
я вашу диаграмму и смотреть не стал -уверен, что в упомянутые 99% попадет :)

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Дешифратор ИК-пульта
СообщениеДобавлено: Пн мар 19, 2018 17:50:10 
Грызет канифоль
Аватар пользователя

Карма: 2
Рейтинг сообщений: 10
Зарегистрирован: Сб янв 23, 2016 00:59:59
Сообщений: 287
Откуда: Чебоксары
Рейтинг сообщения: 0
ок :write:

Добавлено after 7 hours 23 minutes 52 seconds:
На прерываниях и таймере расшифровать данные пока не получается, но на задержках вроде как реализовал.Задолбался правда подгонять тайм-слоты.Понимаю на задержках все уныло,но видя как с пульта управляешь моторчиком это вдохновляет.Хоть пока без реверса))буду разбираться с прерываниями)
Спойлер
Код:


#include <avr/io.h>
#include <util/delay.h>

#define IR_sens    3
#define IR_DDR     DDRD
#define IR_PIN     PIND
#define IR_PORT    PORTD

#define OC1A 5
#define step 50

uint16_t DATA=0;
uint16_t i=0;

void TIMER_instal(void)
{
   DDRD|=(1<<OC1A);
   TCCR1A=(1<<COM1A1)|(0<<COM1A0)|(0<<COM1B1)|(0<<COM1B0)|(0<<FOC1A)|(0<<FOC1B)|(1<<WGM11)|(1<<WGM10);
   TCCR1B=(0<<ICNC1)|(0<<ICES1)|(0<<WGM13)|(1<<WGM12)|(1<<CS12)|(0<<CS11)|(1<<CS10);
}

void read_TIMER(uint8_t data)
{
   switch(data)
   {
      case 0xC8:
      
      if(TCCR1A&(1<<COM1A1))
   {
      if((OCR1A+step)<=0x3FF) OCR1A+=step;else  OCR1A=0x3ff; // увеличиваем обороты
   }
       break;

      case 0x48:
      
      if(TCCR1A&(1<<COM1A1))
      {
      if(((OCR1A-step)>0x00)&((OCR1A-step)<0x3FF))   OCR1A-=step;  else OCR1A=0; // убавляем обороты
      } 
      break;
      
      case 0xF4: TCCR1A|=(1<<COM1A1); break; // старт
       case 0xA8: TCCR1A&=~(1<<COM1A1);break; // стоп
   }
}

uint8_t IR_kod(void)
{
   DATA=0;
   if(!(IR_PIN&(1<<IR_sens)))
   {
      _delay_us(1100);
      if(!(IR_PIN&(1<<IR_sens)))
      {   
         _delay_ms(7);
         
         if(IR_PIN&(1<<IR_sens))
         {
            DATA|=(unsigned int)1<<i;
            _delay_ms(1);
         }
         else
         {
            DATA|=(unsigned int)0<<i;
         }
         
         while(i<=15)
         {
            i++;
            _delay_ms(2);
            if(IR_PIN&(1<<IR_sens))
            {
               DATA|=1<<i;
               _delay_us(1050);
            }
            else
            {
               DATA|=0<<i;
            }
            
         }
         i=0;
      }
      
   }
   DATA=DATA>>8;
   read_TIMER(DATA);
}

int main(void)
{
   IR_DDR&=~(1<<IR_sens); // ножку подключеную к датчику настравиваем на вход. данные только входные
   IR_PORT|=(1<<IR_sens);   // ножку подтягиваем.
   TIMER_instal();
   while (1)
   {
      IR_kod();
   }
}


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

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


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

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


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

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y