Технический форум по робототехнике.
bondik » 14 апр 2010, 21:21
Здраствуйте.Собрал тележку из двух машинок ( как в теме "они выделяют фенол")
Первое что решил сделать это разобраться с TSOP 1736.Собрал на своей монтажке.
Как видно из следуещей фотографии при прямой видимости тсоп срабатывает и светится светик
Проблема заключается в том что если я делаю импровезированное препятствие тсоп срабатывает только при расстоянии до 3 сантиметров =( хотелось бы больше
Вот код программы ( codevisionavr 2,Atmega8,кварц на

- Код: Выделить всё • Развернуть
#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 раз.
кулер 23 » 14 апр 2010, 21:54
Во Точно вот как эти машинки соединить надо во я балбес. Спасибо за идею.
По теме: а ты не пробывал собрать ИК бампер к примеру?
MegaBIZON » 14 апр 2010, 22:09
Какая чудная компановка!
А по теме, извиняюсь, сказать нечего

yak-40 » 14 апр 2010, 22:28
Возможно мал ток через светодиод, или частота импульсов не совпадает с частотой ТСОП.
Добавлено спустя 8 минут 40 секунд:
...и ещё, судя по коду, ты генерируешь импульсы постоянно, а надо пачки импульсов по 12-15 штук с паузой.
Смотри даташит на ТСОП.
З.Ы. Да, и схему пожалуйста в студию.
EdGull » 14 апр 2010, 23:25
срочно перезалить фотки на робофорум!!!
иначе предупреждение и бан
Michael_K » 14 апр 2010, 23:48
В частоту скорее всего не попали - пересчитайте таймер.
а лучше проверьте хотя бы осциллом.
vadinator » 14 апр 2010, 23:49
Можно попробовать ввести транзисторный ключ и подключить несколько светодиодов, для увеличения мощности...а так-же использовать оптические системы (линзы) для увеличения чувствительности приёмника...
Michael_K » 15 апр 2010, 00:03
Посчитайте такты в АВР-студии и посмотрте, какую частоту вы генерируете.
А вообще смысл я не уловил...
Если я правильно понял, таймер переполняется с частотой
8М/256 = порядка 31 килогерц. И переключает светодиод.
Частота на светодиоде получается 15 с чем-то... Ну и где искомое 36?
Даже если раскоментить ваше
// TCNT0=0x14;
То частота переполнения будет
8M/236 = порядка 34 килогерца...
Частота на светодиоде получается около 17... Аналогично?
В этом случае еще нужно учесть, что к тому времени, как прерывание дойдет до команды
TCNT0=0x14;
таймер уже что-то насчитает, и реальная частота будет меньше (и чуточку плавать).
Импульсы не обязательно - можно и постоянно эту частоту гнать.
Добавлено спустя 2 минуты 35 секунд:
Сто пудофф не попали в частоту,
мощность повышать не надо.
Когда он заработает нормально, вам мощность снижать придется,
потому что он будет ловить сигналы десять раз отраженные от потолков...
А тсопы - они выпускаются много лет и _работают_корректно_,
так что название темы - это лол.
bondik » 15 апр 2010, 09:58
Уважаемый EdGull ,извините не знал про фотографии,переделал.
Michael_K большое спасибо,так и думал что моя вина, тогда подскажие пожалуйста какой делитель использовать.Использую кварц на 8МГц.
Последний раз редактировалось
bondik 15 апр 2010, 10:24, всего редактировалось 1 раз.
=DeaD= » 15 апр 2010, 10:05
Модератор "=DeaD=":В редактировании сообщения внизу вкладка "добавить вложения"
Radist » 15 апр 2010, 11:29
Предлагаю системный подход (предполагается, что на тсоп есть описание). Может глючить как железо, так и программа (например часто путают выводы питания). Тсоп имеет три ноги, две это питание, третья выход открытый коллектор. Туда через резюк вешаем светодиод. Светим тсопу в глаз пультом от телевизора метров с 5 - светодиод на выходе тсопа мигает - железо приемное в порядке. Теперь как проверить передатчик. ИК - то не видимо. НО ИК отлично видно цифровым фотоаппаратом/камерой/телефонным фотоаппаратом. Ну это так, к сведению, у вас то светит. Железо в порядке - значит дело в программе. В некоторых контроллерах есть фуз делителя частоты, также нужно проверить что тактирование ведется от нужного источника тактирования. Если есть осциллограф - то смотрим сигнал на ноге контролера. Но мало у кого он есть. Берем временную диаграмму из даташита, пытаемся ее запрограммировать. Рисуем ее на бумажке в виде графика с временами, а прогу запускаем в симуляторе. Ошибке больше негде прятаться - она в коде. Но и симулятор не дает 100 % гарантии. Осциллограф - вот что бы помогло точно. Надеюсь, мои рассуждения вам помогут.
Michael_K » 15 апр 2010, 13:26
bondik писал(а):Michael_K большое спасибо,так и думал что моя вина, тогда подскажие пожалуйста какой делитель использовать.Использую кварц на 8МГц.
Ну, посчитайте-подберите.
Я бы использовал режим таймера, когда ТОР у таймера задается.
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
Michael_K » 15 апр 2010, 15:51
sergy1976 писал(а):Вот код настройки таймера1 в CV.
А вы уверены, что нужно прерывание "Output Compare" использовать, а не "Overflow"?
sergy1976 » 15 апр 2010, 19:53
Да, уверен, проверено на практике:)
В книге Белова А.В. "Создаем устройства на микроконтроллерах", 2007г., на стр.99 вверху описан режим "сброс при совпадении". На стр.112 скриншот с настройками для CV.