IR управление TSOP > AVR

Модератор: boogyman

Ответить
Аватара пользователя
Maxim
Любитель
Сообщения: 11
Зарегистрирован: 23 окт 2016, 00:32

IR управление TSOP > AVR

#1

Сообщение Maxim »

Доброго времени суток!
Не так давно, я обращался сюда с просьбой о помощи по сенсору. Замечательный человек ANTONCHIP создал для меня код:

Код: Выделить всё

while(1)
{	
   if((PIND&(1 << PD0)) == 0)			
    { while((PIND&(1 << PD0)) == 0){}	
	PORTB ^= (1 << PB0);				
    }
}
Он прекрасно работает на сенсорном устройстве(рис. 1) - включает и выключает свет.
Хотел бы сделать подобное, но на ИК отраженном луче. В качестве ИК-приёмника использовал датчик TSOP1736
Но, когда я подсоединил его (рис.2) на вход МК, то стало проявляться что-то подобное дребезгу. При нажатии пульта ТВ я не успевал зафиксировать включенное или выключенное состояния.
Экспериментировал - ставил задержки. Но не прокатило.
Подскажите пож, как решить эту проблему.
Благодарю вас.
Вложения
рис.2
рис.2
рис.1
рис.1
Аватара пользователя
Maxim
Любитель
Сообщения: 11
Зарегистрирован: 23 окт 2016, 00:32

Re: IR управление TSOP > AVR

#2

Сообщение Maxim »

Пришел к выводу, что нужно использовать компаратор МК. Думаю, что со схемой разберусь, а вот программно прошу помочь.
Сам, тоже буду пытаться разобраться
Аватара пользователя
Maxim
Любитель
Сообщения: 11
Зарегистрирован: 23 окт 2016, 00:32

Re: IR управление TSOP > AVR

#3

Сообщение Maxim »

Да, с компаратором более менее нормально работает, но как организовать несколько входов?

Код: Выделить всё

#define F_CPU 8000000
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

ISR (ANA_COMP_vect)					// Установка вектора прерывания
{PORTC^=1;
_delay_ms(250);}	//Вставил задержку, но это не то решение - кнопка просто блокируется на это время

	
	

int main(void)
{
	DDRC=0xFF;						//порт на выход
	sei();							//разрешаем глобальное прерывание
	
	ACSR|=(1<<ADC);					//включение компаратора
	ACSR|=(1<<ACIE);				//разрешение прерываний компаратором
	
	ACSR|=(1<<ACIS1); //|	
   	ACSR&=~(1<<ACIS0);//|выбор прерывания по нисходящему фронту
        while (1) {}
		
}
Да..., компаратор похоже не тот путь
По советуйте пож. кто нибудь!
Вложения
proteus.png
Аватара пользователя
Maxim
Любитель
Сообщения: 11
Зарегистрирован: 23 окт 2016, 00:32

Re: IR управление TSOP > AVR

#4

Сообщение Maxim »

Вышел из положения, вот таким аппаратным способом. Моргание светодиода, при более длительном удержании кнопки пульта ТВ, прекратилось. Вкл и выкл - работает чётко.
При вставке в программу "временной задержки", она когда-нибудь, да и закончилась бы и вновь прошел бы импульс.
Используя инвертированный триггер Шмитта, в котором аналоговый сигнал преобразуется в лог и используя RC-задержку, удалось победить данную проблему.
Инвертирующий триггер Шмитта - 74HC14.
И все же я надеюсь, что найдутся кулибины, которые смогут решить эту проблему программно. В этом случае выложу полную схему( с прошивкой и исходниками), которую я создал.
С уважением Максим
Вложения
multisim.png
Аватара пользователя
Maxim
Любитель
Сообщения: 11
Зарегистрирован: 23 окт 2016, 00:32

Re: IR управление TSOP > AVR

#5

Сообщение Maxim »

Решил аппаратно. Всё оказалось гораздо проще. Использовал внешний компаратор, собранного на LM358 и гасящий конденсатор на входе 3.
На осциллограмме фиолетовым цветом показан входящий сигнал. При длительном удержании входного сигнала, осцилляции повторяются так же , как на IR_Led диоде частотой 1kHz. А на выходе компаратора сигнал зеленого цвета - он полностью выпрямленный и появляется с задержкой 8ms. Осцилляции выходного сигнала, при длительном входном сигнале, не наблюдается, т.е. если собрать IR выключатель с таким вот входным модулем, то вкл и выкл света будет работать четко, а при длительном вх. сигнале (например рука долго находится перед IR датчиком с отражением) свет мигать не станет.
Всем удачи.
PS.
Возможно это кому-нибудь и понадобится.
Вложения
33.png
Ответить