Акустический выключатель с использованием микроконтроллера

Что бы еще такого сделать?... Предлагайте! Обсудим все!!!
Аватара пользователя
kotyk7
Вымогатель припоя
Сообщения: 546
Зарегистрирован: Пт ноя 06, 2009 00:19:36
Откуда: Львов

Re: Акустический выключатель с использованием микроконтролле

Сообщение kotyk7 »

Выкладываю, что наваял на сей день :

Код: Выделить всё

/*
* Project name:
     акустичний вимикач
 * Copyright:
     (c) Mikroelektronika, 2011. Котик В. Львів
 * Revision History:
     20111014:
       - initial release;

 * Description:
     //Порт А вхід порт С вихід
 * Test configuration:
     MCU:             PIC16F676
                      http://ww1.microchip.com/downloads/en/DeviceDoc/41291F.pdf
     dev.board:       easypic6eds
                      http://www.mikroe.com/eng/products/view/297/easypic6-development-system/
     Oscillator:      RS, 4.0000 MHz
     Ext. Modules:    -
     SW:              mikroC PRO for PIC
                      http://www.mikroe.com/eng/products/view/7/mikroc-pro-for-pic/
 * NOTES:
*/


  //обьявляєм функции
   void interrupt();
   void port_OUT();

unsigned int temp_res0;             // дані АЦП0 (фотодатчик)
unsigned int temp_res1;             // дані АЦП1 (підпорка)
unsigned char Status_Foto;          // прапорець фотодатчика
unsigned char Status_INT;           // прапорець зовнішнього сигналу
unsigned char counter;              //переменная таймера 0
unsigned char tmp_0;                //переменная времени работы таймера 0
unsigned char Flag;                 // тоже нужен


void port_OUT() //выход
{
   if (temp_res0 <= temp_res1)               // проверка срабатывания компаратора
        {PORTC |= (1<<4); // 1 ->  C4
        Status_Foto = 1;}
      else {PORTC &= (~(1<<4));}  //0 ->  C4

   if (Status_INT == 1)       // проверка прерыв. по звуку и запуска таймера
     {Flag =1;
     PORTC |= (1<<3); // 1 ->  C3
     Status_INT =0;}
else  {PORTC &= (~(1<<3));} //0 ->  C3
        if ((Status_INT == 0) && (tmp_0 != 0))
        {Flag =0;  }
          if ((Flag == 1) && (Status_Foto != 1))//не сработал ли фотодатчик?
          {
          PORTC |= (1<<5); // 1 ->  C5
          }
          else {PORTC &= (~(1<<5)); //0 ->  C5
          Status_Foto = 0;
          }

   if (tmp_0 == 2) // время срабатывания 30сек. (кратность 15 сек.)
    { PORTC |= (1<<1); // 1 ->  C1
    delay_ms(100);
    tmp_0 = 0; }
     else {PORTC &= (~(1<<1));}  //0 ->  C1
}


void interrupt()  // прерывание по INT/RA2
{  delay_ms(20);
   if ((INTCON.INTF) && (INTCON.RAIF))
   {Status_INT = 1;
   counter = 0;}
   PORTA = PORTA.F2 |0;
  INTCON.INTF = 0; //Сбошен флаг прерывания
  INTCON.RAIF = 0;

  if ((INTCON.T0IF) && (INTCON.T0IE))
  { counter++;            // прибавление до 100 (в сумме 1 сек)
   T0IF_bit = 0;         // сброс флага прерывания по переполнению TMR0
      if (counter == 250)
     {  TMR0 = TMR0 + 250;   // предзагрузка TMR0
        counter = 0;
        tmp_0 = tmp_0 + 1;   // счетчик времени
     }
  }
}


