roboforum.ru

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

TSOP не корректно работает

TSOP не корректно работает

bondik » 14 апр 2010, 21:21

Здраствуйте.Собрал тележку из двух машинок ( как в теме "они выделяют фенол")
SNC00036.jpg

Первое что решил сделать это разобраться с TSOP 1736.Собрал на своей монтажке.
SNC00038.jpg

Как видно из следуещей фотографии при прямой видимости тсоп срабатывает и светится светик
SNC00037.jpg

Проблема заключается в том что если я делаю импровезированное препятствие тсоп срабатывает только при расстоянии до 3 сантиметров =( хотелось бы больше
SNC00039.jpg

Вот код программы ( codevisionavr 2,Atmega8,кварц на 8)
Код: Выделить всёРазвернуть
#include <mega8.h>

char TimerCount = 0;


//-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
void SetIRLed()
{   PORTC.0 = ~PORTC.0; }

//-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
void SetLightLed(unsigned char flag)
{   PORTC.5 = flag; }
   

//-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
    // Reinitialize Timer 0 value
//    TCNT0=0x14;
   
    if(TimerCount<28)
        SetIRLed();
    else
        PORTC.0 = 0;
    TimerCount++;
    if(TimerCount==56)
        TimerCount = 0;
}


//-_-_-_-_ главная функция -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
void main(void)
{
    PORTB=0x00;
    DDRB=0x00;
    PORTC=0x00;
    DDRC=0x7F;
    PORTD=0x00;
    DDRD=0x00;
    TCCR0=0x01;
    TCNT0=0x6F;
    TCCR1A=0x00;
    TCCR1B=0x00;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;
    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;
    MCUCR=0x00;
    TIMSK=0x01;
    ACSR=0x80;
    SFIOR=0x00;

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

    while (1)
    {
        if(PIND.1)
            SetLightLed(0);
        else
            SetLightLed(1);   
    };
}



Подскажите пожалуйста в чём проблема,хотелось бы большее расстояние.
Проект кодвизиан присоединен в архиве к топику
Вложения
123.rar
Проект
(17.06 КиБ) Скачиваний: 0
Последний раз редактировалось bondik 15 апр 2010, 10:09, всего редактировалось 1 раз.

Re: TSOP не корректно работает

кулер 23 » 14 апр 2010, 21:54

Во Точно вот как эти машинки соединить надо во я балбес. Спасибо за идею.
По теме: а ты не пробывал собрать ИК бампер к примеру?

Re: TSOP не корректно работает

MegaBIZON » 14 апр 2010, 22:09

Какая чудная компановка! :good:
А по теме, извиняюсь, сказать нечего :oops:

Re: TSOP не корректно работает

yak-40 » 14 апр 2010, 22:28

Возможно мал ток через светодиод, или частота импульсов не совпадает с частотой ТСОП.

Добавлено спустя 8 минут 40 секунд:
...и ещё, судя по коду, ты генерируешь импульсы постоянно, а надо пачки импульсов по 12-15 штук с паузой.
Смотри даташит на ТСОП.
З.Ы. Да, и схему пожалуйста в студию.

Re: TSOP не корректно работает

EdGull » 14 апр 2010, 23:25

срочно перезалить фотки на робофорум!!!
иначе предупреждение и бан

Re: TSOP не корректно работает

Michael_K » 14 апр 2010, 23:48

В частоту скорее всего не попали - пересчитайте таймер.
а лучше проверьте хотя бы осциллом.

Re: TSOP не корректно работает

vadinator » 14 апр 2010, 23:49

Можно попробовать ввести транзисторный ключ и подключить несколько светодиодов, для увеличения мощности...а так-же использовать оптические системы (линзы) для увеличения чувствительности приёмника...

Re: TSOP не корректно работает

Michael_K » 15 апр 2010, 00:03

Посчитайте такты в АВР-студии и посмотрте, какую частоту вы генерируете.

А вообще смысл я не уловил...
Если я правильно понял, таймер переполняется с частотой
8М/256 = порядка 31 килогерц. И переключает светодиод.
Частота на светодиоде получается 15 с чем-то... Ну и где искомое 36?

Даже если раскоментить ваше
// TCNT0=0x14;
То частота переполнения будет
8M/236 = порядка 34 килогерца...
Частота на светодиоде получается около 17... Аналогично?

