Page 1 of 1

Таймер

Posted: 28 Jan 2009 03:28
by Zed
Есть предложение дополнить проекты еще одним на базе той же схемы :oops: :-)
У фирмы Овен есть реле времени двухканальное, функций дофига, но штука в быту нужная.
Например, уезжаю я из дому, а обогреватель шурует целый день, а с этакой штукой выставил циклический таймер ему на сутки (типа час работает, два стоит) и ок.
Наворотов конечно у овна полно, а вот если упростить, то как дополнение к остальным устройствам суппер будет.
http://kipshop.ru/Documentation/passport/ut24_353.pdf

Re: Таймер

Posted: 28 Jan 2009 09:48
by hardlock
Пишите, что хотите от таймера, а я подумаю в этом направлении как будет время.

А для обогревателя как раз и делался термостат, чтобы можно было оставлять хоть на неделю...

Re: Таймер

Posted: 14 Feb 2009 03:12
by Zed
Прибор можно накрапать на базе схемы терморегулятора http://hardlock.org.ua/mc/tiny/termostat_v1/index.html
То есть две кнопки (Pa1,Pa0)
Два выхода (Pd3,Pd2)
Внешний сигнал (Старт,стоп) (Pd6)
Сброс (Reset)

Первое включение:
Видим мигающие 00.00 на Pd3,Pd2 состояние Z
Вход в меню осуществляется удержанием на протяжении 3 сек кнопок + и -
После входа первая цифра (т.е. Pd5) индицирует 1, что означает первый временной интервал.
Максимальное количество интервалов 4.
Перемещение по меню осуществляется кнопками + и -.
Вход и выход в\из подменю - кратковременное нажатие кнопок + и -.
Выход в режим отсчета осуществляется удержанием на протяжении 3 сек кнопок + и -.

Задание интервала 1,2,3,4:
После входа в 1 (+и-) видим 00.00
Первые две цифры - это часы , вторые, секунды.
Установка осуществляется нажатием + или - (Чем дольше держишь кнопку, тем быстрее происходит изменение значения)
Максимальный диапазон 99 часов 99 мин
Минимальный 1 секунда
Для установки минут и секунд необходимо из стартового входа просто листать - (значение будет меняться от 99.99 к 00.01)
Отличительная часть часового и минутного интервалов можно сделать точку (В часовом она будет мигать раз в 1 сек. , а в мин 4 раза в сек)

Каждый из интервалов может устанавливаться индивидуально от запроса хазяина прибора. Запись производится в энергонезависемую память.

Листая меню
5-------Выход канала 1 (1 прямой, 0- инверсный) По умолчанию 0
6-------Выход канала 2 (1 прямой, 0- инверсный) По умолчанию 0
Каналу 1 соответствует 1-й временной интервал, а каналу 2 соответствует 2-й временной интервал.
Интервалы 3 и 4 служат для так называемых пауз.
7-------Активация по внешнему сигналу (1 -активна, 0- не активна) По умолчанию 0 . При замыкании на Gnd начинается отсчет, при повторном нажатии - прекращается.

Работа прибора после установок.
При заданном только интервале 5 часов 00 мин (Канал 1)
И выходе канала - прямой
После подачи питания на прибор видим обратный отсчет времени, мигающий раз в 1 сек разделитель 04.99 и логическую 1 на выходе.
При пропадании питания отсчет опять начинается с ранее установленного интервала. При дохождении времени до 1 часа индикация переходит в 59.59 ,а мерцание разделителя меняется на 4 раза в пол секунды. Достигнув 00.00 на выходе появляется 0, который удерживается до сброса питания.
На сегодня все. Дальнейшие пояснения позже :-)

Re: Таймер

Posted: 16 Feb 2009 09:12
by hardlock
Zed, хорошее описание! Прямо тех задание! Спасибо!
Как только появится время - постараюсь реализовать, а сейчас ввязался в комерческий проект, который не оставляет время, поэтому пока беру на заметку Ваше техзадание!

Re: Таймер

Posted: 16 Feb 2009 23:42
by Zed
Я сам пытаюсь писать, но есть камни, такие как таймеры и вектора прерываний.

Re: Таймер

Posted: 17 Feb 2009 09:13
by hardlock
Zed wrote:но есть камни, такие как таймеры и вектора прерываний
Та мвроде бы ничегосложного, если понять принцип работы.

Re: Таймер

