инфракрасный детектор препятствия

Сообщение slav0n » 14 мар 2013, 11:53

ну, уже на что-то похоже.
Пакеты нормально принимаются?
while(1||!1);
зберігай спокій
slav0n
Site Admin
 
Сообщения: 5254
Зарегистрирован: 15 ноя 2009, 18:43
Благодарил (а): 36 раз.
Поблагодарили: 494 раз.

Сообщение Speys » 14 мар 2013, 11:55

Да нормально.Ну хоть стабильно по выходу
Аватара пользователя
Speys
супермодератор
 
Сообщения: 930
Зарегистрирован: 18 ноя 2009, 02:31
Благодарил (а): 21 раз.
Поблагодарили: 25 раз.

Сообщение slav0n » 14 мар 2013, 11:59

ща сделаю контроль приема
while(1||!1);
зберігай спокій
slav0n
Site Admin
 
Сообщения: 5254
Зарегистрирован: 15 ноя 2009, 18:43
Благодарил (а): 36 раз.
Поблагодарили: 494 раз.

Сообщение slav0n » 14 мар 2013, 13:06

вот пробуй
Вложения
main.zip
(477 байт) Скачиваний: 57
while(1||!1);
зберігай спокій
slav0n
Site Admin
 
Сообщения: 5254
Зарегистрирован: 15 ноя 2009, 18:43
Благодарил (а): 36 раз.
Поблагодарили: 494 раз.

Сообщение Speys » 14 мар 2013, 13:47

на выходе не меняется
Вложения
20130314_524314.jpg
Аватара пользователя
Speys
супермодератор
 
Сообщения: 930
Зарегистрирован: 18 ноя 2009, 02:31
Благодарил (а): 21 раз.
Поблагодарили: 25 раз.

Сообщение slav0n » 14 мар 2013, 14:15

вот еще вариант. в протеусе вроде работает
Вложения
main.zip
(477 байт) Скачиваний: 66
while(1||!1);
зберігай спокій
slav0n
Site Admin
 
Сообщения: 5254
Зарегистрирован: 15 ноя 2009, 18:43
Благодарил (а): 36 раз.
Поблагодарили: 494 раз.

Сообщение slav0n » 14 мар 2013, 14:43

вот вариант с генератором случайного кода пакета
Вложения
main.zip
(511 байт) Скачиваний: 64
while(1||!1);
зберігай спокій
slav0n
Site Admin
 
Сообщения: 5254
Зарегистрирован: 15 ноя 2009, 18:43
Благодарил (а): 36 раз.
Поблагодарили: 494 раз.

Сообщение slav0n » 14 мар 2013, 15:07

вот, собственно, получилась такая писанина
Код: Выделить всё
/****************************************************
made slav0n

Chip type           : ATtiny13
9.6 MHz
фузы  заводские, только снять галку CKDIV8
;Hfuse FF
;Lfuse 7A
****************************************************/


#include <avr/io.h>
#include <avr/interrupt.h>
//#include <util/delay.h>     /* for _delay_ms() */
//#include "m8_128.h"


#define out_36kHz   PB1
#define swch_36_38    PB4
#define out_1      PB0
#define out_2      PB2
#define TSOP      PB3


volatile unsigned char flg_err;

ISR(SIG_OUTPUT_COMPARE0B)
{
   static unsigned char timer_strob;
   static unsigned char timer_paket;
   static unsigned char flg_err_paket;
   
   timer_strob++;

      if(timer_strob==66)//середина пачки
      {   
         if(timer_paket <15)
         {
            //проверяем принял-ли TSOP сигнал и поднимаем флаг ошибки
            if(PINB&(1<<TSOP) && TCCR0A&(1<<COM0B0))flg_err_paket =1;
            
            TCCR0A ^= (1<<COM0B0);//изменяем сигнал на противоположный
         }
      }
      else
      if(timer_strob==66+66)//конец-начало пачки
      {
         timer_strob =0;
         timer_paket++;
         if(timer_paket ==65)//конец-начало пакета
         {
            timer_paket =0;
            
            if(flg_err_paket)flg_err =1;//были-ли ошибки в пакете?
            else         flg_err =0;
            
            flg_err_paket =0;
         }
         
         if(timer_paket <15)
         {   
            //конфигурация Галуа, рандомгенератор
            static unsigned char Q = 1;
            Q = (Q>>1) ^ (Q&1 ? 0b11010111 : 0);
            
            if(Q&1)TCCR0A |= (1<<COM0B0);
            else TCCR0A &=~(1<<COM0B0);   
         }
         else   TCCR0A &=~(1<<COM0B0);//отключаем выход если пауза пакета
      }   
}

