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

светодиоды мигающие одновременно с разым интервалом

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

 

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

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


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

Заведите таймер на милисекундные прерывания.

В основном цикле опрашивайте флаг. Если он установлен то манипулируйте с таймерами для каждого светодиода.

Если сложно сделать прерывания от ТС просто ставте задержку на 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_

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


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

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

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


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

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

пример Вам уже привели. а если почитать, то вот

___________________.rar

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


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

пример Вам уже привели. а если почитать, то вот

___________________.rar

спасибо, это то что мне нужно

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


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

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

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


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

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

Конечно, есть ограничения по току, они указаны в DataSheet.

Читайте от начала и до конца: http://easyelectronics.ru/podklyuchenie-mi...era-likbez.html .

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


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

Конечно, есть ограничения по току, они указаны в DataSheet.

Читайте от начала и до конца: http://easyelectronics.ru/podklyuchenie-mi...era-likbez.html .

 

огромное спасибо, нашел ответы на многие вопросы, ладно пока ушел изучать теорию)

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


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

пример Вам уже привели. а если почитать, то вот

___________________.rar

спасибо, добавил себе в библиоткеу.

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


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

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

 

чтобы не сдохла линия порта контроллера, светодиоды следует подключать через транзисторный ключ.

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


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

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

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

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

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

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

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

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

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

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