Easyelectronics.ru

Электроника для всех
Текущее время: 20 сен 2018, 06:05

Часовой пояс: UTC + 5 часов



    • JLCPCB - Прототипы 10 PCBs всего за 2$ (100*100mm, 2-layer)
    • Как мы делаем платы, смотрите на YouTube
    • Крупнейшая китайская фабрика прототипов. 300000+ заказчиков и 10000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин комплектующих.

Начать новую тему Ответить на тему  [ Сообщений: 54 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
 Заголовок сообщения: Re: Мигание светодиодиком и глупый ученик)
СообщениеДобавлено: 12 мар 2018, 17:53 
Заглядывает иногда

Зарегистрирован: 06 мар 2018, 15:22
Сообщения: 40
Осталось ШИМ в кнопку добавить) думаю это надо сделать либо еще одним if и в нем сравнивать с уровнем яркости, или сразу с ним сравнивать


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Мигание светодиодиком и глупый ученик)
СообщениеДобавлено: 12 мар 2018, 20:54 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3465
Откуда: Новосибирск
1 - Микроконтроллер выполняет любую программу по кругу. Отсюда термин "основной цикл". Оттарабанил все инструкции и заново. Программу можно зациклить в любом месте, прервать прерыванием и зациклиться в нем, либо выполнить прерывание и вернуться на место. Но суть одна, любая программа выполняется по кругу.
2 - Для того, чтобы выполнить программу так, как хотите вы - единственное решение - никаких долгих циклов, выполнение программы покусочно. Проверили условие, выполнили код, в зависимости от условий, пошли дальше. Чтобы выполнение программы соответствовало вашим требованиям, смотрим на время выполнения всего основного цикла. Один оборот основного цикла называется итерацией. Отталкиваемся от такого понятия, как время реакции системы. Задача - опросить кнопки, помигать светодиодом. Значит мы спокойно можем оперировать времянками в десятки миллисекунд. Это означает, что время реакции системы должно быть в пределах 10 мс и более. Что в свою очередь означает, что итерация основного цикла должна выполняться с запасом в 10 мс. При любом условии и выполнении программы.
3 - Программные таймеры.
4 - Автоматное программирование. Конечные автоматы. На вашем этапе можно обойтись флагами и состоянием пинов в качестве состояния.

Почитать вершки тут. Основное в цикле статей в архиве в конце статьи.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Мигание светодиодиком и глупый ученик)
СообщениеДобавлено: 13 мар 2018, 13:41 
Заглядывает иногда

Зарегистрирован: 06 мар 2018, 15:22
Сообщения: 40
Подскажите плз как зафиксировать скважность в кнопке
Код:
#define F_CPU 16000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
volatile uint8_t c=0;
volatile uint16_t v=0;
volatile uint8_t y=0;
volatile uint8_t d=0;
volatile uint8_t test=0;
volatile uint8_t shim=0;
int main()
{
   DDRD|=1<<5;
   PORTD|=1<<4;
   TCCR0B|=(0<<CS02)|(1<<CS01)|(0<<CS00);
   TIMSK0|=1<<TOIE0;
   sei();
   for(;;)
   {
      
   }
}//end main
ISR(TIMER0_OVF_vect)
{
   if ((PIND&(1<<4))==0)
   {
      v++;
      if (v<1250)
      {
         if (++c==5)
         {
            if (shim==0)
            {
               if (++test==50)
               {
                  shim=1;
                  PORTD|=1<<5;
               }
            }
            else
            {
               if (--test==0)
               {
                  shim=0;
                  PORTD|=1<<5;
               }
            }
            c=0;
         }
      }
      else if (v<2500)
      {
         PORTD&=~(1<<5);
      }
      else
      {
         v=0;
      }
   }
   else
   {
      if (++d<50)
      {
         if (d<test)
         {
            PORTD|=1<<5;
         }
         else
         {
            PORTD&=~(1<<5);
         }
      }
      else
      {
         d=0;
         if (++c==5)
         {
            if (shim==0)
            {
               if (++test==50)
               {
                  shim=1;
               }
            }
            else
            {
               if (--test==0)
               {
                  shim=0;
               }
            }
            c=0;
         }
      }
   }
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Мигание светодиодиком и глупый ученик)
СообщениеДобавлено: 13 мар 2018, 15:28 
Заглядывает иногда

Зарегистрирован: 06 мар 2018, 15:22
Сообщения: 40
всё, вопрос отпал, сделал так:
Код:
#define F_CPU 16000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
volatile uint8_t c=0;
volatile uint16_t v=0;
volatile uint8_t y=0;
volatile uint8_t d=0;
volatile uint8_t test=0;
volatile uint8_t shim=0;
int main()
{
   DDRD|=1<<5;
   PORTD|=1<<4;
   TCCR0B|=(0<<CS02)|(1<<CS01)|(0<<CS00);
   TIMSK0|=1<<TOIE0;
   sei();
   for(;;)
   {
      
   }
}//end main
volatile uint8_t knopka=0;
volatile uint8_t knpdel=0;
ISR(TIMER0_OVF_vect)
{
   if (++d<50)
   {
      if (d<test)
      {
         PORTD|=1<<5;
      }
      else
      {
         PORTD&=~(1<<5);
      }
   }
   else
   {
      d=0;
      if (++c==10)
      {
         if (PIND&1<<4)
         {
            if (knopka)
            {
               test=knopka;
               knopka=0;
               knpdel=0;
            }
            if (shim==0)
            {
               if (++test==50)
               {
                  shim=1;
               }
            }
            else
            {
               if (--test==0)
               {
                  shim=0;
               }
            }
         }
         else
         {
            if (test)
            {
               knopka=test;
            }
            if (++knpdel==3)
            {
               test^=knopka;
               knpdel=0;
            }
         }
         c=0;
      }
   }
}

осталось только оптимизировать, всем спасибо за помощь, особенно NStorm)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 54 ]  На страницу Пред.  1, 2, 3

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB