roboforum.ru

Технический форум по робототехнике.
Текущее время: 30 ноя 2024, 05:44

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
 Заголовок сообщения: Помогите разобраться с TSOP и таймером
СообщениеДобавлено: 07 янв 2014, 23:36 
Не в сети

Зарегистрирован: 26 авг 2010, 22:28
Сообщения: 8
Всем привет.

Сделал плату ИК-бампера для своего робота с двумя TSOP4836 датчиками и 4 светодиодами на tiny2313

Поскольку хочу на этом проекте понять основные принципы МК, то делаю все по порядку:
запустить диоды на 36кГц -> сформировать их в пачки и разделить на 2 передатчика (левый и правый) -> заставить TSOP получать данные с правильных передатчиков и выставлять в "1" нужный порт для передачи на МК робота.

Сейчас застрял на первом шаге и пытаюсь настроить таймер на частоту 36кГц, но не совсем пойму как правильно подсчитать.

Код:
#define F_CPU 8000000UL
#include <avr/io.h>
#include <avr/interrupt.h>

#define T_POLL 145

ISR(TIMER0_OVF_vect) // По прерыванию включаются или отключаются светодиоды
{
       TCNT0 = T_POLL;   
      switch(PORTD & (1<<PD0))
       {
          case 1: PORTD &= ~(1<<PD0|1<<PD1);   break;
          case 0: PORTD |=1 <<PD0 | 1<<PD1;   break;
          default: break;
       }
}

ISR(INT0_vect)
{
         PORTD |= 1<<PD5 | 1<<PD6;
}

int main(void)
{
   
   // Конфигурация портов
   // На вывод (ИК-диоды, выходные сигналы с модуля)
   
   DDRD |=1 <<PD0;         // правый передатчик
   PORTD &= ~(1<<PD0);
   
   DDRD |=1 <<PD1;         // левый передатчик
   PORTD &= ~(1<<PD1);
   
   DDRD |=1 <<PD4;         // выход на робота - препятствие справа
   PORTD &= ~(1<<PD4);
   
   DDRD |=1 <<PD5;         // выход на робота - препятствие слева
   PORTD &= ~(1<<PD5);
   
   // На ввод (TSOP4836 датчики)
   
   DDRD &= ~(1<<PD2);      // правый датчик
   PORTD &= ~(1<<PD2);
   
   DDRD &= ~(1<<PD3);      // левый датчик
   PORTD &= ~(1<<PD3);
   
   // Инициализация таймера
   
   TCCR0A = 0x00;
   TCCR0B |= 0b00000010;   // деление частоты на 8
   TCNT0 = T_POLL;
   TIFR |= 1<<TOV0;
   TIMSK |= 1<<TOIE0;
   
   sei();
   
   // Цикл программы
   
   while(1);
   return 0;
}


Таймер подсчитал так из статьи на chipenable.ru (ссылка)

Надеюсь, код будет понятен, постоянно пытаюсь приучить себя комментировать.
По этой программе такт длится около 18мс (осциллографа нет, поэтому пробовал симулировать в протеусе), хотя должен длиться около 27мкс. Что у меня может быть неправильно?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите разобраться с TSOP и таймером
СообщениеДобавлено: 08 янв 2014, 12:01 
Не в сети
Аватара пользователя

Зарегистрирован: 07 янв 2005, 23:39
Сообщения: 228
Откуда: г.Норильск, Россия
прог. языки: Pascal, C, C++
ФИО: Раф Попов
По поводу Протеуса можно сказать, что добиться в нем симуляции работы микропроцессоров в реал-тайме практически нереально.

