HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > БЕЗОПАСНОСТЬ И УЯЗВИМОСТИ > Электроника и Фрикинг > Схемы и программы
   
 
 
Опции темы Поиск в этой теме Опции просмотра

Непримитивная сигнализация
  #1  
Старый 02.03.2008, 16:27
Animal
Moderator - Level 7
Регистрация: 19.10.2007
Сообщений: 225
С нами: 9769145

Репутация: 298
Cool Непримитивная сигнализация

Подходит ко мне братан и говорит:"Сделай мне сигнализацию для гаража." Ну, я ему, как прожженый конструктор:"Пишите ТЗ, товарищ! Причем по ГОСТ-ам!". Нормальная такая фраза, когда делать чего нибудь не хочется. А он мне:"Не сделаешь - к компьютеру хрен больше подойдешь!" Вот эта фраза меня сильно простимулировала.
Итак, исходные данные:
На двери будет стоять герконовый датчик, а в помещении, так называемый датчик "объема" TEXECOM REFLEX (классная штука кстати, и стоит всего рублей 300).

В рабочем положении оба датчика замкнуты (TEXECOM через сопротивление 18 Ом, кстати). В помещении будет стоять штатный извещатель (какой - не знаю, бирки на нем стерты), в нем пьезоизлучатель с генератором к нему (уши закладывает - мама не горюй! и лампа (из трех светодиодов, каждый - размером с палец). У лампы и излучателя раздельное питание. Будет кнопка "постановка на охрану" на ящике "сейфового типа, в котором все "кишки" спрятаны и потайная кнопка "снять с охраны". Так же на ящике будет светодиод (просто чтобы был .
Схема устройства:


В тексте подробные комментарии, но, на всякий случай, опишу алгоритм работы на "пальцах".
После подачи питания контроллер инициализируется и ждет 10 сек (это надо датчику "объема")
do{ бесконечный цикл
ждем 10 сек перед постановкой на охрану и смотрим кнопку "снять с охраны"
если датчики в норме
{ Ждем срабатывания датчиков
Ждем 10 сек или кнопку "снять с охраны"
Включаем тревогу и смотрим кнопку "снять с охраны"
}
иначе даем сигнал неудачной постановки и ждем кнопку "снять с охраны"
ждем кнопку "постановки на охрану"
}while(true);
 

  #2  
Старый 02.03.2008, 16:35
Animal
Moderator - Level 7
Регистрация: 19.10.2007
Сообщений: 225
С нами: 9769145

Репутация: 298
По умолчанию

Это пипец! Я не могу текст программы оправить! Он мне постоянно выдает
"500 Internal Server Error". Ни с тегами CODE, ни тупо текстом! Че за фигня и как с ней справиться?
 

  #3  
Старый 02.03.2008, 16:53
iddqd
Banned
Регистрация: 19.12.2007
Сообщений: 924
С нами: 9681386

Репутация: 2145


По умолчанию

ога, я тоже с этим столкнулся
не могу запостить большой объём текста- приходится разбивать на несколько постов
 

  #4  
Старый 02.03.2008, 16:56
Animal
Moderator - Level 7
Регистрация: 19.10.2007
Сообщений: 225
С нами: 9769145

Репутация: 298
По умолчанию

Текст программы, часть 1:
Код:
#include <16F676.h>           //Выбираем контроллер
#use delay(clock=4000000)     //Частота внутр генератора 4МГц
#use Fast_IO(A)               //Ручная установка регистров TRIS
#use  Fast_IO(C)
#fuses nowdt, nomclr,intrc_IO //отключаем сторожевой таймер, 
                              //отключаем внешний сброс
                              //работа от внутреннего генератора 
                              //без тактовых импульсов на RA4
#define  DAT1        Pin_A5   // первый датчик (объем)
#define  DAT2        Pin_A4   // второй датчик (контакт)
#define  Sec_On      Pin_A3   // кнопка "поставить на охрану"
#define  Sec_Off     Pin_C5   // кнопка "снять с охраны" секретная :)
#define  Out_Siren   Pin_A0   // выход на сирену
#define  Out_Lamp    Pin_A1   // выход на лампу
#define  Out_Led     Pin_A2   // выход на светодиод

 //переменные********************************************************
 Boolean          Stat_Dat1,  //состояние первого датчика
                              //true, если датчик замкнут (на охране)
                  Stat_Dat2,  //состояние второго датчика
                              //true, если датчик замкнут (на охране)
                  Stat_On,    //состояние кнопки "поставить на охрану" true, если была нажата
                  Stat_Off;   //состояние кнопки "снять с охраны" true, если была нажата
Unsigned int16    Time;       //это время, "тикает" с тактом 0.01 секунды
//прерывания**********************************************************
#Int_Timer0                   // обработка прерывания
   void Timer0_Isr()
      {  ++Time;              // добавляем единицу к счетчику времени, 1 счет=0.01 сек
         Delay_us(13);
         Set_Timer0(100); } 
 //функции***********************************************************
void Initial()                               //функция настройки контроллера
 { setup_adc_ports(NO_ANALOGS);           //все выводы "цифровые"
   setup_adc(ADC_OFF);                    // отключаем АЦП
   setup_timer_0(RTCC_Internal|RTCC_Div_64); // настройка таймера 0
   setup_timer_1(T1_DISABLED);            //отключение таймера 1
   setup_comparator(NC_NC);               //отключение компаратора
   setup_vref(FALSE);                     //отключение порогового напряжения компаратора
   Set_Tris_A(0b11111000);                //выводы RA0, RA1, RA2 - выходы
   Set_Tris_C(0b11111111);                //весь порт С настроен на вход
   enable_interrupts(Global);             //Запускаем счетчик времени
   enable_interrupts(Int_Timer0);
   output_low(Out_Siren);                    //Отключаем сирену и индикацию
   output_low(Out_Lamp);
   output_high(Out_Led);
   Stat_On=false;                            //кнопки считаем отключенными
   Stat_Off=false;
   delay_ms(10000);           //пауза при включении питания (для датчика объема)
                                   //при сбросе питания система 
                                 //попытается встать на охрану
   }
 

  #5  
Старый 02.03.2008, 16:58
Animal
Moderator - Level 7
Регистрация: 19.10.2007
Сообщений: 225
С нами: 9769145

Репутация: 298
По умолчанию

Текст программы, часть 2:
Код:
boolean Read_Dat1()            //возвращает true, если датчик 1 замкнут
{   if (input(Dat1))
   {    delay_ms(30);
      if (input(Dat1))
      {   delay_ms(30);
         if(input(Dat1)) 
         {return false;}
         else return true;
      }else return true;
   }else return true;   
} //end Read_Dat1()

boolean Read_Dat2()            //возвращает true, если датчик 2 замкнут
{   if (input(Dat2))
   {    delay_ms(30);
      if (input(Dat2))
      {   delay_ms(30);
         if(input(Dat2)) 
         {return false;}
         else return true;
      }else return true;
   }else return true;   
} //end Read_Dat2()

boolean Read_Sec_On()         //возвращает true, если кнопка постановки на охрану нажата
{   if (!input(Sec_On))
   {    delay_ms(30);
      if (!input(Sec_On))
      {   delay_ms(30);
         if(!input(Sec_On)) 
         {return true;}
         else return false;
      }else return false;
   }else return false;   
} //end Read_Sec_On()

boolean Read_Sec_Off()      //возвращает true, если кнопка снятия с охраны нажата
{   if (!input(Sec_Off))
   {    delay_ms(30);
      if (!input(Sec_Off))
      {   delay_ms(30);
         if(!input(Sec_Off)) 
         {return true;}
         else return false;
      }else return false;
   }else return false;   
} //end Read_Sec_Off()
 

  #6  
Старый 02.03.2008, 17:00
Animal
Moderator - Level 7
Регистрация: 19.10.2007
Сообщений: 225
С нами: 9769145

Репутация: 298
Cool

Текст программы, часть 3:
Код:
//***MAIN*******************************************************
main()
{Initial();
do{   unsigned int16 Temp_Time;                  //начало главного цикла цикла
   Stat_On=false;
   Stat_Off=false;
   Time=0;
   Temp_Time=0;

   // 10 секунд пауза перед постановкой на охрану
   do{   
      Temp_Time=Time;                        //секундный цикл
      do{   if(!Stat_Off)Stat_Off=Read_Sec_Off();   //проверяем кнопку снятия
      }while(Time<(Temp_Time+100));
      output_high(Out_Lamp);                  //5 сек моргаем лампочкой
      if (Time>550) output_high(Out_Siren);      //еще 5 сек - лампой и сиреной
      Temp_Time=Time;                        //0.1секундный цикл
      do{   if(!Stat_Off)Stat_Off=Read_Sec_Off();   //проверяем кнопку снятия
      }while(Time<(Temp_Time+10));
      output_low(Out_Lamp);
      output_low(Out_Siren);
   }while((Time<1000)&&!Stat_Off);               //конец паузы
   // попытка поставиться на охрану
   Stat_Dat1=Read_Dat1();                     //проверяем состояние датчиков
   Stat_Dat2=Read_Dat2();      
   if (Stat_Dat1&&Stat_Dat2&&!Stat_Off)         //если датчики в норме 
   {   do{      if (Stat_dat1) Stat_Dat1=Read_Dat1();   //и кнопку снятия не нажимали
            if (Stat_dat2) Stat_Dat2=Read_Dat2();   //ждем срабатывания датчиков
            delay_ms(900);
            output_high(Out_Led);            //подмигиваем светодиодом
            delay_ms(100);
            output_low(Out_Led);
      }while(Stat_dat1&&Stat_Dat2);            //один из датчиков сработал
      Time=0;
      do{                                 //перед тревогой пауза 10 сек
                                       //для нажатия кнопки "снять"
         Temp_Time=Time;                     //секундный цикл
         do{   if(!Stat_Off)Stat_Off=Read_Sec_Off();   //проверяем кнопку снятия
         }while(Time<(Temp_Time+100));
         output_high(Out_Lamp);
         if (Time>=550) output_high(Out_Siren);
         delay_ms(100);
         output_low(Out_Lamp);
         output_low(Out_Siren);      
      }while((Time<1000)&&!Stat_Off);            
      while(!Stat_Off){                     // ТРЕВОГА
         output_high(Out_Lamp);
         output_High(Out_Siren);
         Temp_Time=Time;
         do{   if(!Stat_Off)Stat_Off=Read_Sec_Off();
         }while(Time<(Temp_Time+50));
         output_low(Out_Lamp);
         output_low(Out_Siren);
         Temp_Time=Time;
         do{   if(!Stat_Off)Stat_Off=Read_Sec_Off();
         }while(Time<(Temp_Time+50));                           
      }//конец тревоги
   }
   else                                 //при попытке установки на охрану
                                       //оказались разомкнуты датчики
                                       //или нажата кнопка "снять с охраны"
      while(!Stat_Off){   if (!Stat_Off) Stat_Off=Read_Sec_Off();
         output_high(Out_Lamp);
         output_high(Out_Siren);               //сигналим о неудавшейся постановке
         delay_ms(100);
         output_low(Out_Lamp);
         output_low(Out_Siren);
         delay_ms(400);                        
         }   
   // ожидание постановки на охрану
      output_high(Out_Led);                  //зажигаем светодиод         
      do{   if(!Stat_On) Stat_On=Read_Sec_On();      //и ждем команду постановки на охрану
      }while(!Stat_On);
      output_low(Out_Led);
}while(1); //главный цикл
}         //main
 

  #7  
Старый 02.03.2008, 19:11
Animal
Moderator - Level 7
Регистрация: 19.10.2007
Сообщений: 225
С нами: 9769145

Репутация: 298
По умолчанию

Вот такой вот получился девайс. Собрал на монтажке за час.

и сама платка




Братан тестировал - сказал, что все работает отлично. Только возможно паузу перед постановкой на охрану придется увеличить до 15 сек - датчик "объема" долго в штатный режим переходит. Вот.
 

  #8  
Старый 02.03.2008, 20:49
presidentua
Постоянный
Регистрация: 04.11.2007
Сообщений: 331
С нами: 9746246

Репутация: 806
По умолчанию

На монтажке за час!!!

Вот это скорость сборки. Поделись секретом!

А по сути. То сейчас розбираюсь со схемой и с немного с прогой . Спасибо
 

  #9  
Старый 02.03.2008, 21:27
Animal
Moderator - Level 7
Регистрация: 19.10.2007
Сообщений: 225
С нами: 9769145

Репутация: 298
По умолчанию

Просто рука набита. А секрет,наверное, в оптимальном и продуманном расположении элементов.
 

  #10  
Старый 02.03.2008, 23:20
presidentua
Постоянный
Регистрация: 04.11.2007
Сообщений: 331
С нами: 9746246

Репутация: 806
По умолчанию

Везет тебе! вот я всегда сделаю и схему и програму и в протеусе отлично работает, а как доходит до паяния так все лень. Хоть и работы на пару часов, но пока заставлю себя Может когда то поменяется характер )))))))
 
 



Предыдущая тема Следующая тема
Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Три теоремы об угоне автомобиля «Ана®xист» Электроника и Фрикинг 5 26.05.2009 23:05



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.