Например TDA7294

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





Текущее время: Ср июл 16, 2025 14:02:38

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


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



Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Приём ИК сигнала на PIC16F628A
СообщениеДобавлено: Сб мар 02, 2013 14:13:42 
Открыл глаза
Аватар пользователя

Зарегистрирован: Вс мар 04, 2012 01:41:48
Сообщений: 55
Откуда: Двинск
Рейтинг сообщения: 0
Как правильно принимать сигнал по протоколу NEC?

Тут есть немного инфы, http://radiokot.ru/articles/14/

http://radiokot.ru/articles/14/nectrain.gif

Пытаюсь разобраться, и получить пульс 9ms, но ничего не выходит.

Код:
#include "pic.h"
__CONFIG(0xFF32);

#define _XTAL_FREQ 4000000 // Частота 4 МГц

static volatile near unsigned int TMR1 @ 0x00E; //Это объявлен таймер как 2-х байтная переменная. Чтобы не побайтно обращаться, а сразу как к 2-х байтной.

unsigned int x,y;
char IntUp=1;

void interrupt isr(void)
{
    if(TMR1IF)  // Если сработал таймер 1
    {
        TMR1IF=0; // Сброс флага прерываний от таймера
        TMR1 = 0; // Cброс счётчика таймера
        RB7 = ~RB7; //Для виду
    }

    if (INTF)
    {
        INTF=0; // Сброс флага прерываний от на ножки RBO/INT
        TMR1 = 0; // Cброс счётчика таймера
        RB1 = ~RB1; //Для виду

        if(INTEDG) //
        {
            IntUp = 1; // Signal UP
            INTEDG=0;
        }
        else if(!INTEDG)
        {
            y = TMR1;
            IntUp = 0; // Signal DOWN
            INTEDG=1; //Меняем на нарастающий.
        }

        if(IntUp==0) //Signal DOWN
        {
            if(y<53)
                while(1){RB2=1;}
            else if(y==53)
                while(1){RB3=1;}
            else if(y>53)
                while(1){RB4=1;}
        }               
    }
}

/*****************************************************************/


void main(void)
{
    PEIE=1; // Разрешение прерываний от периферийных модулей.
    GIE=1; // Global interrupt enable // разрешить глобальную обработку прерываний
   
   TRISB=0b00000001;
    PORTB=0; // На выходы ноль
    RBPU = 0; // Подтягивающие R (0-вкл, 1-выкл) Подтянуты к  +
   
   INTEDG=1; // Внешнее прерывание на ножке RBO/INT осуществляется по фронту: либо по нарастающему (если в регистре OPTION бит INTEDG=1), либо по спадающему (если INTEDG=0).
 
    TMR1ON=1; // Включаем таймер
    TMR1IE=1;  // Разрешение прерывания от таймера
    TMR1IF=0;  // Сброс флага прерываний от таймера
    TMR1 = 0; //65535
    T1CKPS0=0; //выбираем предделитель
    T1CKPS1=0; //11 = 1:8 // 10 = 1:4 // 01 = 1:2 // 00 = 1:1
    TMR1CS=0; // 0- Внутренний источник таков Fosc/4  1- Внешний
 
    while(1)
    {

    }
}


Пробую вот таким способом, почемуто всегда на любом пульте, любой кнопки срабатывает
Код:
            else if(y==53)
                while(1){RB3=1;}


Может кто подскажет в чём проблема,


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

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


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

Сейчас этот форум просматривают: frogling777 и гости: 3


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

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


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