roboforum.ru

Технический форум по робототехнике.

Как заставить ИК-радар на TSOP'е заработать?

Как заставить ИК-радар на TSOP'е заработать?

Сообщение amdei » 03 окт 2009, 21:41

Граждане!
Не дайте сойти с ума! Скажите, в какое место стены мне удариться головой, чтобы TSOP'а заработала?

Схема прилагается.
ИК-диод обозван IRD.
Все конденсаторы - керамика.
Транзистор между ТСОПой и МК выкидывать пробовал.
IR_locator3.png
Схема


Вот программа:
Импульсы по 16 в пачке (игрался). Паузы между импульсами есть.
Скважность - примерно писят процентов.
Код: Выделить всёРазвернуть
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

static const uint8_t IR_LED = PB1; // Will use PWM.
static const uint8_t TSOP = PB3;

static const uint8_t STATUS_LED = PA2;


static const uint8_t  PULSE_BUNGLE_SIZE = 15; // Counts from Zero.
static const uint8_t  PULSE_INTERBUNGLE_PAUSE = 30;  // In pulses. Counts from Zero.

// 64000000/16/(TOP_VALUE + 1) ~= XXx kHz.
//static const uint8_t  TOP_VALUE = 132; // 30 kHz
//static const uint8_t  TOP_VALUE = 120; // 33 kHz
//static const uint8_t  TOP_VALUE = 110; // 36 kHz
static const uint8_t  TOP_VALUE = 104; // 38 kHz
//static const uint8_t  TOP_VALUE =  99; // 40 kHz
//static const uint8_t  TOP_VALUE =  70; // 56 kHz

// 104/50 ~= 50 % duty. Good.
static const uint8_t  PULSE_DUTY_VAL = 50; // OCR1A value.


void initIO(){
   DDRA = (1 << STATUS_LED);
   
   DDRB = (1 << IR_LED);
   PORTB |= (1 << TSOP); // Eliminate Z state...
}

void initPWM(){
   
   // Do Async operation.
   PLLCSR = (1 << PLLE);
   loop_until_bit_is_set(PLLCSR, PLOCK);
   PLLCSR |= (1 << PCKE);

   TCCR1A = (1 << PWM1A)|(1 << COM1A1)|(0 << COM1A0); // See table 35 on page 77

   // PCK/16
   // See table 34 on page 74
   TCCR1B = (0 << CS13)|(1 << CS12)|(0 << CS11)|(1 << CS10);
   OCR1C= TOP_VALUE;
   
   TIMSK |= (1<<TOIE1); //Enable Timer1 OVF interrupt
}


static uint8_t curPulse = 0;
static uint8_t isPause = 0;
volatile static uint8_t mayMeasure = 0;
ISR(TIMER1_OVF1_vect){

   curPulse++;
   
   if(isPause){
      mayMeasure = 1;
      if(curPulse > PULSE_INTERBUNGLE_PAUSE){
         curPulse = 0;
         isPause = 0;
         OCR1A = PULSE_DUTY_VAL;
      }
   }else{
      mayMeasure = 0;
      if(curPulse > PULSE_BUNGLE_SIZE){
         curPulse = 0;
         isPause = 1;
         OCR1A = 0;
      }
   
   }
}

void  main()
{

   initIO();
   initPWM();
   
   PORTA = 0x00;
   OCR1A = PULSE_DUTY_VAL;
   
   sei();
   while(1)
   {
      _delay_ms(1);
      // Wait for a meaningful result...
      if(mayMeasure){
      
         // Check results...
         if(PINB & (1 << TSOP)){
            PORTA &= ~(1 << STATUS_LED);
         }else{
            PORTA |= (1 << STATUS_LED);
            _delay_ms(500);         
         }
      }
   } // while(1)
}


Выдираю TSOP'у с платы - светодиод D3 радостно загорается.
Втыкаю - молчит как партизанин. Специально в программе "защелочку" поставил, чтобы не проморгать кратковременный импульс низкого уровня - ничего.
На всех возможных частотах попробовал, в надежде на то что мне ТСОПы на другую частоту продали. ....

Следующим шагом, чую, будет пентамация методом разбивания молотком имеющихся у меня 5-и ТСОП, чтобы посмотреть не закорочен ли там вход на выход намертво...
Если конечно, кто-нибуть свежих идей по тому как заставить ЭТО заработать не предложит...
amdei
 
Сообщения: 11
Зарегистрирован: 02 сен 2009, 03:07
Откуда: Moscow

Re: Как заставить ИК-радар на TSOP'е заработать?

Сообщение Mamed » 03 окт 2009, 22:33

Все просто. TSOP имеет выход типа "открытый коллектор" и подавать сигнал на базу NPN транзистора просто бессмыслено. Нужно резистором "подтянуть" выход TSOPа к плюсу. А еще лучше выкинуть транзистор и подавать сигнал с TSOPа прямо на вход микроконтроллера, так же с "подтягивающим" резистором.
Аватара пользователя
Mamed
 
Сообщения: 123
Зарегистрирован: 05 ноя 2008, 18:52
Откуда: Ростов-на-Дону
прог. языки: ASM для МК

Re: Как заставить ИК-радар на TSOP'е заработать?

Сообщение yak-40 » 03 окт 2009, 22:45

Проверить работу ТСОП-а можно посветив на него пультом от ТВ, и проверив осцилографом/тестером на выходе сигнал. А работу ИК диода посмотрев на него через цифровой фотоаппарат/телефон/видеокамеру.
- Этот человек - не человек! это робот!
- Как? уже делают?!
- Делают!!!
Аватара пользователя
yak-40
 
Сообщения: 3037
Зарегистрирован: 23 окт 2007, 22:03
Откуда: Москва
прог. языки: С
ФИО: Евгений Яковец

Re: Как заставить ИК-радар на TSOP'е заработать?

Сообщение amdei » 04 окт 2009, 00:31

АА....
Товарищи, мне стыдно признаться....
Я ТСОП'у за каким-то хреном землю с питанием перепутал...
И сидел, незаслуженно клял китайских произсодителей.

Посыпаю голову пеплом....
amdei
 
Сообщения: 11
Зарегистрирован: 02 сен 2009, 03:07
Откуда: Moscow

Re: Как заставить ИК-радар на TSOP'е заработать?

Сообщение yak-40 » 04 окт 2009, 09:06

Надеюсь ТСОП не спалил?
- Этот человек - не человек! это робот!
- Как? уже делают?!
- Делают!!!
Аватара пользователя
yak-40
 
Сообщения: 3037
Зарегистрирован: 23 окт 2007, 22:03
Откуда: Москва
прог. языки: С
ФИО: Евгений Яковец

Re: Как заставить ИК-радар на TSOP'е заработать?

Сообщение Paiko » 30 дек 2009, 13:09

amdei, вот тута есть прекрасные копеешные схемки, работают как часы...
Попробуй... Мне даж настраивать не пришлось, я также вставлял туда китайские VS0038 от двд плеера.. :)

http://robozone.su/2008/04/22/modul-apparatnogo-generatora-dlja.html
http://robozone.su/2008/04/09/modul-ik-datchika-na-osnove-tsop2136.html
Paiko
 
Сообщения: 14
Зарегистрирован: 27 ноя 2009, 12:40
Откуда: Мурманск
прог. языки: C\C++
ФИО: Камбулин Иван


Вернуться в Сенсорика

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

cron