Posted: 30 May 2009 03:10
by Valentin_N
собственно афтору...
огромное спасибо с большим поклоном, за ваше желание поделится своими наработками с такими как я...
с паяльником на ты уже навена лет так 15... а еще и программист,на Delphi напишу чего угодно :)
но с МК к сожелению на ВЫ, думаю что это явление временное, но не сейчас....
для родителей собрал по вашей схеме устройство ТЕРМОСТАТ для инкубатора, заработало с пол пинка ;) очень радует, что родители довольны, т.к. не приходится бегать с градусником...
но вот для себя решил собрать таймер времяни.... касяк получился... в нете ток фельдиперсовые или очень дорогие схемы...
берем схему ТЕРМОСТАТА.... практически готовая, только на вход датчика температуры добавляем кнопку start/stop, и меняем софт (в чем и проблема)....
вот и готов таймер...
мелоч осталось, написать софт :)
т.к. что огромная просьба афтору сайта уделить внимание данной теме :) она очень актуальна...
простой одиночный таймер с зумером (тех реализация зумера мелочи)...
готов к альфа и бета тестированию...

Re: Таймер

Posted: 30 May 2009 10:45
by hardlock
Valentin_N wrote:т.к. что огромная просьба афтору сайта уделить внимание данной теме она очень актуальна...
простой одиночный таймер с зумером (тех реализация зумера мелочи)...
готов к альфа и бета тестированию...
к сожалению сейчас занят сменой машины (свою продаю, новую беру), поэтому времени даже на форум иногда не находится... Напишите подробно, чего хочется от таймера (очень подробно), своего рода техзадание, а я в свою очередь постараюсь выкроить время.

Re: Таймер

Posted: 23 Jan 2010 17:51
by Lektor
Вот переодически захожу на данный форум в надежде улицезреть долгожданный таймер,а его все нет и нет :( Эх

Re: Таймер

Posted: 24 Jan 2010 01:40
by hardlock
Наверное и не будет. Работа не даёт заниматься даже тем, что уже есть, не говоря о чём-то новом.

ЗЫ: Поищите в инете. Думаю найдте подобные проекты.

Re: Таймер

Posted: 28 Jan 2010 20:30
by Lektor
Поищите в инете. Думаю найдте подобные проекты.
Так я ж и ищу ток все безрезультатно. :( Хотелось бы чтото на родной :-) ATtiny2313 или ATmega8.

Re: Таймер

Posted: 10 Mar 2010 20:45
by Coviraylhik
Я тоже интересуюсь таким таймером.Есть такой таймер на ATtiny2313 http://avr.inf.ua/timer_v2.html (на ЛСД , мне больше подошел бы на индикаторах) ,если кто сделает отпишитесь,а то там отзывы не написаны.

Re: Таймер

Posted: 02 May 2010 00:28
by strem
посмотрите на http://arv.radioliga.com/content/view/213/44/ таймер, собранный на микроконтроллере attiny2313.

Таймер предназначен для управления бытовыми нагрузками по одному из 3 алгоритмов:

Цикл: непрерывное включение нагрузки на заданный интервал времени с последующим отключением на другой заданный интервал;
Выдержка и однократное включение – включение нагрузки по истечению заданного интервала времени;
Выдержка и однократное отключение – отключение нагрузки по истечению заданного интервала времени.

Re: Таймер

Posted: 02 May 2010 13:31
by Lektor
strem wrote:
посмотрите на http://arv.radioliga.com/content/view/213/44/ таймер, собранный на микроконтроллере attiny2313.
Там пока прошивка сыроватая с глюками,релиз совсем недавно вышел. :-)

Re: Таймер

Posted: 02 May 2010 18:15
by FDoich
Один хороший человек мне сделал.
http://narod.ru/disk/20329132000/%D0%A2 ... 8.rar.html

Re: Таймер

Posted: 03 May 2010 09:27
by Demckiy
Может кому то пригодится или поможет...

В одной из статей о таймере я рассказал, как с помощью прерывания по переполнению можно отсчитывать временные промежутки. В этой статье я хочу рассказать о еще одном способе отсчета временных интервалов. Основан он на использовании прерывания по совпадению. В составе микроконтроллера Mega8 есть шестнадцатиразрядный таймер-счетчик Timer/Counter1, который может выполнять функцию сравнения с

заранее заданным числом и при совпадении вырабатывать прерывание по сравнению. Этот таймер может работать в нескольких режимах (генерация ШИМ, генерация ШИМ с фазовой коррекцией, сброс счетчика при совпадении и т.д.), которые задаются управляющими регистрами TCCR1A и TCCR1B. Подробнее о них вы сможете прочитать в соответствующей литературе по микроконтроллерам, которую можно скачать на сайте. Мы будем использовать режим сброса счетчика при совпадении. Как он работает? В специальный регистр заносится число, определяющее коэфициент деления счетчика. Таймер считает с нуля, и как только досчитает до числа, которое записано врегистре, сбрасывается в ноль и вырабатывает прерывание по совпадению. Таким образом, можно задавать любой коэфициент деления в пределах от 0 до 65535. Например для кварца 11,0592 МГц, чтобы получит перывание с интервалом в 1с нужно установит коэфициент предделителя равным f/1024, а в регистр сравнения записать число 0x2A2F или 10799 в десятичной системе счисления. Как мы получили это число? Да очень просто, тактовую частоту делим на 1024 (11059200/1024-1=10799). Именно такая частота будет на входе счетчика после предделителя. А тепер, чтобы получит частоту 1 Гц, нам нужно входную частоту поделить на 10799 - именно это число мы и записыванм в регистр сравнения. Когда таймер досчитает до 10799, он выработает прерывание и сбросится в ноль. Таким образом прерывание будет выполнятся 1 раз в секунду. Программа с использованием прерывания по совпадению будет выглядеть так:

Code: Select all

#include "Mega8.h"
#include "m8def.h"
#include "delay.h"
#define LED PORTC.0  // Выход на исполняющий модуль
#define ON 1
#define OFF 0

#define IND_1 PORTC.2      // Аноды семисегментных индикаторов
#define IND_2 PORTC.3      // катоды подключены к порту D
#define IND_3 PORTC.4     
#define IND_4 PORTC.5     

#define BT1 PINB.0      //Сюда подключены кнопки управления
#define BT2 PINB.1     
#define BT3 PINB.2

unsigned char dsp = 1;   
unsigned char Disp1, Disp2, Disp3, Disp4;

unsigned char Dig[13];     

unsigned char buton1, buton2, buton3;  //Переменные для кнопок

unsigned int minute, second;  
unsigned int old_minute, old_second;
bit stoptimer = 1;              // Флаг остановки таймера
//-----------------------------------------------------
// Описание символов
void init_symbol()
{
    Dig[0] = 192;            // "0"
    Dig[1] = 249;            // "1"
    Dig[2] = 164;            // "2"
    Dig[3] = 176;            // "3"
    Dig[4] = 153;            // "4"
    Dig[5] = 146;            // "5"
    Dig[6] = 130;            // "6"
    Dig[7] = 248;            // "7"
    Dig[8] = 128;            // "8"
    Dig[9] = 144;            // "9"
    Dig[10] = 255;            // " "
    Dig[11] = 134;           // "E"
    Dig[12] = 135;           // "t"
}

// ----------------------------------------------------
// Функция вывода на дисплей

void Display (unsigned int Number)
{
    unsigned char Num1, Num2, Num3, Num4;
    unsigned int temp;  // Временная переменная

    Num1 = Num2 = Num3 = Num4 = 0;
    temp = Number;
    //-------------------------------
    while (temp >= 1000)
    {
        temp -= 1000;
        Num1++;
    }

    while (temp >= 100)
    {
        temp -= 100;
        Num2++;
    }

    while (temp >= 10)
    {
        temp -= 10;
        Num3++;
    }

    Num4 = temp;
   
   
   
    Disp1 = Dig[Num1]; 
    Disp2 = Dig[Num2] & 0b01111111; // Включаем десятичную точку
    Disp3 = Dig[Num3]; 
    Disp4 = Dig[Num4];

}



//-------------------------------------------------
// Инициализация портов
void Init_Port(void)
{
  DDRB = 0b11111000;
  PORTB = 0b00000111;
  DDRC = 0b11111111;
  PORTC = 0b00000000;
  DDRD = 0b11111111;
  PORTD = 0b00000000;
}

void Timer0_Init(void)
{
   TCCR0 |= (1 << CS02);
   TIMSK |= (1 << TOIE0);  
}

void Timer1_Init(void)
{
   TCCR1B |= (1 << WGM12)|(1 << CS12)|(1 << CS10);    // Устанавливаем коэфициент предделителя 1/1024 и сброс таймера при совпадении
   OCR1AH = 0x2A;   //Записываем коэфициент деления в регистр сравнения (старший байт)
   OCR1AL = 0x2F;    //Записываем коэфициент деления в регистр сравнения (младший байт)
   TIMSK |= (1 << OCIE1A);            // разрешаем прерывание таймера 1 по совпадению
  
}

//---------------------------------------------
// Функция установки минут
void Set_Minute(void)
{
   minute ++;
   if (minute>59)
   {
      minute = 0;
   }
}
//---------------------------------------------
// Функция установки секунд
void Set_Second(void)
{
   second ++;
   if (second>59)
   {
      second = 0;
   }            
}
//---------------------------------------------------------
// Инициализация сторожевого таймера

void WDOG_Init()
{
    WDTCR = (1 << WDP1);
    #asm("WDR");
    WDTCR |= (1 << WDE);
}