void main() {
//==================
// Процедура настроки используемых ресурсов PIC16F676
//==================
TRISA = 0b111111;              // PORTA is input
PORTA = 0b111111;
TRISC = 0b000000;             // PORTС is output
PORTC = 0b000000;
CMCON = 0x07;  //настройка внутреннего компаратора
ANSEL = 0b000000011;  //настройка порта А как анналоговый вход
     // Enable external interrupt
    INTCON.GIE = 1;    // разрешить все прерывания
    INTCON.INTE = 1;   // разрешить прерывание INT
    INTCON.RAIE = 1;   //Разрешение прерывания по изменению сигнала на входах PORTA
    IOCA.IOCA2 = 1;  //Разрешение прерывания на входе RA2: 1=разрешено
// Timer0 Registers:
// Prescaler=1:64; TMR0 Preset=6; Freq=250,00Hz; Period=4 000 000 ns
   option_reg = 0b11010111; //коэфициента деления предделителя 1:256
//OPTION_REG.RAPU =1;
//OPTION_REG.INTEDG =1;
//OPTION_REG.T0CS = 0;// bit 5 TMR0 Clock Source Select bit:0=Internal Clock (CLKO) / 1=Transition on T0CKI pin
//OPTION_REG.T0SE = 1// bit 4 TMR0 Source Edge Select bit: 1=high/0=low
//OPTION_REG.PSA  = 0;// bit 3 Prescaler Assignment bit: 0=Prescaler is assigned to the Timer0
//OPTION_REG.PS2  = 1;// bits 2-0  PS2:PS0: Prescaler Rate Select bits
//OPTION_REG.PS1  = 0;
//OPTION_REG.PS0  = 1;
   TMR0  = 6;              // Timer0 initial value
   T0IE_bit = 1;            //Разрешение прерывания по переполнению TMR0
   T0IF_bit = 0;         // сброс флага прерывания по переполнению TMR0

  while (1) {
            temp_res0 = ADC_Read(0);    // get ADC value from 4nd channel
            temp_res1 = ADC_Read(1);    // get ADC value from 1nd channel
   
   Delay_ms(20);
   port_OUT();

  }
  }
и файл протеуса в архиве
Вложения
Програ.rar
(28.13 КБ) 228 скачиваний
Почему-то всегда приходится программировать то, что невозможно запаять...
Реклама
Аватара пользователя
Flasher
Мудрый кот
Сообщения: 1802
Зарегистрирован: Ср сен 07, 2011 21:40:30

Re: Акустический выключатель с использованием микроконтролле

Сообщение Flasher »

а кто сказал что они понимают только реле? Они управляются всем.
Реклама
Аватара пользователя
kotyk7
Вымогатель припоя
Сообщения: 546
Зарегистрирован: Пт ноя 06, 2009 00:19:36
Откуда: Львов

Re: Акустический выключатель с использованием микроконтролле

Сообщение kotyk7 »

Если чесно, то управлять симисторами "сберегайку" не пробовал, да и на пачке написано, что не зя....я!!! А в остальном интересно услышать мысли и предложения и, особо, практический опыт.
Почему-то всегда приходится программировать то, что невозможно запаять...
Аватара пользователя
Flasher
Мудрый кот
Сообщения: 1802
Зарегистрирован: Ср сен 07, 2011 21:40:30

Re: Акустический выключатель с использованием микроконтролле

Сообщение Flasher »

Написано только что нельзя подключать диммеры(есть специальные лампы, которые расчитаны на это)- иначе лампа выйдет из строя из-за теплового пробоя транзисторов вследствии возросших токов и смещения резонансных частот от пониженного напряжения питания. Включать- отключать можно абсолютно всем. Включать, желательно, в начале полупериода, чтобы минимизировать зарядные токи фильтрирующего конденсатора электронной схемы. Для этого и нужна привязка к сети(ну или можно поставить оптосимистор со схемой включения в "0"- мос3083). Если использовать лампу накаливания- то тут одназначно нужно делать плавное включение для продления ее ресурса. Мое мнение- использовать энергосберегающие лампочки в устройстве, которое не долго находится во включенном состоянии- бред. Потому что: а) экономия не очевидна; б) полная яркость у энергосберегающих ламп будет только после нескольких минут разогрева; в) во всех дешевых энергосберегайках при зажигании используется ударный нагрев нитей накала- они долго не выживут при частом включении.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
kotyk7
Вымогатель припоя
Сообщения: 546
Зарегистрирован: Пт ноя 06, 2009 00:19:36
Откуда: Львов

