Отговори на тема  [ 37 мнения ]  Отиди на страница 1, 2, 3  Следваща
Мигане на светодиод(и) ? 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Юни 03, 2005 9:39 pm
Мнения: 2277
Мнение Мигане на светодиод(и) ?
Става дума за микропроцесорна система, която по време на работа дава обратна връзка чрез светване, угасване, мигане на светодиод(и). Също така може да има и някакви звукови сигнали. Към момента нещата са направени на "парче" - където трябва светвам/гася чакам определено време и т.н. Този начин работи, но си има недостатъци.
Идеален вариант е нещо такова: върви някакъв процес, свети/мига определен диод. Ако нещо се счупи/промени или си мени цвета, или мига по-бързо(бавно).
Имам идея да направя таблица със състоянията на всички диоди и на определено време да я обхождам и променям това, което е смяна.
Какъв е правилният подход да се реализира такова поведение ?

_________________
Определянето стойността на дадена величина се нарича ИЗМЕРВАНЕ! Опонентът се оборва с ФАКТИ, а не с ЕПИТЕТИ!


Пет Апр 20, 2018 9:31 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Май 12, 2014 11:49 pm
Мнения: 4394
Местоположение: София
Мнение Re: Мигане на светодиод(и) ?
Какъв е броят на състоянията, които трябва да се индикират и какъв е броят на светодиодите?

Би било добре да се помисли затова всички възможни състояния да се групират по степен на важност, респективно да се дефинира броят за всяка група. В практиката обикновено се ползват 3 - 4 групи: 1 - информативни, 2 - важни, 3 - критични, 4 - грешки.....


Пет Апр 20, 2018 12:45 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Юни 03, 2005 9:39 pm
Мнения: 2277
Мнение Re: Мигане на светодиод(и) ?
Различен, последно ми трябваше 1 rgb и един обикновен. Искам да направя нещо по-универсално, че всеки път да не се боря с едни и същи неща.

_________________
Определянето стойността на дадена величина се нарича ИЗМЕРВАНЕ! Опонентът се оборва с ФАКТИ, а не с ЕПИТЕТИ!


Пет Апр 20, 2018 12:54 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Май 12, 2014 11:49 pm
Мнения: 4394
Местоположение: София
Мнение Re: Мигане на светодиод(и) ?
Аз бих разделил събитията на 3 групи, като за целта ползвам трите основни цвята.
За индикацията в дадена група (цвят), бих избрал едно от двете - честота на мигане или PWM (с период примерно 1 сек. и КЗ, който зависи от конкретното събитие). Съответно групите на събития трябва да имат различен приоритет.


Пет Апр 20, 2018 1:04 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Сеп 26, 2013 2:24 pm
Мнения: 1765
Мнение Re: Мигане на светодиод(и) ?
Аз до колкото разбрах човека пита как да си организира програмата а не кой цвят кога да свети.
Щом задава такъв въпрос явно няма мениджер на задачите и рънва плейн код.

Или по време генерираш прекъсване и на всяко прекъсване сменяш състоянието като времето на прекъсване ще трябва да ти е най-бързото мигане. Или ползваш някой друг таймер дето прави нещо по време и знаеш колко е времето.
Майсторите ще ти кажат да ползваш RTOS.


Пет Апр 20, 2018 2:17 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 03, 2005 2:21 am
Мнения: 12765
Местоположение: София
Мнение Re: Мигане на светодиод(и) ?
А проблемът от какво естество е - времената за изчакване или искаш да организираш някакъв универсален модул "led blink" с който да управляваш светлините и зумера?


Пет Апр 20, 2018 2:24 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Юни 03, 2005 9:39 pm
Мнения: 2277
Мнение Re: Мигане на светодиод(и) ?
Колегата itso.t е най-близо до това, за което питам. Нещо (тук е проблема, не знам какво) като му кажа запали за 1 сек зеления диод и то да го свърши, от друго място като му кажа червен да мига през 1 сек за 10 секунди пак да го задейства. От трето място rgb да мига зелено, когато има данни от usb или някаква друга комуникация, отново да го направи. Относно rtos - заиграх се с nuttx, но и там стои същият въпрос - как е правилно да се организират нещата. Това ако го знам, ще напиша каквото ми трябва.

_________________
Определянето стойността на дадена величина се нарича ИЗМЕРВАНЕ! Опонентът се оборва с ФАКТИ, а не с ЕПИТЕТИ!


Пет Апр 20, 2018 3:09 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Фев 04, 2005 9:59 pm
Мнения: 6019
Местоположение: София
Мнение Re: Мигане на светодиод(и) ?
Аз не разбрах какъв е процесора, какъв е ОС-а и на какъв език се пише.

_________________
Warriors of the Night, ASSEMBLER!!!


Пет Апр 20, 2018 3:11 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11266
Местоположение: Добрич
Мнение Re: Мигане на светодиод(и) ?
syscop написа:
Нещо (тук е проблема, не знам какво)


Това нещо се нарича опашка или още FIFO. Доколкото разбирам от няколко места ще пъхаш команди за LED-a. Затова ти е нужна синхронизация при пъхането. При различните архитектури има различни бързи методи за синхронизация, най-елементарния е просто забраняваш прекъсванията докато пишеш. Може и да има по-добри (примерно ексклузив достъп и т.н.).

Като цяло обаче идеята не е добра ми се струва. По 10-на секунди да трае един тип мигане означава междувременно нищо да не може да показваш. Най-често когато са много неща за показване се правят в поредица. Една голяма пауза след това по едно мигане за всяко нещо. Като мигането може да е кратко или продължително. За кратко - ОК, за проблем дълго. Ако имаш и цвят може за ОК да е зелено, за проблем червено, може и комбинации да вкараш. Въпросът е, че така е по-лесно за поддръжка щото потребителите няма нужда да помнят кое мигане за какво е. Достатъчно е да могат да броят само ;-)


Пет Апр 20, 2018 3:45 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Юни 03, 2005 9:39 pm
Мнения: 2277
Мнение Re: Мигане на светодиод(и) ?
Няма значение нито езика, нито процесора. Като разбера как трябва да изглеждат нещата писането на код няма да е трудно.
@miro_atc
Това за опашката го мислих/мисля го, но там може да има проблем при показване на събития, които не могат да чакат, т.е. ще трябва да има някаква система за приоритети.

_________________
Определянето стойността на дадена величина се нарича ИЗМЕРВАНЕ! Опонентът се оборва с ФАКТИ, а не с ЕПИТЕТИ!


Пет Апр 20, 2018 3:46 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Фев 04, 2005 9:59 pm
Мнения: 6019
Местоположение: София
Мнение Re: Мигане на светодиод(и) ?
syscop написа:
Няма значение нито езика, нито процесора. Като разбера как трябва да изглеждат нещата писането на код няма да е трудно.

За различните процесори и OS-и процеса е различен.

_________________
Warriors of the Night, ASSEMBLER!!!


Пет Апр 20, 2018 4:14 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 10, 2005 3:25 pm
Мнения: 5677
Местоположение: София
Мнение Re: Мигане на светодиод(и) ?
syscop написа:
Имам идея да направя таблица със състоянията на всички диоди и на определено време да я обхождам и променям това, което е смяна.

Таймер генерира прекъсване през определено време. При всяко прекъсване инкрементираш съответните броячи и проверяваш дали е изтекло времето на съответното светене и ако да - сменяш състоянието.


Пет Апр 20, 2018 4:37 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение Re: Мигане на светодиод(и) ?
Аз го правя като един от системните таймери (на ниска честота - примерно 10Hz) върти някакъв байт, дума или квото ще да е и примерно най-младшия бит е състоянието на лед-а. Процеса който иска да се индицира на светодиод просто си слага каквото иска да индицира в съответния байт или дума. И ако е на 10 Hz 11001100 ще мига през 0.2 сек. а 10101010 ще мига през 0.1 сек. и т.н. Може и примерно таймера сам да си презарежда поредицата като я шифтне цялата - така докато процеса заявил мигане не запише 0, мигането/светенето си продължава. Не работя с ОС и идея си нямам как би станало там ама едва ли е много по-различно. Предполагам че е по-засукано ама като цяло едва ли е някаква космическа технология.


Съб Апр 21, 2018 10:54 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 25, 2005 11:41 am
Мнения: 1680
Мнение Re: Мигане на светодиод(и) ?
Така както го описаха колегите, ето го и като код за PIC18 в най-простия му вид.
Можеш да добавиш още изходи и проста логика кога каво да се зарежда.