В этом случае еще нужно учесть, что к тому времени, как прерывание дойдет до команды
TCNT0=0x14;
таймер уже что-то насчитает, и реальная частота будет меньше (и чуточку плавать).

Импульсы не обязательно - можно и постоянно эту частоту гнать.

Добавлено спустя 2 минуты 35 секунд:
Сто пудофф не попали в частоту,
мощность повышать не надо.
Когда он заработает нормально, вам мощность снижать придется,
потому что он будет ловить сигналы десять раз отраженные от потолков...

А тсопы - они выпускаются много лет и _работают_корректно_,
так что название темы - это лол.

Re: TSOP не корректно работает

bondik » 15 апр 2010, 09:58

Уважаемый EdGull ,извините не знал про фотографии,переделал.
Michael_K большое спасибо,так и думал что моя вина, тогда подскажие пожалуйста какой делитель использовать.Использую кварц на 8МГц.
Последний раз редактировалось bondik 15 апр 2010, 10:24, всего редактировалось 1 раз.

Re: TSOP не корректно работает

=DeaD= » 15 апр 2010, 10:05

Модератор "=DeaD=":В редактировании сообщения внизу вкладка "добавить вложения"

Re: TSOP не корректно работает

Radist » 15 апр 2010, 11:29

Предлагаю системный подход (предполагается, что на тсоп есть описание). Может глючить как железо, так и программа (например часто путают выводы питания). Тсоп имеет три ноги, две это питание, третья выход открытый коллектор. Туда через резюк вешаем светодиод. Светим тсопу в глаз пультом от телевизора метров с 5 - светодиод на выходе тсопа мигает - железо приемное в порядке. Теперь как проверить передатчик. ИК - то не видимо. НО ИК отлично видно цифровым фотоаппаратом/камерой/телефонным фотоаппаратом. Ну это так, к сведению, у вас то светит. Железо в порядке - значит дело в программе. В некоторых контроллерах есть фуз делителя частоты, также нужно проверить что тактирование ведется от нужного источника тактирования. Если есть осциллограф - то смотрим сигнал на ноге контролера. Но мало у кого он есть. Берем временную диаграмму из даташита, пытаемся ее запрограммировать. Рисуем ее на бумажке в виде графика с временами, а прогу запускаем в симуляторе. Ошибке больше негде прятаться - она в коде. Но и симулятор не дает 100 % гарантии. Осциллограф - вот что бы помогло точно. Надеюсь, мои рассуждения вам помогут.

Re: TSOP не корректно работает

Michael_K » 15 апр 2010, 13:26

bondik писал(а):Michael_K большое спасибо,так и думал что моя вина, тогда подскажие пожалуйста какой делитель использовать.Использую кварц на 8МГц.

Ну, посчитайте-подберите.
Я бы использовал режим таймера, когда ТОР у таймера задается.

Re: TSOP не корректно работает

sergy1976 » 15 апр 2010, 14:56

bondik писал(а): подскажие пожалуйста какой делитель использовать.Использую кварц на 8МГц.


Вот код настройки таймера1 в CV. Для TSOP 36, значение в регистре сравнения не 0х69, а другое. В прерывании по совпадению инвертируйте бит порта, к которому подключен ТСОП.
Код: Выделить всёРазвернуть
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 8000,000 kHz
// Mode: CTC top=OCR1A
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: On
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x09;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x69;
OCR1BH=0x00;
OCR1BL=0x00;


Для 36кГц: 8000/36=222. Чтобы получить меандр, прерывание должно возникать в два раза чаще. 222/2=111
111 = 0х6F = OCR1

Re: TSOP не корректно работает

Michael_K » 15 апр 2010, 15:51

sergy1976 писал(а):Вот код настройки таймера1 в CV.

А вы уверены, что нужно прерывание "Output Compare" использовать, а не "Overflow"?

Re: TSOP не корректно работает

sergy1976 » 15 апр 2010, 19:53

Да, уверен, проверено на практике:)

В книге Белова А.В. "Создаем устройства на микроконтроллерах", 2007г., на стр.99 вверху описан режим "сброс при совпадении". На стр.112 скриншот с настройками для CV.


Rambler\'s Top100 Mail.ru counter