Re: Акустический выключатель с использованием микроконтролле

Сообщение kotyk7 »

Очень буду рад наброскам практической реализаци применительно к даному случаю.
Почему-то всегда приходится программировать то, что невозможно запаять...
Реклама
Аватара пользователя
Flasher
Мудрый кот
Сообщения: 1802
Зарегистрирован: Ср сен 07, 2011 21:40:30

Re: Акустический выключатель с использованием микроконтролле

Сообщение Flasher »

А что тут набрасывать- за основу берете мою схемотехнику и вперед, напильником... Как я понимаю, достаточно добавить фоторезистор и еще один подстроечный резистор- вот и ваша мечта сбудется. Правда, у вас другой микроконтроллер.
Реклама
Аватара пользователя
kotyk7
Вымогатель припоя
Сообщения: 546
Зарегистрирован: Пт ноя 06, 2009 00:19:36
Откуда: Львов

Re: Акустический выключатель с использованием микроконтролле

Сообщение kotyk7 »

Со схемами проблем нет, а вот как писать программу я пока не понял.
Пока, я так понимаю, надо подключить еще один таймер и организовать периодическое измерение напряжения на входном порте от нуля до 5 вольт. Типа синусоиды. А какой период измерения нужен?
Да, еще... для измерения синусоиды ведь нужно прерывание по внешнему сигналу и таймер скажем ТМRО, а оные уже используються...
Почему-то всегда приходится программировать то, что невозможно запаять...
Аватара пользователя
kotyk7
Вымогатель припоя
Сообщения: 546
Зарегистрирован: Пт ноя 06, 2009 00:19:36
Откуда: Львов

Re: Акустический выключатель с использованием микроконтролле

Сообщение kotyk7 »

Немного погуглил
Решил пойти немного по другому пути. Вот схема:
Вложения
V2_4-AK7-4.PDF
(61.74 КБ) 289 скачиваний
Почему-то всегда приходится программировать то, что невозможно запаять...
vin_07
Нашел транзистор. Понюхал.
Сообщения: 157
Зарегистрирован: Чт авг 27, 2009 16:19:45

Re: Акустический выключатель с использованием микроконтролле

Сообщение vin_07 »

Flasher писал(а):http://radiokot.ru/konkurs/35/
Вот Вам в лапы мой проект для изучения.
Добавить бы в Вашу схему фотодатчик и возможность редактирования прямо в хексе времени включенного состояния. По первому пункту пока не придумал ничего, кроме как допаять оу компаратором, с которого будет поступать питание на микрофон, когда темно. если оу сдвоеный, то вторую часть можно под унч применить. Кстати, поподробнее, как чуствительность Вашего девайса?
Аватара пользователя
Flasher
Мудрый кот
Сообщения: 1802
Зарегистрирован: Ср сен 07, 2011 21:40:30

Re: Акустический выключатель с использованием микроконтролле

Сообщение Flasher »

Докладываю: чувствительность отменная. Регулируется от тихого шороха до громкого хлопка. Компаратор не нужен: ноги МК -это триггер Шмитта. Редактировать в хексе- дурной тон. Если надо- могу исходник выслать. А там хоть заредактируйтесь :) Фотодатчик по просьбам трудящихся приделаю и выкладу.
Аватара пользователя
kotyk7
Вымогатель припоя
Сообщения: 546
Зарегистрирован: Пт ноя 06, 2009 00:19:36
Откуда: Львов

Re: Акустический выключатель с использованием микроконтролле

Сообщение kotyk7 »

Mr. Flasher, не нервничайте. Гланое есть у людей желание что-то да створить, даже если за чей-то счет, но это уже другая история.

Mr. vin_07, Вам прям счастливый билет выпал.
Главное немного подождать. Или будет модернизирован прекрасный вариант от Flasherа или я понемногу свое творение доделаю, а он по все видимости будет с откритым кодом, тоесть исходником.
Почему-то всегда приходится программировать то, что невозможно запаять...
Аватара пользователя
Flasher
Мудрый кот
Сообщения: 1802
Зарегистрирован: Ср сен 07, 2011 21:40:30

Re: Акустический выключатель с использованием микроконтролле

Сообщение Flasher »

kotyk7, даже и не думал нервничать :) Делайте свой вариант, я же не против, помогаю чем могу. Свое устройство я уже себе поставил в коридоре и забыл про проблему с освещением, как и про само устройство. Доделывать планирую через пару неделек, так что времени-навалом.
А вот свой исходник я не выкладываю в общий доступ- но высылаю по первому же запросу.
Аватара пользователя
kotyk7
Вымогатель припоя
Сообщения: 546
Зарегистрирован: Пт ноя 06, 2009 00:19:36
Откуда: Львов

Re: Акустический выключатель с использованием микроконтролле

Сообщение kotyk7 »

Mr. Flasher, я к сожадению не могу похвастаться временем, но я стараюсь.
Я смотрел Ваш исходник, спасибо, но решил, как часто это бывает, пойти по своему пути. Потому, что я впервые столкнулся с необходимостью управления симистором через ноль сети с помощю МК. (В этом деле я "... еще не волшебник, а только учусь..."). Чтобы все хорошо понять попробую все "грабли" на ощупь... Это лирика, а на практике, что уже сделал:
- Начал проект программы так сказать с нуля и с другого конца. А именно с постоения ШИМ синхронизированого с сетью. Короче, апаратного блока ШИМ на бору МК нет. Пришлось все ручками... Активировал имеющийся в единственном числе компаратор на вход сигнала от сети (100Гц). Пришлось АЦП перенести на другие входы. Подключил прерывание ТМR0 (на 10мкс) и позвязал его работу к прерыванию компаратора. Короче "на выходе получил "импульсный шум" с нужной периодичностью.
- Теперь займусь скважностью импульса в ШИМе, а там думаю учтем и регулировку можности.
Все труды в ахиве.
Вложения
програма3.rar
(29.47 КБ) 216 скачиваний
Почему-то всегда приходится программировать то, что невозможно запаять...
vin_07
Нашел транзистор. Понюхал.
Сообщения: 157
Зарегистрирован: Чт авг 27, 2009 16:19:45

Re: Акустический выключатель с использованием микроконтролле

Сообщение vin_07 »

Flasher писал(а):Докладываю: чувствительность отменная. Регулируется от тихого шороха до громкого хлопка.
Отличное известие! :)
Flasher писал(а): Компаратор не нужен: ноги МК -это триггер Шмитта. Редактировать в хексе- дурной тон.
Ну, это для тех случаев, когда или исходник засекречен или нет возможности перекомпилироватьт и т.п.
Flasher писал(а):Фотодатчик по просьбам трудящихся приделаю и выкладу.
Заранее спасибо!
kotyk7 писал(а):Mr. vin_07, Вам прям счастливый билет выпал.
Главное немного подождать. Или будет модернизирован прекрасный вариант от Flasherа или я понемногу свое творение доделаю, а он по все видимости будет с откритым кодом, тоесть исходником.
счастливый билет эт хорошо :)) ранее подобное делал на основе 145АП2, получалось громоздко, с мк существенно приятнее. Исходя из наличия деталей и того, что проект уже опробован в железе, остановлюсь, видимо, на схеме Flasher. Уж извините.
Аватара пользователя
Flasher
Мудрый кот
Сообщения: 1802
Зарегистрирован: Ср сен 07, 2011 21:40:30

