реклама на сайте
подробности

 
 
> светодиоды мигающие одновременно с разым интервалом, ввв
xxxdarksxx
сообщение Nov 8 2010, 12:03
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 11-02-10
Пользователь №: 55 414



как реализовать сие?просто пока из обвязки только пару светодиодов и пару кнопок, попробывал мигать, выходит только одновременно с определенной задержкой или по очереди, как сделать чтобы мигали одновременно но с разной скоростью(пока что постоянной)?

Код
Chip type           : ATmega8515
Program type        : Application
Clock frequency     : 8,000000 MHz
Memory model        : Small
External SRAM size  : 0
Data Stack size     : 128
*****************************************************/

#include <mega8515.h>  
#include <delay.h>

// Declare your global variables here

int main(void)
{
DDRC.0=1;
DDRC.1=1;


while (1)
      {
      // Place your code here

PORTC.0=0;
PORTC.1=1;
delay_ms(200);

PORTC.0=1;
PORTC.1=0;
delay_ms(200);
      };
      return 0;
}


это мигание двух светодиодов по очереди

Сообщение отредактировал xxxdarksxx - Nov 8 2010, 12:05
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
mempfis_
сообщение Nov 8 2010, 12:30
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Заведите таймер на милисекундные прерывания.
В основном цикле опрашивайте флаг. Если он установлен то манипулируйте с таймерами для каждого светодиода.
Если сложно сделать прерывания от ТС просто ставте задержку на 1 мС в основном цикле и и опять же ведите для каждого светодиода свой таймер милисекунд.

Код
volatile unsigned char msk_flag; //флаг устанавливается в прерывании от ТС
unsigned int led_1_timer, led_2_timer; //таймеры для каждого светодиода
if(msk_flag)
{
  msk_flag = 0;
  if(led_1_timer>0) led_1_timer--;
  else
  {
     led_1_timer = 1000;
     inv_led(LED_1);
  }

  if(led_2_timer>0) led_2_timer--;
  else
  {
     led_2_timer = 417;
     inv_led(LED_2);
  }
}



Без прерываний

Код
#include <mega8515.h>  
#include <delay.h>

// Declare your global variables here
#define LED_1_TIMEOUT 1000
#defien LED_2_TIMEOUT 417

#define LED_1_MSK (1<<0) //PC0
#defien LED_2_MSK (1<<1) //PC1


int main(void)
{
DDRC = LED_1_MSK|LED_2_MSK; //настройка порта на вывод

unsigned int led_1_timer = LED_1_TIMEOUT, led_2_timer = LED_2_TIMEOUT; //таймеры для каждого светодиода

while (1)
{

  delay_ms(1);

  if(led_1_timer>0) led_1_timer--;
  else
  {
     led_1_timer = LED_1_TIMEOUT;
     PORTC ^= LED_1_MSK; //инверсия пина
  }

  if(led_2_timer>0) led_2_timer--;
  else
  {
     led_2_timer = LED_2_TIMEOUT;
     PORTC ^= LED_2_MSK; //инверсия пина
  }

}


Сообщение отредактировал mempfis_ - Nov 8 2010, 12:32
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 31st July 2025 - 12:55
Рейтинг@Mail.ru


Страница сгенерированна за 0.01355 секунд с 7
ELECTRONIX ©2004-2016