По таймеру-счетчику 0. Он настроен на работу как таймер, с собственной тактовой частотой 8 000 000/8=1 000 000.
То есть инкремент регистра TCNT0 будет происходить каждую микросекунду.
Начальное значение регистра TCNT0=145, это же значение записывается туда при каждом прерывании по переполнению.
Таким образом, для прерывания требуется 256-145=111 тактов таймера или 111 микросекунд.
Так как при каждом переполнении значение битов PORTD.0 и PORTD.1 инвертируется, то частота на этих выходах будет равна 1/((111*2)*10-6)= 4504 Гц.
Чтобы получить частоту моргания около 36 кГц, надо получить частоту прерывания по переполнению 72 кГц. Для этого 1 000 000 надо делить примерно на 14. Поэтому в регистр TCNT0 надо записывать значение 256-14 = 242.

И еще по поводу самого алгоритма для радаров. Моргать светодиодами, отвечающими за разные направления, на мой взгляд, лучше раздельно по времени, в разные временные "фреймы", чтобы не "засвечивать" ими другой TSOP, который опрашивается в данный момент. И еще - моргать надо пачками, "пакетами", а после каждой пачки ловить отраженный сигнал. Если долбить 36кГц постоянно, АРУ TSOP понизит чувствительность и будет нехорошо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите разобраться с TSOP и таймером
СообщениеДобавлено: 09 янв 2014, 11:07 
Не в сети
Аватара пользователя

Зарегистрирован: 01 июл 2009, 08:59
Сообщения: 2254
Откуда: Екатеринбург
прог. языки: асемблер AVR
Про пачки все верно. Делал аналогичные девайсы, наступал на грабли, поэтому не устаю последователям повторять - светодиоды обязательно поместить в непрозрачные трубки (они светят даже задом). Приемник достаточно один, светодиодов - сколько не жалко, временное разделение каналов. И еще один совет - не нужен предделитель на 8, маленького таймера хватит и без него, а частоту точнее получится получить. Кстати, кварц в данном случае не обязателен - отлично работает от внутреннего генератора с подстройкой калибровочного значения (это если комнатное исполнение делаете, а не всепогодное).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите разобраться с TSOP и таймером
СообщениеДобавлено: 11 янв 2014, 15:13 
Не в сети

Зарегистрирован: 26 авг 2010, 22:28
Сообщения: 8
Спасибо за советы, попробую в ближайшее время учесть.
Про пачки знаю, но пока что пытался только запустить на правильной частоте.

Из совета насчет временного разделения - я так понял, лучше всего отправлять пачку на один датчик, ждать с него ответ, затем отправлять сигнал на другой, также ждать ответ и так по кругу?

Походу пора покупать какой-нибудь логический анализатор, Протеусом много не померяешь...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите разобраться с TSOP и таймером
СообщениеДобавлено: 11 янв 2014, 16:26 
Не в сети
Аватара пользователя

Зарегистрирован: 24 окт 2011, 23:32
Сообщения: 803
Откуда: Севастополь
прог. языки: асм
именно !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите разобраться с TSOP и таймером
СообщениеДобавлено: 13 янв 2014, 18:36 
Не в сети
Аватара пользователя

Зарегистрирован: 07 янв 2005, 23:39
Сообщения: 228
Откуда: г.Норильск, Россия
прог. языки: Pascal, C, C++
ФИО: Раф Попов
Kingsman писал(а):
Спасибо за советы, попробую в ближайшее время учесть.
Из совета насчет временного разделения - я так понял, лучше всего отправлять пачку на один датчик, ждать с него ответ, затем отправлять сигнал на другой, также ждать ответ и так по кругу?

Я неправильно выразился. Не то чтобы "ждать" ответ. Это не звук, скорость велика, отклик мгновенен.
Я делал так - формировал пачку из 25-100 импульсов. В цикле, или по таймеру, неважно. А после каждого отправленного импульса в пачке проверял выход TSOP. И суммировал полученные ответы.

Код:
// Reinitialize Timer 0 value
TCNT0=0x15;

for (x=1;x<=51;x++) // 50 импульсов с частотой 38 кГц на передний правый IR светодиод
{
IROUTFR = !IROUTFR;
if (BUMP_FR==0) {count_bump_fr++;}; // счетчик правого переднего IR бампера
delay_us(12);
};

delay_us(450);

