roboforum.ru

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

ИК - приемник

Re: ИК - приемник

ALHIMIK » 23 дек 2009, 18:52

можно таймер Т0 в режим CTC
нужно только подсчитать значение OCR0 и делителя для таймера

Re: ИК - приемник

CiSi » 23 дек 2009, 19:31

Сначало сделал так:
Код: Выделить всёРазвернуть
#include <mega8.h>
#include <delay.h>

void main()
{
DDRC = 0xff;
DDRD = 0x02;
DDRB = 0xff;
PORTB = 0x00;

while(1){ // цикл
  PORTD.1 = 1;  // зажигаем ИК диод
delay_us(13); // половинка периода
PORTD.1 = 0; // гасим
delay_us(13);

if (PIND.0 == 0){ // пришел "0"
PORTC.5 = 1;      // зажигаем индикацию
delay_ms(100);    // чтобы успеть заметить
}
PORTC.5 = 0; // гасим
}}// конец цикла

Вместо 13 перепробовал и 14, 15, 15, 16, 17, 18, но нечего неподошло
потом взял старый пульт из которого выдернул свой ИК и припаял его обратно, а питание зацепил на МК. то есть с помощью мк включаем питание пульта и светодиод загарается с тужной нам частотой, тсоп теперь стал на него реагировать. Но он реагирует не зависимо от того есть препятствие или его нет.

Код: Выделить всёРазвернуть
while(1){ // бесконечный цикл

PORTD.1 = 1;  // зажигаем ИК диод
delay_ms(50);
PORTD.1 = 0;

if (PIND.0 == 0){ // пришел "0"
PORTC.5 = 1;  // зажигаем индикацию
delay_ms(100); // чтобы успеть заметить
}
PORTC.5 = 0; // гасим
}}// конец цикла

тсоп и ик стоят рядом друг с другом, межту ними поставил перекрытие.

Re: ИК - приемник

yak-40 » 23 дек 2009, 20:03

100% Рабочий код для зажигания ИК диодов.
СтоИт на базе для зазыва пылесоса на зарядку, работает без проблемм :D
Выдаёт по 10 пачек импульсов частотой 36кГц, затем пауза 60ms и т. д.
(Atmega8, кварц 11,059200 MHz. Хотя это не принципиально)
Код: Выделить всёРазвернуть
/////////////////////////////////////////////////////////////////////
void flash_l()
{
unsigned int i,j;
for (j=0;j<10;j++)
  {
    for(i=0; i<12; i++)
      {
   PORTB.2=1;
        delay_us(13);
   PORTB.2=0 ;   
        delay_us(13);
      }
   
    delay_us(600);  // 0,6 ms
   };      
}
//////////////////////////////////////////////////////////////////////////
void main(void)
{
init();

while (1)
      {
         flash_l();
         delay_ms(60); // 60 ms
         

      };
}


Малёк ошибся в комментариях, поправил...

Re: ИК - приемник

CiSi » 23 дек 2009, 21:03

Вставил код, ик диод мигает, а тсоп не реагирует, теперь даже на пульт. Что опять с кодом не так? -
Код: Выделить всёРазвернуть
#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(600);  // 0,6 ms
   };     
}

void main()
{
DDRC = 0xff;
DDRD = 0x02;
DDRB = 0xff;
PORTB = 0x00;

while (1)
      {
         flash_l();
         delay_ms(60); // 15 ms
         
        if (PIND.0 == 0){ // пришел "0"
PORTC.5 = 1;  // зажигаем индикацию
delay_ms(100); // чтобы успеть заметить
}
PORTC.5 = 0; // гасим

      }
}

Re: ИК - приемник

yak-40 » 23 дек 2009, 21:16

Убери после flash_l(); задержку delay_ms(60); В твоей программе она не нужна.
Тоесть, мигнул светодиодом, сразу проверил приходящий сигнал.
Ещё в функции void flash_l() попробуй уменьшить задержку 0,6 ms

Добавлено спустя 2 минуты 31 секунду:
Частота кварца в проекте правильно прописана?

Добавлено спустя 2 минуты 18 секунд:
Осцилографа нет? Посмотреть бы сигнал...

Re: ИК - приемник

CiSi » 23 дек 2009, 21:22

задержку delay_ms(60); - убрал, тсоп стал реагировать на пульт, но не на ик диод.
уменьшил задержку 0,6 ms - все попрежнему.
что еще может быть?
частоту кварца установил в конфигурациях проекта.

Re: ИК - приемник

yak-40 » 23 дек 2009, 21:30

Посмотри через камеру телефона или через фотоаппарат на светодиод. Может он не работает?
А какой у тебя ТСОП, может он не на 36кГц?

Добавлено спустя 2 минуты 45 секунд:
Ещё попробуй измени функцию мигания вот так:
Код: Выделить всёРазвернуть
/////////////////////////////////////////////////////////////////////
void flash_l()
{
unsigned int i,j;
for (j=0;j<10;j++)
  {
   delay_us(600);  // 0,6 ms
    for(i=0; i<12; i++)
      {
   PORTB.2=1;
        delay_us(13);
   PORTB.2=0 ;   
        delay_us(13);
      }
   };      
}

Re: ИК - приемник

CiSi » 23 дек 2009, 21:40

Ик диод светит. А тсоп похож на 2136

Добавлено спустя 4 минуты 29 секунд:
Хотя может и не 36, жаль что на них не пашут рабочую частоту.

Я так понимаю частоту можно изменить изменяя:
PORTB.2=1;
delay_us(13);
PORTB.2=0 ;
delay_us(13);
Только вот как расчитать эти значения?
Последний раз редактировалось CiSi 23 дек 2009, 21:42, всего редактировалось 1 раз.

Re: ИК - приемник

yak-40 » 23 дек 2009, 21:41

Похоже что частота не попадает. Хорошо-бы посмотреть осцилографом та ли частота, а так даже не знаю что ещё предложить сделать :pardon:

Re: ИК - приемник

CiSi » 23 дек 2009, 21:47

осцилографа к сожалению нет. ИК и ТСОП взял из старого видика.

Re: ИК - приемник

yak-40 » 23 дек 2009, 22:14

Тогда остаётся только метод "научного тыка" :wink:
тупо меняй значение "13" на, допустим 5, 7, 9, ну и т. д.пока не заработает :D

Re: ИК - приемник

CiSi » 23 дек 2009, 22:32

Изменил значение этой строки delay_us(170); // 0,6 ms - было 600
ИК диод мерцает очень быстро, индикаторный светодиод то же загарается, то есть тсоп принимает сигнал.

Re: ИК - приемник

yak-40 » 23 дек 2009, 22:45

Я так понял что всё заработало?

Re: ИК - приемник

CiSi » 23 дек 2009, 23:01

не совсем так. Индикаторный светодиод то же загорается и негаснит независимо от того есть препятствие или его нет перед тсоп-ом.

Добавлено спустя 3 минуты 22 секунды:
надеваю на ик непрозрачный колпачок - закрываю ик диод вообще, а индикаторный диод все равно горит, вообще нечего не понимаю.

Re: ИК - приемник

yak-40 » 23 дек 2009, 23:03

Ну, дык, подключи ИК диод через тумблер или кнопку. А потом включай/выключай, и смотри как работает.
Если всё заработает, то дело в прграмме или расположении ИК диода и ТСОП.

Добавлено спустя 1 минуту:
Выложи последнюю версию проги.


Rambler\'s Top100 Mail.ru counter