//*********************************************
void main(void)
{
   init_symbol();
   Init_Port();
   Timer0_Init();
   Timer1_Init();
   WDOG_Init();
   #asm ("sei");
  
   while(1)
   {
      if (stoptimer==1)
      {
         LED = OFF;

         if ((buton1>=84)&(buton2==0)&(buton3==0))   //Если нажата кнопка 1
         {                 //устанавливаем значение минут
            buton1 = 0;
            Set_Minute();
         }
         if ((buton2>=84)&(buton1==0)&(buton3==0))   // Если нажата кнопка 2
         {                 // устанавливаем значение секунд
            buton2 = 0;
            Set_Second();
         }
      }

      if ((buton3>=17)&(buton1==0)&(buton2==0))   // Если нажата кнопка 3
      {                 // запускаем или останавливаем таймер
         buton3 = 0;
         if (stoptimer==1)
         {
            if ((minute==0)&(second==0))
            {
               minute = old_minute;
               second = old_second;
            }
            else
            {
               old_minute = minute;
               old_second = second;
               stoptimer = 0;
               LED = ON;
            }
         }
         else           
         {
            stoptimer = 1;
            LED = OFF;
         }
         delay_ms(1000);
      }
      Display(minute*100+second);
   }
}
//**********************************************
//Прерывание по совпадению таймера 1
interrupt [TIM1_COMPA] void Time_s()
{
   if (stoptimer==0)
   {
      second--;        // Уменьшаем на 1 значение second
     
  
      if ((second>59)&(minute !=0))
      {
         second = 59;  // уменьшаем минуты на 1
         minute --;
      }           
      if ((minute==0)&(second==0))
      {
         stoptimer = 1;
      }
   }

//-----------------------------------

}
//Прерывание таймера 0 по переполнению
interrupt [TIM0_OVF] void Refresh_Display()
{
      #asm("WDR");
      if (dsp == 1)
      {
          IND_4 = 1;
          PORTD = Disp1;
          IND_1 = 0;
      }

      if (dsp == 2)
      {
          IND_1 = 1;
          PORTD = Disp2;
          IND_2 = 0;
      }

      if (dsp == 3)
      {
          IND_2 = 1;
          PORTD = Disp3;
          IND_3 = 0;
       }

      if (dsp == 4)
      {
          IND_3 = 1;
          PORTD = Disp4;
           IND_4 = 0;
       }

 
      dsp ++;
      if (dsp == 5)
      {
          dsp = 1;
      }

//---------------------------------
   if (BT1 == 1)    // Проверяем нажатие кнопок
   {
      buton1 = 0;
   }
   else
   {
      buton1 ++;
   }

   if (BT2 == 1)
   {
      buton2 = 0;
   }
   else
   {
      buton2 ++;
   }
   if (BT3 == 1)
   {
      buton3 = 0;
   }
   else
   {
      buton3 ++;
   }

} 
http://samodelkin.kiev.ua/2010-02-07-17 ... -timer-new

Re: Таймер

Posted: 13 May 2010 13:39
by Lektor
FDoich wrote:Один хороший человек мне сделал.
http://narod.ru/disk/20329132000/%D0%A2 ... 8.rar.html
FDoich,а более детальную информацию можешь подкинуть?Очень заинтересовал меня этот проэкт.И еще вопросик,а в какой программе собирать исходник прилагающийся к таймеру???Я пробывал и Код Виджен AVR и WinAVR чет не получается :(

Re: Таймер

Posted: 15 Sep 2010 00:21
by Zver666
Приветствую.
Есть вариант таймера на PIC и ЖК дисплее, управление - 7 или 9 каналов нагрузки
линк: http://aes.at.ua/publ/tajmer_na_sem_vykhodov/12-1-0-245
хочу такой собрать для аквариума, летом пробовал развести под ДИП, получилась не очень :wall:.
Нужно было получить "вытянутую" плату (контроллер, обвязка, прочее) + плата ЖК экрана и кнопки управления на шлейфе (до 1 метра) в отдельном корпусе.
Пожалуйста помогите развести под СМД компоненты :oops: , только не с очень плотным монтажом (боюсь плохо дорожки будут переносится :dontknow: , так хоть подправить маркером смогу).

Re: Таймер

Posted: 23 Sep 2010 08:05
by Cry Baby
.

Re: Таймер

Posted: 29 Oct 2010 23:02
by UT5ULJ
был бы оччень полезный девайс если бы совместить функцию тахометра и счетчика наработки по времени. В подвесных лодочных и стационарных моторах То проходит по наработке моточасов. Вот такой девайсиккоторый бы считал время работы по наличии счетных импульсов от системы зажигания и суммировал их. Кто бы взялся сваять такую прошивку для контролера ?

Re: Таймер

Posted: 19 Jan 2011 13:08
by Nizam
Cry Baby, Можно получить схему, печатку и прошивку на таймер с AT89C2051??

Re: Таймер

Posted: 24 Jan 2011 14:11
by Cry Baby
.

Re: Таймер

Posted: 30 Jan 2011 18:50
by bars59
Вот почитайте http://arv.radioliga.com/content/view/213/44/
Прилагаю архив.