Re: Акустический выключатель с использованием микроконтролле

Сообщение Flasher »

Да, кстати, обсуждение еще ведем там:
http://radio-hobby.org/modules/news/art ... oryid=1093
Аватара пользователя
kotyk7
Вымогатель припоя
Сообщения: 546
Зарегистрирован: Пт ноя 06, 2009 00:19:36
Откуда: Львов

Re: Акустический выключатель с использованием микроконтролле

Сообщение kotyk7 »

Mr. vin_07, нет проблем, я энто все делаю для себя и под себя (хотя соглпсен учеть и пожелания или нужды других), а Ваше дело либо согласиться либо отказаться.
А если кому понравится и решит повторить, ну что ж, тоже хорошо.
Почему-то всегда приходится программировать то, что невозможно запаять...
Аватара пользователя
kotyk7
Вымогатель припоя
Сообщения: 546
Зарегистрирован: Пт ноя 06, 2009 00:19:36
Откуда: Львов

Re: Акустический выключатель с использованием микроконтролле

Сообщение kotyk7 »

Итак, маленький отчет:
Программа управления МК с учетом управления с помощь симистора написана.
Да, реле тоже осталось. Так, что получилось универсальное дитя. Хочешь симистор, - прошу, а надо реле - тоже ни в чем себе не отказывай. Симистор с управлением через ноль с возрастанием мощности, а реле - как реле клац и все...
Програма писалась в MikroC, не хотелось на "разборки" с регистрами АЦП время тратить. Да, текст программы не самый оптимальный, но зато заточен на облегченное понимание сути происходящих процесов и облегченное понимание способов начальной настройки и работы с встроенымы узлами МК. Использовал все имеющуюся мощность PIC16F676 так сказать по максимуму. Не задействовано только компаратор. Думал и о нем даже испытал программу с ним, но потом подумал, что "что за много, то не здраво". Надо же что то оставить для возможной последующей модернизации.
Если кто подумал: "О ужас - это программа монстр!". Не - а... Всего

Used RAM (bytes): 23 (48%) Free RAM (bytes): 25 (52%)
Used ROM (program words): 448 (44%) Free ROM (program words): 576 (56%)

Тоесть меньше половины 1 кБт имеющейся флешпамяти проца.
Правда конечно можно было бы еще немного ее "почистить", но желания пока нет. Перехожу к следующему этапу, - схему в целом рисовать.
Короче, кому чего не нравиться меня не пинать. Предлагать только готовые решения или толковые замечания.
Внизу, все как обещал, в открытом виде.
Почему-то всегда приходится программировать то, что невозможно запаять...
Аватара пользователя
kotyk7
Вымогатель припоя
Сообщения: 546
Зарегистрирован: Пт ноя 06, 2009 00:19:36
Откуда: Львов

Re: Акустический выключатель с использованием микроконтролле

Сообщение kotyk7 »

Код: Выделить всё

/*
* Project name:
     акустичний вимикач
 * Copyright:
     (c) Mikroelektronika, 2011. Котик В. Львів
 * Revision History:
     20111014:
       - initial release;
     * Description:
     //Порт А вхід порт С вихід
 * Test configuration:
     MCU:             PIC16F676
                      http://ww1.microchip.com/downloads/en/DeviceDoc/41291F.pdf
     dev.board:       easypic6eds
                      http://www.mikroe.com/eng/products/view/297/easypic6-development-system/
     Oscillator:      RS, 4.0000 MHz
     Ext. Modules:    -
     SW:              mikroC PRO for PIC
                      http://www.mikroe.com/eng/products/view/7/mikroc-pro-for-pic/
 * NOTES:
*/
  //обьявляєм функции
   void init();
   void interrupt();
   void port_OUT();

