ИК барьер

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
ipf
Встал на лапы
Сообщения: 131
Зарегистрирован: Вт сен 20, 2011 18:41:41
Откуда: Вьетнам

ИК барьер

Сообщение ipf »

Собрал схему ик барьера на atmega16 частота 8 мегагерц , на PORTB.3 модулирую сигнал кодом,
#include<mega16.h>
void main (void){
DDRB.3=1;
ASSR=0x80;
TCCR0=0x19;
TCNT0=0x00;
OCR0=110;
while(1);
}


на ИК диод через резистор 100 ом. Принимаю Tsop1836 выводы GND на массу, VCC через 220 ом на питание, OUT на ногу МК PINA.0
Далее направил ик диод на Tsop. Программа состоит в следующем, если луч между ик диодом и TSOP прерывается, то загорается сетодиод на PORTD.1

if (PINA.0==1){
PORTD.1==1;
else{
PORTD.1==0
}
}

Включил, не работает. На сколько я понимаю я не правильно принимаю сигнал. Подскажите пожалуйста что не так. Схемку добавил)
Вложения
reciver2.gif
(9.3 КБ) 721 скачивание
Реклама
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: ИК барьер

Сообщение oleg110592 »

Так Вам нужно промодулировать светодиод частотой 36 кГц (TSOP на другие частоты не должен реагировать). Делал подобное - все работало.

while(1); - бесконечный цикл
как программа доберется до if (PINA.0==1){..... не понятно
Реклама
ipf
Встал на лапы
Сообщения: 131
Зарегистрирован: Вт сен 20, 2011 18:41:41
Откуда: Вьетнам

Re: ИК барьер

Сообщение ipf »

Код так и выглядит, я просто его по кускам написал. я его и моделирую на выходе PORTB.3. Или не правильно модулирую?

#include<mega16.h>
void main (void){

PORTA=0xFF;
DDRA=0x00;
PORTB=0x00;
DDRB=0xFF;
PORTC=0x00;
DDRC=0xFF;
PORTD=0x00;
DDRD=0xFF;

ASSR=0x80;
TCCR0=0x19;
TCNT0=0x00;
OCR0=110;
while(1);
if (PINA.0==1){
PORTD.1==1;
else{
PORTD.1==0
}
}
}
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: ИК барьер

Сообщение oleg110592 »

У Вас все зависнет на while(1);
наверное так
while(1){
if (PINA.0==1) PORTD.1==1;
else PORTD.1==0;
}
а так как считали частоту ШИМ? Проверте осцилографом. Я делал немного не так. Ибо для 8 мГц тактовой частоту ШИМ можно получить максимум 8000000/256=31250Гц или я ошибаюсь?
Реклама
Эиком - электронные компоненты и радиодетали
ipf
Встал на лапы
Сообщения: 131
Зарегистрирован: Вт сен 20, 2011 18:41:41
Откуда: Вьетнам

Re: ИК барьер

Сообщение ipf »

На пульт от телика реагирует) я модулирую не шимом а внутренним таймером
считаю по формуле OCR=(8000000/36000*K*2)-1
К - коэффициент предделителя
Реклама
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: ИК барьер

Сообщение oleg110592 »

Вроде все правильно - проверил в протеусе

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

#include <mega16.h>

// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Place your code here

}

// Declare your global variables here

void main(void)
{
PORTA=0xFF;
DDRA=0x00;
PORTB=0x00;
DDRB=0xFF;
PORTC=0x00;
DDRC=0xFF;
PORTD=0x00;
DDRD=0xFF;

ASSR=0x80; // Это вроде относится к Timer2 ???????????
TCCR0=0x19;
TCNT0=0x00;
OCR0=110;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// Global enable interrupts
#asm("sei")

while (1)
      {
      // Place your code here

      };
}
Test36kHz.jpg
(99.47 КБ) 694 скачивания
Реклама
ipf
Встал на лапы
Сообщения: 131
Зарегистрирован: Вт сен 20, 2011 18:41:41
Откуда: Вьетнам

Re: ИК барьер

Сообщение ipf »

значит из последнего эксперимента получилось вот что. На расстоянии пол метра направлен ик диод на тсоп. Меряю на выходе тсопа напряжение. один конец на выход , другой на + . Показывает 0.03 вольта. Если закрыть ик диод и потом убрать руку то на Tsop Напряжение подпрыгивает до 4.5 вольта и опять 0.03. При изменении расстояния разницы никакой.
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: ИК барьер

Сообщение oleg110592 »