for (x=1;x<=51;x++) // 50 импульсов с частотой 38 кГц на передний левый IR светодиод
{
IROUTFL = !IROUTFL;
if (BUMP_FL==0) {count_bump_fl++;}; // счетчик левого переднего IR бампера
delay_us(12);
};

delay_us(450);


Получалось, допустим, так - отправил 100, получил 75. Значит, с вероятностью большей или равной 75% перед датчиком есть препятствие. Полученные отсчеты также можно суммировать и вычислять среднее, фильтровать и т.д.
В остальном все совершенно верно - по кругу, формирование пачки и опрос следующего TSOP.

Цитата:
Походу пора покупать какой-нибудь логический анализатор, Протеусом много не померяешь...


Анализатор штука хорошая и тоже нужен, но гораздо полезнее для робототехника будет любой недорогой цифровой осциллограф типа RIGOL, OWON и т.д.

А светодиоды отлично помещаются в корпуса из по электролитических конденсаторов. Крышка стачивается, "кишочки" с ножками извлекаются, светодиод вставляется внутрь корпуса, в резиновых уплотнителях уже есть отверстия под выводы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите разобраться с TSOP и таймером
СообщениеДобавлено: 14 янв 2014, 00:26 
Не в сети

Зарегистрирован: 26 мар 2008, 12:45
Сообщения: 326
Kingsman
Прошу Вас точно сообщить(написать) в чем собственно проблема:
1. Есть затруднения в написании кода - в чем проблема, на каком языке и какой контроллер
2. Есть затруднения в в знаниях по этой проблеме - какие знания отсутствуют, и что хотите знать
напишите я помогу ( не стесняйтесь, отсутствие знаний - не порок ( это я не для Вас))
Loox, спасибо


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите разобраться с TSOP и таймером
СообщениеДобавлено: 16 янв 2014, 14:12 
Не в сети
Аватара пользователя

Зарегистрирован: 10 ноя 2011, 12:02
Сообщения: 5691
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья
Kingsman писал(а):
Походу пора покупать какой-нибудь логический анализатор, Протеусом много не померяешь...

Походу с AVR пора завязывать. На нормальных контроллерах можно таймерами аппаратно генерить эти пачки импульсов.
И Логический анализатор!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите разобраться с TSOP и таймером
СообщениеДобавлено: 17 янв 2014, 08:27 
Не в сети
Аватара пользователя

Зарегистрирован: 01 июл 2009, 08:59
Сообщения: 2254
Откуда: Екатеринбург
прог. языки: асемблер AVR
Не надо завязывать с AVR только на том основании, что у ТС с ним возникли проблемы. МК умеет аппаратно генерировать несущую, а управление огибающей - прерогатива программиста. В данном конкретном случае задача настолько простая, что для отладки достаточен симулятор студии. Тут чисто МК работает на выход. Вот когда не работает 1wire или I2C (то есть есть еще устройства, которые вносят свой вклад в цифровой сигнал) - тут поможет осциллограф, даже одноканалный низкочастотный. А вот когда логических сигналов куча, и не все из них генерит МК - вот только тогда может понадобиться логический анализатор (многоканальное по своей сути устройство). Но если воспользоваться древним принципом "Разделяй и властвуй" - логический анализатор не понадобится никогда.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите разобраться с TSOP и таймером
СообщениеДобавлено: 17 янв 2014, 12:09 
Не в сети

Зарегистрирован: 26 мар 2008, 12:45
Сообщения: 326
К сожалению заявитель темы не ответил о характере затруднений, отказался от помощи - а напрасно, я бы помог
Текст программы, который он представил, представляет собой набор бессмысленных инструкций, к большому сожалению.
На AVR можно генерировать практически любые сигналы, по крайней мере для работы с TSOP.
По поводу симулятора "студии" - в некоторых версиях, симуляция выводов таймеров работает НЕПРАВИЛЬНО!!!!!!
Loox.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите разобраться с TSOP и таймером
СообщениеДобавлено: 17 янв 2014, 19:48 
Не в сети
Аватара пользователя

Зарегистрирован: 01 июл 2009, 08:59
Сообщения: 2254
Откуда: Екатеринбург
прог. языки: асемблер AVR
Может быть. Я сижу в 4.12 (все еще) - полет нормальный.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите разобраться с TSOP и таймером
СообщениеДобавлено: 17 янв 2014, 22:42 
Не в сети

Зарегистрирован: 26 мар 2008, 12:45
Сообщения: 326
Не знаю, не знаю ...
У меня 4.16 , выводы OCR у таймеров ведут себя весьма оригинально, вернее неправильно..
loox


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите разобраться с TSOP и таймером
СообщениеДобавлено: 19 янв 2014, 21:05 
Не в сети

Зарегистрирован: 26 авг 2010, 22:28
Сообщения: 8
Loox, я вовсе не отказался от помощи. Спасибо за предложение, буду спрашивать. Прошу прощения за отсутствие - роботы и МК для меня все же хобби, на которое иногда просто нет времени.
По поводу трудностей - они не то что вообще есть, но в каждой конкретной ситуации возникают и в одиночку их решать иногда тяжело и наверное глупо, можно ведь и глупостей наворотить, которые вроде и работают, на на "соплях".

Пишу на Си, пробовал Ассемблер, даже написал пару программок а-ля помигай лампочкой. Но посчитал что мне по душе все же Си. Трудностей как таковых не было с простыми проектами. Делал, например УФ лампу для сушки ногтей (второй половинке) с задержкой времени, горизонтальную развертку (вернее правил под себя готовый проект на асме), робота с сервоприводами и фотодиодами (едет на свет фонарика), где пытался запустить ШИМ.

В этой теме просто захотел не учиться на своих ошибках, а все же выслушать советы знающих людей. А чтобы не брать абстрактные вопросы, буду спрашивать по конкретному проекту, который надеюсь все же в ближайшее время доделать и прикрутить к роботу.

elmot, я с Вами не согласен. Если бы хотел скорости и простоты, взял бы ардуино с готовыми модулями. Сейчас мне хочется именно разобраться с логикой программирования МК и AVR в частности, а заодно научиться "курить" мануалы :) Кстати, только к AVR я привязываться не собираюсь. Недавно спаял небольшой термометр на MSP430 и после этого бампера приступлю к нему.

MEXAHuK, спасибо за разъяснение, попробую внести изменения. О покупке осциллографа уже задумывался, пока заказал посоветованный ALS. Думаю, для начала хватит.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите разобраться с TSOP и таймером
СообщениеДобавлено: 19 янв 2014, 21:17 
Не в сети
Аватара пользователя

Зарегистрирован: 10 ноя 2011, 12:02
Сообщения: 5691
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья
Kingsman писал(а):
Если бы хотел скорости и простоты, взял бы ардуино с готовыми модулями. Сейчас мне хочется именно разобраться с логикой программирования МК и AVR в частности, а заодно научиться "курить" мануалы :) Кстати, только к AVR я привязываться не собираюсь. Недавно спаял небольшой термометр на MSP430 и после этого бампера приступлю к нему.

Одобрямс! :good:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите разобраться с TSOP и таймером
СообщениеДобавлено: 20 янв 2014, 22:17 
Не в сети

Зарегистрирован: 26 мар 2008, 12:45
Сообщения: 326
Коллега
спасибо за ответ..
Вопрос с TSOP, при всей конструктивной простоте, весьма не простой.
В связи с тем, что ко мне поступило много вопросов связанных с использованием TSOP, вероятнее всего, с разрешения ФОРУМА, я выложу некоторый материал по применению TSOP в этой ветке (материал готовиться и будет готов через 2-3 дня).
Вы пожалуйста не обижайтесь на мою ремарку по поводу Вашей программы. Усли необходимо - обращайтесь на личную почту.
Loox


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 15 ] 

Часовой пояс: UTC + 4 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO