Страница 1 из 1
IR управление TSOP > AVR
Добавлено: 28 окт 2017, 18:24
Maxim
Доброго времени суток!
Не так давно, я обращался сюда с просьбой о помощи по сенсору. Замечательный человек ANTONCHIP создал для меня код:
Код: Выделить всё
while(1)
{
if((PIND&(1 << PD0)) == 0)
{ while((PIND&(1 << PD0)) == 0){}
PORTB ^= (1 << PB0);
}
}
Он прекрасно работает на сенсорном устройстве(рис. 1) - включает и выключает свет.
Хотел бы сделать подобное, но на ИК отраженном луче. В качестве ИК-приёмника использовал датчик TSOP1736
Но, когда я подсоединил его (рис.2) на вход МК, то стало проявляться что-то подобное дребезгу. При нажатии пульта ТВ я не успевал зафиксировать включенное или выключенное состояния.
Экспериментировал - ставил задержки. Но не прокатило.
Подскажите пож, как решить эту проблему.
Благодарю вас.
Re: IR управление TSOP > AVR
Добавлено: 29 окт 2017, 11:01
Maxim
Пришел к выводу, что нужно использовать компаратор МК. Думаю, что со схемой разберусь, а вот программно прошу помочь.
Сам, тоже буду пытаться разобраться
Re: IR управление TSOP > AVR
Добавлено: 30 окт 2017, 09:57
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) {}
}
Да..., компаратор похоже не тот путь
По советуйте пож. кто нибудь!
Re: IR управление TSOP > AVR
Добавлено: 30 окт 2017, 23:02
Maxim
Вышел из положения, вот таким аппаратным способом. Моргание светодиода, при более длительном удержании кнопки пульта ТВ, прекратилось. Вкл и выкл - работает чётко.
При вставке в программу "временной задержки", она когда-нибудь, да и закончилась бы и вновь прошел бы импульс.
Используя инвертированный триггер Шмитта, в котором аналоговый сигнал преобразуется в лог и используя RC-задержку, удалось победить данную проблему.
Инвертирующий триггер Шмитта - 74HC14.
И все же я надеюсь, что найдутся кулибины, которые смогут решить эту проблему программно. В этом случае выложу полную схему( с прошивкой и исходниками), которую я создал.
С уважением Максим
Re: IR управление TSOP > AVR
Добавлено: 04 ноя 2017, 14:37
Maxim
Решил аппаратно. Всё оказалось гораздо проще. Использовал внешний компаратор, собранного на LM358 и гасящий конденсатор на входе 3.
На осциллограмме фиолетовым цветом показан входящий сигнал. При длительном удержании входного сигнала, осцилляции повторяются так же , как на IR_Led диоде частотой 1kHz. А на выходе компаратора сигнал зеленого цвета - он полностью выпрямленный и появляется с задержкой 8ms. Осцилляции выходного сигнала, при длительном входном сигнале, не наблюдается, т.е. если собрать IR выключатель с таким вот входным модулем, то вкл и выкл света будет работать четко, а при длительном вх. сигнале (например рука долго находится перед IR датчиком с отражением) свет мигать не станет.
Всем удачи.
PS.
Возможно это кому-нибудь и понадобится.