Код:
#define _GEAR_1  0b0000000000000001
#define _GEAR_2  0b0000000000000101
#define _GEAR_3  0b0000000000010101
#define _GEAR_4  0b0000000001010101
#define _GEAR_5  0b0000000101010101
#define _GEAR_N  0b0000000000111111
#define _GEAR_R  0b0000001111111111
#define _GEAR_E  0b0011001100110011

#define led_gear LATD.B5

u16 gear_pattern, gear_cnt = 16;

void int_LOW() iv 0x0018 ics ICS_AUTO
{
  if (TMR0IF_bit)
    {
      TMR0IF_bit = 0;
      TMR0H         = 0x79;
      TMR0L         = 0xB9;
 
      led_gear = gear_pattern & 0x0001;
      gear_pattern >>= 1;
      gear_cnt++;
    }
}
   
void InitTimer0()
{
  T0CON         = 0x85;
  TMR0H         = 0x79;
  TMR0L         = 0xB9;


  TMR0IP_bit = 0;
  TMR0IF_bit = 0;
  TMR0IE_bit = 1;
}

void main()
{   
  InitTimer0();
 
  while(1)
    {
      if (gear_cnt >= 12)
        {
          gear_cnt = 0;
          switch (gear)
            {
              case '1':
                gear_pattern = _GEAR_1;
              break;
              case '2':
                gear_pattern = _GEAR_2;
              break;
              case '3':
                gear_pattern = _GEAR_3;
              break;
              case '4':
                gear_pattern = _GEAR_4;
              break;
              case '5':
                gear_pattern = _GEAR_5;
              break;
              case 'N':
                gear_pattern = _GEAR_N;
              break;
              case 'R':
                gear_pattern = _GEAR_R;
              break;
            }
        }
       
      //YOUR CODE 
       
    }
}


Нед Апр 22, 2018 11:00 am
Профил ICQ WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 26, 2005 2:01 pm
Мнения: 1952
Местоположение: Варна
Мнение Re: Мигане на светодиод(и) ?
лека добавка:
Код:
...
void int_LOW() iv 0x0018 ics ICS_AUTO
{
  if (TMR0IF_bit)
    {
      TMR0IF_bit = 0;
      TMR0H         = 0x79;
      TMR0L         = 0xB9;
      if(gear_cnt < 12)
      {
          led_gear = gear_pattern & 0x0001;
          gear_pattern >>= 1;
          gear_cnt++;
      }
    }
}

...

void main()
{   
  InitTimer0();

  while(1)
    {
      if (gear_cnt >= 12)
        {
          switch (gear)
            {
              case '1':
                gear_pattern = _GEAR_1;
              break;
              case '2':
                gear_pattern = _GEAR_2;
              break;
              case '3':
                gear_pattern = _GEAR_3;
              break;
              case '4':
                gear_pattern = _GEAR_4;
              break;
              case '5':
                gear_pattern = _GEAR_5;
              break;
              case 'N':
                gear_pattern = _GEAR_N;
              break;
              case 'R':
                gear_pattern = _GEAR_R;
              break;
            }


          gear_cnt = 0;  // <--------

        }
       
      //YOUR CODE
       
    }
}
...
}

за да направиш писането по gear_pattern, от две различни нишки, mutualy exclusive.


Аз очаквах в тази тема да се включат само "АРМаТУРИсти",
но явно и PIC-овете стават за мигане на светодиоди.

А сега по-сериозно... relsys предложения код няма FIFO и на всеки цикъл на main() можеш да сменяш gear_pattern, но
ако текущия gear_pattern не се е извъртял, всички нови заявки(gear_pattern-и) ще останат в небитието и няма да видят бял свят.
Когато имаш FIFO и освен това при препълване на FIFO-то също индицираш код за грешка с някакъв gear_pattern, тогава е по-читаво.
Както miro_atc писа опашката(FIFO-то) е важния елемент. От там нататък може и с директно клатене на GPIO, може и ако има свободен таймер да се конфигурира PWM да клати светодиода ако пък имаш "арматура" може и с DMA да клатиш gear_pattern-а към светодиода или да използваш изход на някой сериен интерфейс SPI например ако имаш свободен.

Но извеждането на информация с мигания и бибкания има своя лимит над който става безсмислено. Дори и да добавиш димни сигнали пак не става, иска си съответния юзър интерфейс - дисплей с подходящи размери.

_________________
Най-опасният враг на истината и свободата е мнозинството.


Нед Апр 22, 2018 10:55 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 37 мнения ]  Отиди на страница 1, 2, 3  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 10 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни