программируемый таймер

Обсуждаем цифровые устройства...
Ответить
бараныч
Родился
Сообщения: 12
Зарегистрирован: Сб июл 23, 2011 03:51:36

программируемый таймер

Сообщение бараныч »

Здраствуйте уважаймые форумчане! Суть моей проблемы такова((( Облазил весь инет в поиске схемы такого устройства которое могло бы замыкать контакт (не силовой) раз в час , затем ещё раз но уже с интервалом 5 сек, и цикл снова повторяется час, затем 5 сек и так до бесконечности..... Я не силён к сожалению в радиоэлектронике но опыт прошивки мк ест но вот программу написать сам не могу(( ах да хотелось бы что нибуть на тиньках 13 или 2313 так как они у меня есть...
Реклама
Аватара пользователя
coredumped
Опытный кот
Сообщения: 838
Зарегистрирован: Вт апр 12, 2011 18:38:19
Откуда: с Земли

Re: программируемый таймер

Сообщение coredumped »

Вот, лови. tiny13 с "часовым" кварцем (32768Гц).
Таймер генерит прерывание каждую секунду, все манипуляции происходят в обработчике. Сигнал выдается на 1 секунду.
Если чего непонятно, пишите.

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

#include <ctype.h>
#include <stdint.h>
#include <stdio.h>

#include <avr/io.h>
#include <avr/interrupt.h>


#ifndef F_CPU
#define F_CPU 32768UL  //cpu freqency
#endif


volatile uint16_t time;
volatile uint8_t phase;

ISR(TIM0_COMPA_vect)
{
   time++;   
   switch(phase)
   {
      case 0: if(time == 3600)
            {
               PORTB = 0x07; //set PB0..PB2 = 1   
               phase = 1;
               time = 0;
            }
            break;
                  
      case 1: PORTB = 0; // clear PB lines
            phase = 2;
            break;
      case 2: if(time == 5)
            {
               PORTB = 0x07; //set PB0..PB2 = 1   
               phase = 3;
               time = 0;
            }
            break;

      case 3: PORTB = 0; // clear PB lines
            phase = 0;
            break;
   }

}

int main(void)
{
   time = 0;
   phase = 0;
   DDRB = 0x07; //set PB0..PB2 as output   
   PORTB = 0;
   
   TCNT0 = 0;
   OCR0A = 0x7F;      //Set T0 to generate 1s period (F_CPU = 32768Hz)    
   TIMSK0 = 1<<OCIE0A; //Enable interrupt
   TCCR0A = 1<<WGM01;    //CTC Mode
   TCCR0B = 0x4;       // ptrscaler = 256
   sei();   

   for(;;);   
   return 0;
}
Все будет только лучше, в крайнем случае - хуже.
Реклама
бараныч
Родился
Сообщения: 12
Зарегистрирован: Сб июл 23, 2011 03:51:36

Re: программируемый таймер

Сообщение бараныч »

возможно ли реализовать без использования кварца? дело в отсутствие запчастей и моей удалённости от цивилизации(( в моём родном маленьком городе ниодного магазина радиодеталей нет а заказывать по интернету очень долго((( для меня важной роли не играет точнось, если даже время будет за час опаздывать или спешить на 10мин это не критично...
Ответить

Вернуться в «Цифровая техника»