unsigned int temp_res0;             // дані АЦП0 (фотодатчик)
unsigned int temp_res1;             // дані АЦП1 (підпорка)
unsigned int TMR_INT;               //счетчик времени INT
unsigned char Status_Foto;          // прапор фотодатчика
unsigned char Status_INT;           // прапор нуля в мережі
unsigned char Status_Sound;         // прапор зовнішнього сигналу
unsigned char Sound;                // прапор зовнішнього сигналу
unsigned char Status_Timer;         // прапор 30 сек. таймера
unsigned char Timer;                // прапор фіксатор таймера
unsigned char Timer_Sym_F;          // прапор для симістора -  включаем
unsigned char TMRR_1;               // счетчик TMR1
unsigned char Status_Work;          // прапор дозволу роботи ламп
unsigned char PA2;                  //  перемінна від мережі 220
unsigned char PA4;                  //  перемінна від мікрофону
unsigned char TMR0_1;               // крок ітерацій управління сімістором
unsigned char QW;                   // выборка мощности

 void port_OUT() //выход и анализ флагов субмодулей
{
   if (temp_res0 <= temp_res1)            // проверка срабатывания компаратора
        {PORTC |= (1<<3); // 1 ->  C3     // на двух АЦП
         Status_Foto=1;
        }
      else {PORTC &= (~(1<<3)); //0 ->  C3
            Status_Foto=0;
           }
   if (Sound) {                  // флаг прихода звука
                   PORTC |= (1<<2); // 1 ->  C2
                    Sound =0;
                    Status_Sound =1;  // прапорець зовнішнього сигналу
                    Delay_ms(8);
                   PORTC &= (~(1<<2)); //0 ->  C2
                   }
       if (Timer==0) {  // защелка таймера
                     PORTC |= (1<<0); // 1 ->  C0
                     Status_Timer =1;
                      }
       if (Timer==1) {PORTC &= (~(1<<0)); //0 ->  C0
                       Status_Timer =0;
                       Timer_Sym_F = 0;  //обнуляем счетчик роста мощности симистора
                       }
                   // логика сравнений состояния  всех узлов
      if ((Status_Sound) && (Status_Foto ==0) && (Status_Timer))
                          {Status_Work =1; // флаг все разрешено
                          PORTC |= (1<<5); // 1 ->  C5 //управление реле
                          }
              else { Status_Work =0; 
                     Status_Sound = 0;
                     PORTC &= (~(1<<4)); //0 ->  C4
                     PORTC &= (~(1<<5)); //0 ->  C5
                   }
}

