Перейти к содержанию
    

Микроконтроллеры для начинающих

Quote

а в прерываниях от таймера лишь удлиняете его разрядность

Как это понять? Я ещё только пытаюсь понять, как работать с таймером. А если бы ткнули носом в какой то конкретный пример, было бы замечательно.

Спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

20 minutes ago, Maxik777 said:

А как это делается с одним таймером, как написал aaarrr ?

Для начала вам надо выбрать дискрет общего таймера.

Этот дискрет будет определять с каким разрешением вы сможете регулировать период и длительность свечения.

Так же он не должен слишком сильно нагружать основной цикл, т.е. таймер должен переполняться один раз за несколько проходов цикла while(1)  в функции main.

А дальше примерно так. Примитивненько конечно, но для понимания принципа надеюсь сойдет.

Spoiler


unsigned int tick_led_1;
unsigned int tick_led_2;

unsigned char enable_led_2;

#define PULSE_TIME_1 (40UL)
#define PERIOD_TIME_1 (80UL)

#define PULSE_TIME_2 (40UL)
#define PERIOD_TIME_2 (160UL)

void Led ()
{
  if (TIFR0 & (1UL << TOV0))
  {
	TIFR0 = (1UL << TOV0); // clear
	++tick_led_1;
	if(tick_led_1 < PULSE_TIME_1)
	{
	   PORTD |= (1 << 1);
	}else{
	   PORTD &= ~(1 << 1);
	}

	if(tick_led_1 >= PERIOD_TIME_1)
	{
	   tick_led_1 = 0;
	}

	if(enable_led_2)
	{
	   ++tick_led_2;
	   if(tick_led_2 < PULSE_TIME_2)
	   {
	      PORTD |= (1 << 5);
	   }else{
	      PORTD &= ~(1 << 5);
	   }

	   if(tick_led_2 >= PERIOD_TIME_2)
	   {
	      tick_led_2 = 0;
	   }
	}
	
  }
}

void Key ()
{
	if (PINB & (1 << 0))
   	{
		enable_led_2 = 0;	
	}else{
		enable_led_2 = 1;
	}
}

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Quote

Примитивненько конечно, но для понимания принципа надеюсь сойдет.

Большое спасибо!!! 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...