//============================================================

int __attribute__((naked)) main(void)
{
   PORTB    = (1<<swch_36_38)|(1<<TSOP);//подтяжка
   DDRB    = (1<<out_36kHz)|(1<<out_1)|(1<<out_2);//выходы

   TCCR0A   = (1<<COM0B0)|(1<<WGM01); //на выходе меандр. сброс при совпадении
   TCCR0B   = 1;   //предделитель на 1, запуск таймера
   //TCCR0B   = 0;   //стоп таймер
   
   TIMSK0 = (1<<OCIE0B);//разрешаем прерывание по совпадению В
   
   if(PINB & (1<<swch_36_38))OCR0A = 124; //38khz
   else                 OCR0A   = 131;    //36khz
   
   sei();

   while(1)
   {      
      if(flg_err){PORTB |=(1<<out_1);PORTB &=~(1<<out_2);}
      else      {PORTB |=(1<<out_2);PORTB &=~(1<<out_1);}
   }
}
while(1||!1);
зберігай спокій
slav0n
Site Admin
 
Сообщения: 5254
Зарегистрирован: 15 ноя 2009, 18:43
Благодарил (а): 36 раз.
Поблагодарили: 494 раз.

Сообщение slav0n » 14 мар 2013, 17:56

код легко модифицируется.
Можно поставить желаемое количество символов в пакете, период пакетов.
И еще одна идея.
В таком виде сработка будет даже если пропущен хотя-бы один символ.
Но можно сделать счетчик допустимых ошибок в пакете, как-бы программное загрубление чувствительности.
while(1||!1);
зберігай спокій
slav0n
Site Admin
 
Сообщения: 5254
Зарегистрирован: 15 ноя 2009, 18:43
Благодарил (а): 36 раз.
Поблагодарили: 494 раз.

Сообщение Speys » 16 мар 2013, 11:36

Схема,и плата. Чувствительность очень большая.
Вложения
IR5.jpg
IR.rar
(15.38 Кб) Скачиваний: 82
Аватара пользователя
Speys
супермодератор
 
Сообщения: 930
Зарегистрирован: 18 ноя 2009, 02:31
Благодарил (а): 21 раз.
Поблагодарили: 25 раз.

Сообщение slav0n » 16 мар 2013, 13:43

Еще одна идея.
Видна некоторая задержка в приёме. Интересно, зависит-ли она от чего-нибудь? Например от силы излучения?
Вложения
delay.gif
while(1||!1);
зберігай спокій
slav0n
Site Admin
 
Сообщения: 5254
Зарегистрирован: 15 ноя 2009, 18:43
Благодарил (а): 36 раз.
Поблагодарили: 494 раз.

Сообщение Speys » 16 мар 2013, 21:07

Схема выходного реле, для управления нагрузкой.Вариант исполнения в корпусе разьема RS232.Передающий ИК диод выносной! Снизу установлен диод, в качестве индикатора срабатывания.
Вложения
IR2.gif
i6.jpg
Аватара пользователя
Speys
супермодератор
 
Сообщения: 930
Зарегистрирован: 18 ноя 2009, 02:31
Благодарил (а): 21 раз.
Поблагодарили: 25 раз.

Re: инфракрасный детектор препятствия

Сообщение slav0n » 20 мар 2013, 12:46

Кому интересно, окончательный код выложил в первый пост.
while(1||!1);
зберігай спокій

За это сообщение автора slav0n поблагодарил:
Icik(27 фев 2018, 23:11)
slav0n
Site Admin
 
Сообщения: 5254
Зарегистрирован: 15 ноя 2009, 18:43
Благодарил (а): 36 раз.
Поблагодарили: 494 раз.

Исправления

Сообщение Icik » 27 фев 2018, 23:10

В коде следует заменить SIG_OUTPUT_COMPARE0B на TIM0_COMPB_vect иначе не компилируется. :-):
Icik
 
Сообщения: 1
Зарегистрирован: 27 фев 2018, 23:05
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.

Сообщение slav0n » 01 мар 2018, 09:56

while(1||!1);
зберігай спокій
slav0n
Site Admin
 
Сообщения: 5254
Зарегистрирован: 15 ноя 2009, 18:43
Благодарил (а): 36 раз.
Поблагодарили: 494 раз.

Пред.

Вернуться в Самодельные электронные устройства

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

Сейчас этот форум просматривают: Google [Bot] и гости: 1

cron