void interrupt()  // прерывание по INT/RA2
{ 
if (INTCON.INTF)
   {
    INTCON.INTE = 0;         // запретить прерывание INT
    T0IE_bit = 1;            //Разрешение прерывания по переполнению TMR0
    T0IF_bit = 1;            //синхрошизируем с TMR0
    PA2 = PORTA.F2;          //читаем состояние порта А
    Status_INT = 1;          // флаг INT  поднят
    INTCON.INTF = 0;         //Сбошен флаг прерывания
    INTCON.INTE = 1;         // разрешить прерывание INT
    TMR0_1 = 0;              // синхронизация с шагом TMR0
    }

   if (INTCON.RAIF)       // прерывание по RA4
     { PA4 = PORTA.F4;    //читаем состояние порта А
        IOCA.IOCA4 = 0;   // запрет прерывания по RA4
        if (PA4 ==1) {    // подымаем флаг
        Delay_us(5);
        Sound =1; }
       INTCON.RAIF = 0;   //Сбошен флаг прерывания
       IOCA.IOCA4 = 1;    // разрешаем прерывания по RA4
       TMRR_1 =0;         //обнуляем таймер секунд
       Timer =0;
       TMR1IF_bit = 1;   // clear TMR0IF
       Timer_Sym_F = 0;
     }

  if ((INTCON.T0IF))      //таймер 1кГц
  { T0IF_bit = 0;         // сброс флага прерывания по переполнению TMR0
     if (Status_INT = 1){
       TMR0 = 131;       // предзагрузка TMR0
       TMR0_1 = TMR0_1 + 1;
     if ((Status_Foto==0) && (Status_INT = 1)&& (Status_Work))
     {  Delay_us(50);     // формируем выходной сигнал симистора
        if (QW == 10)     //мощность 100%
        {
         if (TMR0_1 !=5){
         if (TMR0_1==1){
        PORTC |= (1<<4); // 1 ->  C4
                       }
      if (TMR0_1==4)
         {
         PORTC &= (~(1<<4));  //0 ->  C4
         }
                        }
        }
       if (QW == 8)    //мощность 80%
        {
         if (TMR0_1 !=5){
         if (TMR0_1==1){
         PORTC &= (~(1<<4));  //0 ->  C4
                       }
         if (TMR0_1==2){
        PORTC |= (1<<4); // 1 ->  C4
                       }
        if (TMR0_1==5){
        PORTC &= (~(1<<4));  //0 ->  C4
                     }
                        }
        }
      if (QW == 6)     //мощность 60%
        {
         if (TMR0_1 !=5){
         if (TMR0_1==1){
         PORTC &= (~(1<<4));  //0 ->  C4
                       }
         if (TMR0_1==3){
        PORTC |= (1<<4); // 1 ->  C4
                       }
        if (TMR0_1==5){
        PORTC &= (~(1<<4));  //0 ->  C4
                      }
                        }
        }
      if (QW == 4)      //мощность 40%
        {
         if (TMR0_1 !=5){
         if (TMR0_1==1){
         PORTC &= (~(1<<4));  //0 ->  C4
                       }
        if (TMR0_1==4)
         {
        PORTC |= (1<<4); // 1 ->  C4
         }
        if (TMR0_1==5){
        PORTC &= (~(1<<4));  //0 ->  C4
                     }
                        }
        }
      if (QW == 0)      //мощность 0%
        {
         if (TMR0_1==1){
         PORTC &= (~(1<<4));  //0 ->  C4
                       }
        }
    }
     Status_INT = 0;      // все обнуляем
    if (TMR0_1 ==5) {TMR0_1 = 0; }
    if (TMR0_1 ==5) {T0IE_bit = 0;}
  }
 }
 if ((TMR1IF_bit))     // прерывание счетчика в 0,5 секунд
  {
    TMR1IF_bit = 0;           // clear TMR0IF
    TMR1H = 0xB;     // preset for timer1 MSB register
    TMR1L = 0xDC;     // preset for timer1 LSB register
    TMRR_1++;          // периоды формирования сигнала  управл. симистора
    Timer_Sym_F++;      //счетчик периодов мощности на вкл.
    if (Timer_Sym_F >=5) { Timer_Sym_F = 4; } // ограничитель периодов
  }
            // здесь задаем период свечения ламп
 if (TMRR_1 == 60){Timer =1;}  // период счета 05 сек.
 if (TMRR_1 > 60){Timer =0;
                 TMRR_1 =0;}  //считаем  до 30 сек.
}


void main() {
//==================
// Процедура настроки используемых ресурсов PIC16F676
//==================
  TRISA = 0b111111;              // PORTA is input
  PORTA = 0b111111;
  TRISC = 0b000000;             // PORTС is output
  PORTC = 0b000000;
       ANSEL = 0b001100011;  //настройка порта А как анналоговый вход
    INTCON.GIE = 0;    // запретить все прерывания
    INTCON.PEIE = 1;    // разрешить прерываний от периферийных модулей
    INTCON.INTE = 1;   // разрешить прерывание INT
    INTCON.RAIE = 1;   //Разрешение прерывания по изменению сигнала на входах PORTA
    IOCA.IOCA4 = 1;  //Разрешение прерывания на входе RA4: 1=разрешено
    OPTION_REG = 0b11010011;
    // Timer0 Registers:
// Prescaler=1:16; TMR0 Preset=131; Freq=2 000,00Hz; Period=0,50 ms
//OPTION_REG.T0CS = 0;// bit 5 TMR0 Clock Source Select bit:0=Internal Clock (CLKO) / 1=Transition on T0CKI pin
//OPTION_REG.T0SE = 1;// bit 4 TMR0 Source Edge Select bit: 0=low/high / 1=high/low
//OPTION_REG.PSA  = 0;// bit 3 Prescaler Assignment bit: 0=Prescaler is assigned to the Timer0
//OPTION_REG.PS2  = 0;// bits 2-0  PS2:PS0: Prescaler Rate Select bits
//OPTION_REG.PS1  = 1;
//OPTION_REG.PS0  = 1;
   TMR0 = 131;           // preset for timer register
   T0IF_bit = 0;         // сброс флага прерывания по переполнению TMR0
   T0IE_bit = 0;            //Разрешение прерывания по переполнению TMR0
   
   // Timer1 Registers:
// Prescaler=1:8; TMR1 Preset=3036; Freq=2,00Hz; Period=0,50 s
INTCON.TMR1ON =0;
TMR1IF_bit = 0;             // clear TMR1IF
T1CON.T1CKPS1 = 1;// bits 5-4  Prescaler Rate Select bits
T1CON.T1CKPS0 = 1;
T1CON.T1OSCEN = 1;// bit 3 Timer1 Oscillator Enable Control: bit 1=on
T1CON.TMR1CS  = 0;// bit 1 Timer1 Clock Source Select bit: 0=Internal clock (FOSC/4) / 1 = External clock from pin T1CKI (on the rising edge)
T1CON.TMR1ON  = 1;// bit 0 enables timer
TMR1H = 0xB;     // preset for timer1 MSB register
TMR1L = 0xDC;     // preset for timer1 LSB register
INTCON.TMR1ON =1;
   INTCON.GIE = 1;    // разрешить все прерывания
  
   while (1) {
               // меряем напряжение от подпорки и фотодатчика
         temp_res0 = ADC_Read(0);    // get ADC value from 4nd channel
         temp_res1 = ADC_Read(1);    // get ADC value from 1nd channel
              // все соотносим и решаем
         port_OUT();
   
   // формируем последовательность для симистора
       if  (Status_Work)       {
            switch (Timer_Sym_F) {
            case 0: QW = 0;  break; // 0%
            case 1: QW = 4;  break; // 40%
            case 2: QW = 6;  break; // 60%
            case 3: QW = 8;  break; // 80%
            case 4: QW = 10; break; // 100%
                               }
                                            }
            }
}
Почему-то всегда приходится программировать то, что невозможно запаять...
Аватара пользователя
kotyk7
Вымогатель припоя
Сообщения: 546
Зарегистрирован: Пт ноя 06, 2009 00:19:36
Откуда: Львов

Re: Акустический выключатель с использованием микроконтролле

Сообщение kotyk7 »

Схема цифровой части. Светодиоды мне лично нравяться, может внатуре оставлю.
Вложения
конфігурація-1.jpg
(61.78 КБ) 382 скачивания
ак7-77_hex.rar
(1022 байт) 229 скачиваний
pic16F676-7.rar
(25.36 КБ) 231 скачивание
pic16F676_7seg_V2_4-AK7-7.PDF
(48.52 КБ) 224 скачивания
Почему-то всегда приходится программировать то, что невозможно запаять...
Аватара пользователя
kotyk7
Вымогатель припоя
Сообщения: 546
Зарегистрирован: Пт ноя 06, 2009 00:19:36
Откуда: Львов

Re: Акустический выключатель с использованием микроконтролле

Сообщение kotyk7 »

Тут у меня вопрос созрел, а безтрансформаторное питание реле потянет?
Почему-то всегда приходится программировать то, что невозможно запаять...
Ответить

Вернуться в «Умные мысли»