Так все правильно - ик пульт посылает пачки 36кГц импульсов на выходе TSOP уже низкочастотные импульсы:
http://myrobot.ru/wiki/index.php?n=Components.TSOP
Вам тоже можно подавать 36 кГц пачки определеной длительности а на выходе TSOP будет импульс нужной длительности без 36 кГц.
Я делал немного сложнее - выход TSOP подключал на вход UART, светодиод модулировал несущую 36 кГц выходом UART. Грубо - подал сивол на передачу UART, затем програмно проверяю ногу выхода UART - если 1 включаю на светодиод 36 кГц, если 0 выключаю. По окончанию передачи в приемнике UART тот же символ.
ipf
Встал на лапы
Сообщения: 131
Зарегистрирован: Вт сен 20, 2011 18:41:41
Откуда: Вьетнам

Re: ИК барьер

Сообщение ipf »

А как с посылать пачками ик сигнал , модулирую на 36 кгц но как я понимаю мой Тсоп затыкается от постоянной передачи. нужно передавать определенным промежутком, но не знаю как...
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: ИК барьер

Сообщение oleg110592 »

Ну типа как то так:

TCCR0=0x19;
delay_us(300);
TCCR0=0x00;
delay_us(300);
ipf
Встал на лапы
Сообщения: 131
Зарегистрирован: Вт сен 20, 2011 18:41:41
Откуда: Вьетнам

Re: ИК барьер

Сообщение ipf »

А как тогда обрабатывать?
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: ИК барьер

Сообщение oleg110592 »

Ну может так:

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

while(1){
 TCCR0=0x19;
 for(n=0; n<30; n++)
 {
   delay_us(10);
   if (PINA.0==1) PORTD.1=1;
   else PORTD.1=0;
 }
 TCCR0=0x00;
 for(n=0; n<30; n++)
 {
   delay_us(10);
   if (PINA.0==1) PORTD.1=1;
   else PORTD.1=0;
  }
}
ipf
Встал на лапы
Сообщения: 131
Зарегистрирован: Вт сен 20, 2011 18:41:41
Откуда: Вьетнам

Re: ИК барьер

Сообщение ipf »

Спасибо, буду пробовать
ipf
Встал на лапы
Сообщения: 131
Зарегистрирован: Вт сен 20, 2011 18:41:41
Откуда: Вьетнам

Re: ИК барьер

Сообщение ipf »

а можно ли просто генерировать 36 кгц на PORTB.3 а в программе для импульсов дергать им
PORTB.3==1
задержка
PORTB.3==0
задержка.
таким образом можно делать задержку между посланным сигналом
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: ИК барьер

Сообщение oleg110592 »

PORTB.3==1 так нельзя - надо PORTB.3=1 (== операция сравнения, = присваивание)
а почему не хотите модулировать таймером
Вам нужно управлять реле или просто зажигать светодиод?
Я бы так еще попробовал:

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

while(1){
TCCR0=0x19;
for(n=0; n<30; n++)
{
   delay_us(10);
   if (PINA.0==1) PORTD.1=1;
   else PORTD.1=0;
}
TCCR0=0x00;
delay_us(300);
}
ipf
Встал на лапы
Сообщения: 131
Зарегистрирован: Вт сен 20, 2011 18:41:41
Откуда: Вьетнам

Re: ИК барьер

Сообщение ipf »

Ну так я и модулирую таймером. Конечно хочется управлять реле, светодиод так для тестов)
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: ИК барьер

Сообщение oleg110592 »

Вот из форума:
Делать ИК-барьер на TSOP-ах - не самая лучшая идея, я уже на этом обжёгся. Во-первых, TSOP-ы имею огромную чувствительность - они ловят сигнал, отражённый от стен, потолка и различных препятствий. Во-вторых, TSOP-ы реагируют только на несущую (36кГц для TSOP1736). В-третьих, они ещё и имеют автоматическую регулировку усиления, т. е. непрерывную несущую, не промодулированную импульсами, будут считать помехой и быстро перестанут реагировать на неё. То есть, для нормальной работы TSOP-у нужен сигнал вроде такого:

_____~_~_~_~_~__________~_~_~_~_~__________~_~_~_~_~______

Кроме того, из-за инерционности АРУ TSOP-ы плохо реагируют на пересечение луча. То есть, реагируют-то хорошо, но изменения уровня подстраивают АРУ, и начинают ловить отражённый сигнал, и мы получаем на выходе не импульс, а кашу из множества фронтов.

В общем, для ИК-барьера лучше подошёл бы простой фототранзистор в глубине затемнённого цилиндра.


вот готовое устройство (как и я делал - выход TSOP на RX микроконтроллера):
http://progm.nm.ru/arh76.html
тут еще:
http://parts.roboclub.ru/index.shtml?ik
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»