Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы
Непрочитано 06.08.2014, 23:12  
artyomugr
Вид на жительство
 
Аватар для artyomugr
 
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
artyomugr на пути к лучшему
По умолчанию Алгоритм Декодирования На Базе Rr10 & Mega8

Добрый вечер уважаемые форумчане! Подскажите пожалуйста как отсеять шумы на выходе приемника ?
Задача: сделать универсальный декодер команд ду на базе радио.
На ИК лучах система пашет отлично, а вот на радио - не программируется , так как шумы влияют на систему.

Тактовая частота МК равна 4мГц
Код сейчас такой:

Код:
// сам захват поступающих импульсов
void decode_ir_data()
{
tim_system_rc=0x06;

if(start) // если установлен старт бит - начинаем измерять импульсы
{

if(a‹=111)data_ir[a] = timer_ir;
if(a‹112)a++;
         timer_ir=0;     // обнуляем счетчик
        
if(a›110)
{
         a=112;                  // сбрасываем счетчик данных массива
         tim_stop=1;
         z=0;
}
}

if(start==0) // старт бит установлен? нет!
{
         if(IR && timer_ir›100) start=0x01; // да!
         else timer_stop();
}

if(a==112) { start=0;}
}

void timer_stop()
{
tim_system_rc=0;
if(start) { tim_stop=1;}
start=0;
a=0;
         timer_ir=0;
}

// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
LED=1;
if(flags_prog && WR_EN)
{
         timer_stop();
}
else
{
decode_ir_data();
}
}

// обучение командам ДУ

case 0:
                         if (cmd_rc==0) // команда не поступила
                                 {
                                         if(tim_stop==1)
                                         {
                                         #asm("cli")
                                        
                                         if(flags_prog && WR_EN==0)
                                         {
                                         for(d=0; d‹111; d++) // delete data
                                                         {
                                                         com1[d]=0;
                                                         }
                                                                                        
                                         for(d=0; d‹111; d++)
                                                         {
                                                         com1[d]= data_ir[d];
                                                         }
                                         }
                                        
                                         for(d=0;d‹111;d++) // алгоритм определения поступившей команды
                                         {
                                                 if (com1[d]›0 && com1[d]‹0xFF )
                                                 {
                                                         cmd_rc=1;
                                                         d=111; // выходим из цикла
                                                         timer_led_shou=0;
                                                 }
                                                 else
                                                 {
                                                         cmd_rc=0;
                                                 }
                                         }
                                        
                                         }
                                
                                 }
                                 else                    // команда поступила
                                 {                      
                                         if(++timer_led_shou › 20) {timer_led_shou=0; cmd_rc=0; } // выходим в захват команды
                                 timer_led=20;  
                                         flags_interrupt=1;
                                 }
                                
                                 if(++timer_led_ch›15) timer_led_ch=21;
                                 else CMD1=1;
                                 if(timer_led_ch›10 && timer_led_ch‹15)CMD1=0;
         break;

// распознавание "своей" команды.

 if (tim_stop==1)
                                                         {
                                                                 #asm("cli")
                                                                cmd.cmd_0=1;

                                                                cmd.cmd_1=cmd.cmd_2=cmd.cmd_3=1;

                                                                cmd.flags_0=cmd.flags_1=cmd.flags_2=cmd.flags_3=0;

                                                                for(d=0; d‹111; d++)
                                                                 {
                                                                         com_buff[d] = com1[d];

                                                                         if (com_buff[d]‹4)cmd.flags_0=1;

                                                                         if(cmd.flags_0==0)
                                                                         {
                                                                         if (((com_buff[d]+3) ‹ data_ir[d]) || ((com_buff[d]-3) › data_ir[d])) // команда 1
                                                                                 cmd.cmd_0=0;
                                                                         }                              

                                                                        com_buff[d] = com2[d];

                                                                         if (com_buff[d]‹4)cmd.flags_1=1;

                                                                         if(cmd.flags_1==0)
                                                                         {                                                                                                                                              
                                                                                if (((com_buff[d]+3) ‹ data_ir[d]) || ((com_buff[d]-3) › data_ir[d])) // команда 2
                                                                                cmd.cmd_1=0;
                                                                         }

                                                                        com_buff[d] = com3[d];

                                                                        if (com_buff[d]‹4)cmd.flags_2=1;

                                                                         if(cmd.flags_2==0)
                                                                         {                                                              

                                                                         if (((com_buff[d]+3) ‹ data_ir[d]) || ((com_buff[d]-3) › data_ir[d])) // команда 3
                                                                                cmd.cmd_2=0;
                                                                         }

                                                                        com_buff[d] = com4[d];

                                                                        if (com_buff[d]‹4)cmd.flags_3=1;

                                                                         if(cmd.flags_3==0)
                                                                         {                                                                      
                                                                         if (((com_buff[d]+3) ‹ data_ir[d]) || ((com_buff[d]-3) › data_ir[d])) // команда 4
                                                                                cmd.cmd_3=0;
                                                                         }


                                                                 data_ir[d]=0; // стираем буфер
                                                                 }

                                                                 tim_stop=0;
                                                                if(flags_prog) delay_ms(100);
                                                                 #asm("sei")
                                                         }

Буду всем крайне признателен за любую помощь в этом направлении!
Реклама:
artyomugr вне форума  
 

Закладки

Метки
atmega8, mega8, rr10
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 08:03.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot