Технический форум по робототехнике.
CiSi » 23 дек 2009, 23:21
припаял переключатель, включаю диод загарается/ выключаю он гаснет.
между ИК диодом и ТСОП гдето около 1см
Добавлено спустя 6 минут 12 секунд:- Код: Выделить всё • Развернуть
#include <mega8.h>
#include <delay.h>
void flash_l()
{
unsigned int i,j;
for (j=0;j<10;j++)
{
for(i=0; i<12; i++)
{
PORTD.1=1;
delay_us(13);
PORTD.1=0 ;
delay_us(13);
}
delay_us(170); // 0,6 ms
};
}
void main()
{
DDRC = 0xff;
DDRD = 0x02;
DDRB = 0xff;
PORTB = 0x00;
while (1)
{
flash_l();
if (PIND.0 == 0){ // пришел "0"
PORTC.5 = 1; // зажигаем индикацию
delay_ms(100); // чтобы успеть заметить
}
PORTC.5 = 0; // гасим
}
}
yak-40 » 23 дек 2009, 23:21
Значит ТСОП сигналы с ИК диода правильно принимает. Это уже хорошо!
Теперь надо мощность излучения ИК диода подобрать. Поставь переменный резистор последовательно с ИК диодом (где нибудь килоом на 10) и постепенно увеличивай сопротивление до нормальной работы. Ну или попробуй разные номиналы по очереди припаивать. ТСОП очень чувствительный. Засвечивается отраженными сигналами даже через перегородку.
contr » 23 дек 2009, 23:22
Могет лучше так,
- Код: Выделить всё • Развернуть
void flash_l()
{
for(unsigned char i=0; i<12; i++)
{
PORTB.2=1;
delay_us(13);
PORTB.2=0 ;
delay_us(13);
}
};
//////////////////////////////////////////////////////////////////////////
void main(void)
{
init();
while (1)
{
flash_l(); // выдали пачку импульсов и сразу проверяем
if(PIND.0 == 0) // пришел "0"
PORTC.5 = 1; // зажигаем индикацию
delay_ms(100); // чтобы непрерывно не излучало и индикатор заметить
PORTC.5 = 0; // гасим кады отклик не дошел
};
}
Последний раз редактировалось
contr 23 дек 2009, 23:25, всего редактировалось 2 раз(а).
yak-40 » 23 дек 2009, 23:26
Ещё, что-бы корректно было перенеси "delay_us(170); // 0,6 ms" в начало цикла, как я советовал ранее.
Добавлено спустя 1 минуту 44 секунды:contr писал(а):Могет лучше так,
Так тоже можно, но я предпочитаю именно пачку импульсов посылать. Для надёжности. Хотя это IMHO/
contr » 23 дек 2009, 23:34
так я Вашу пачку из 12 импульсов и оставил. Можно до 255 увеличить, но 8..10 обычно хватает.
yak-40 » 23 дек 2009, 23:41
Эти 12 импульсов с ИК диода, на выходе ТСОП появятся одним импульсом.
Я имел ввиду пачку импульсов на выходе ТСОП-а.
Добавлено спустя 1 минуту 38 секунд:contr писал(а):но 8..10 обычно хватает.
По даташиту не менее 10 рекомендуют вроде...
CiSi » 24 дек 2009, 00:33
поставил пер резистор на 6.8 ком, но это все равно многовато, надо где то на 3кОм. Но все равно настройка частично получается.
Добавлено спустя 18 минут 42 секунды:
устанавливаю перегородку между ик и тсопом - кручу резистор, индикаторный диод гаснет. пожу препятствием переддатчиком - 0 эффекта, убираю препятствие. Вынимаю перегородку индикатор загорается, частично настройка прошла успешно, но все равно датчик не реагирует на препятствие в переди его.
contr » 24 дек 2009, 00:44
втыкаем шнурок в линейный вход звуковухи компа и шарим по выводам, наблюдая картинки
yak-40 » 24 дек 2009, 00:52
Разнеси ИК диод и ТСОП на расстояние(20-30см) направь друг на друга, попробуй перекрыть лучь непрозрачным предметом, например книгой. Подстрой резистор что-бы чётко срабатывало.
Добавлено спустя 5 минут 45 секунд:И ещё. Ты ТСОП правильно подключил? Согласно даташита?
Вот в этом топике я показывал примеры подключения ТСОП и ИК диода:
viewtopic.php?f=68&t=7188&start=0Это важно.
CiSi » 24 дек 2009, 01:27
Все это сделал срабатывает четко, на растоянии 20-30 см и даже больше. На плате на каком растоянии их установить друг от друга?
Добавлено спустя 1 минуту 40 секунд:Подключино все на прямую, конечноже не по дадашиту.
Добавлено спустя 14 минут 49 секунд:Сейчас обнаружил следующее: поместил ИК диод рядом с тсоп-ом, разделил их перегородкой. включаю схему - после настройки светодиод не загорается, подношу препятствие - датчик то срабативает, то нет. если не срабативает то переключаю ренее установленной кнопкой по совету yak-40 и все работает, вот только частенько надо переключать.
Но меня результат уже радует.
yak-40 » 24 дек 2009, 11:09
Сейчас обнаружил следующее: поместил ИК диод рядом с тсоп-ом, разделил их перегородкой. включаю схему - после настройки светодиод не загорается, подношу препятствие - датчик то срабативает, то нет. если не срабативает то переключаю ренее установленной кнопкой по совету yak-40 и все работает, вот только частенько надо переключать.
Видимо твоя перегородка плохо защищает от проникновения ИК лучей.
А у ТСОП-а АРУ очень хорошо работает, если сигнал ловит, то не отпускает даже слабый.
Я обычно в таких конструкциях ИК диод в длинную металлическую трубку вставляю(например от сломаной телескопической антенны для телека). Тогда он светит исключительно вперед и ТСОП не подсвечивает.
CiSi » 24 дек 2009, 11:34
Нет, дело не в перегородке ("дело было не в бабине"), опробовал разные.
Включаю схему - после настройки светодиод не загорается, подношу препятствие - датчик то срабативает, то нет. если не срабативает то переключаю ренее установленной кнопкой по совету yak-40 и все работает, вот только частенько надо переключать.
Такое ощущение что программа зависает.
statistic » 24 дек 2009, 15:25
могет лучше генерироать импульсы с помощью таймера?delay всё таки не очень хорошо в таких вещах имхо.
Добавлено спустя 2 минуты 33 секунды:- Код: Выделить всё • Развернуть
#include<MEGA8.H>
int t1=0,t2=0;
void main(void) {
DDRC.1=1;
DDRC.2=0;
DDRB.3=1;
DDRB.0=0;
DDRD.5=0;
TCCR0=0b0000001;
ASSR=0x00;
TCCR2=0b00011001;
TCNT2=0x00;
OCR2=0x0D;
while(1){
if((TIFR & (1 << 0))==1){t1=t1+1,t2=t2+1,TIFR=0b00000001;}
if(t1==1){TCCR2=0x00,t1=0;}
if(t2==2){TCCR2=0x19,t2=0;}
if(PINB.0 == 0){PORTC.1=1;}
else{PORTC.1=0;}
}
}
как то так .Это кажется на кварц 7.5 мГц,не помню уже.
CiSi » 24 дек 2009, 21:10
Так то хоть заставить бы его нормально работать, а потом видно бы было...
yak-40 » 24 дек 2009, 23:08
CiSi писал(а):Такое ощущение что программа зависает.
А как у тебя с питанием? Хорошее питание - залог здоровья