Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: светодиоды мигающие одновременно с разым интервалом
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
xxxdarksxx
как реализовать сие?просто пока из обвязки только пару светодиодов и пару кнопок, попробывал мигать, выходит только одновременно с определенной задержкой или по очереди, как сделать чтобы мигали одновременно но с разной скоростью(пока что постоянной)?

Код
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;
}


это мигание двух светодиодов по очереди
mempfis_
Заведите таймер на милисекундные прерывания.
В основном цикле опрашивайте флаг. Если он установлен то манипулируйте с таймерами для каждого светодиода.
Если сложно сделать прерывания от ТС просто ставте задержку на 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; //инверсия пина
  }

}
xxxdarksxx
спасибо,немножко не понятно,не подскажите что почитать по этой теме и без долгих теоретических отступлений,больше практических примеров?
tazik
Цитата(xxxdarksxx @ Nov 8 2010, 22:51) *
спасибо,немножко не понятно,не подскажите что почитать по этой теме и без долгих теоретических отступлений,больше практических примеров?

пример Вам уже привели. а если почитать, то вот
Нажмите для просмотра прикрепленного файла
xxxdarksxx
Цитата(tazik @ Nov 9 2010, 06:39) *
пример Вам уже привели. а если почитать, то вот
Нажмите для просмотра прикрепленного файла

спасибо, это то что мне нужно
xxxdarksxx
еще такой вопрос,когда подключаю несколько светодиодов они горят менее ярко чем когда один или два, тоесть есть какой то предел тока? что нужно делать чтобы этого не было? использовать внешний источник тока? как правильно подключать светодиоды и кнопки к контроллеру?спасибо)
DTF
Цитата(xxxdarksxx @ Nov 10 2010, 03:13) *
еще такой вопрос,когда подключаю несколько светодиодов они горят менее ярко чем когда один или два, тоесть есть какой то предел тока? что нужно делать чтобы этого не было? использовать внешний источник тока? как правильно подключать светодиоды и кнопки к контроллеру?спасибо)

Конечно, есть ограничения по току, они указаны в DataSheet.
Читайте от начала и до конца: http://easyelectronics.ru/podklyuchenie-mi...era-likbez.html .
xxxdarksxx
Цитата(DTF @ Nov 10 2010, 03:09) *
Конечно, есть ограничения по току, они указаны в DataSheet.
Читайте от начала и до конца: http://easyelectronics.ru/podklyuchenie-mi...era-likbez.html .


огромное спасибо, нашел ответы на многие вопросы, ладно пока ушел изучать теорию)
yurmala
Цитата(tazik @ Nov 9 2010, 09:39) *
пример Вам уже привели. а если почитать, то вот
Нажмите для просмотра прикрепленного файла

спасибо, добавил себе в библиоткеу.
Marto
Цитата(xxxdarksxx @ Nov 10 2010, 02:13) *
еще такой вопрос,когда подключаю несколько светодиодов они горят менее ярко чем когда один или два, тоесть есть какой то предел тока? что нужно делать чтобы этого не было? использовать внешний источник тока? как правильно подключать светодиоды и кнопки к контроллеру?спасибо)


чтобы не сдохла линия порта контроллера, светодиоды следует подключать через транзисторный ключ.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.