| Автор |
Съобщение |
|
syscop
Ранг: Форумен бог
Регистриран на: Пет Юни 03, 2005 9:39 pm Мнения: 2277
|
 Мигане на светодиод(и) ?
Става дума за микропроцесорна система, която по време на работа дава обратна връзка чрез светване, угасване, мигане на светодиод(и). Също така може да има и някакви звукови сигнали. Към момента нещата са направени на "парче" - където трябва светвам/гася чакам определено време и т.н. Този начин работи, но си има недостатъци. Идеален вариант е нещо такова: върви някакъв процес, свети/мига определен диод. Ако нещо се счупи/промени или си мени цвета, или мига по-бързо(бавно). Имам идея да направя таблица със състоянията на всички диоди и на определено време да я обхождам и променям това, което е смяна. Какъв е правилният подход да се реализира такова поведение ?
_________________ Определянето стойността на дадена величина се нарича ИЗМЕРВАНЕ! Опонентът се оборва с ФАКТИ, а не с ЕПИТЕТИ!
|
| Пет Апр 20, 2018 9:31 am |
|
 |
|
lcr
Ранг: Форумен бог
Регистриран на: Пон Май 12, 2014 11:49 pm Мнения: 4394 Местоположение: София
|
 Re: Мигане на светодиод(и) ?
Какъв е броят на състоянията, които трябва да се индикират и какъв е броят на светодиодите?
Би било добре да се помисли затова всички възможни състояния да се групират по степен на важност, респективно да се дефинира броят за всяка група. В практиката обикновено се ползват 3 - 4 групи: 1 - информативни, 2 - важни, 3 - критични, 4 - грешки.....
|
| Пет Апр 20, 2018 12:45 pm |
|
 |
|
syscop
Ранг: Форумен бог
Регистриран на: Пет Юни 03, 2005 9:39 pm Мнения: 2277
|
 Re: Мигане на светодиод(и) ?
Различен, последно ми трябваше 1 rgb и един обикновен. Искам да направя нещо по-универсално, че всеки път да не се боря с едни и същи неща.
_________________ Определянето стойността на дадена величина се нарича ИЗМЕРВАНЕ! Опонентът се оборва с ФАКТИ, а не с ЕПИТЕТИ!
|
| Пет Апр 20, 2018 12:54 pm |
|
 |
|
lcr
Ранг: Форумен бог
Регистриран на: Пон Май 12, 2014 11:49 pm Мнения: 4394 Местоположение: София
|
 Re: Мигане на светодиод(и) ?
Аз бих разделил събитията на 3 групи, като за целта ползвам трите основни цвята. За индикацията в дадена група (цвят), бих избрал едно от двете - честота на мигане или PWM (с период примерно 1 сек. и КЗ, който зависи от конкретното събитие). Съответно групите на събития трябва да имат различен приоритет.
|
| Пет Апр 20, 2018 1:04 pm |
|
 |
|
Pif
Ранг: Форумен бог
Регистриран на: Чет Сеп 26, 2013 2:24 pm Мнения: 1765
|
 Re: Мигане на светодиод(и) ?
Аз до колкото разбрах човека пита как да си организира програмата а не кой цвят кога да свети. Щом задава такъв въпрос явно няма мениджер на задачите и рънва плейн код.
Или по време генерираш прекъсване и на всяко прекъсване сменяш състоянието като времето на прекъсване ще трябва да ти е най-бързото мигане. Или ползваш някой друг таймер дето прави нещо по време и знаеш колко е времето. Майсторите ще ти кажат да ползваш RTOS.
|
| Пет Апр 20, 2018 2:17 pm |
|
 |
|
itso.t
Ранг: Форумен бог
Регистриран на: Чет Фев 03, 2005 2:21 am Мнения: 12765 Местоположение: София
|
 Re: Мигане на светодиод(и) ?
А проблемът от какво естество е - времената за изчакване или искаш да организираш някакъв универсален модул "led blink" с който да управляваш светлините и зумера?
|
| Пет Апр 20, 2018 2:24 pm |
|
 |
|
syscop
Ранг: Форумен бог
Регистриран на: Пет Юни 03, 2005 9:39 pm Мнения: 2277
|
 Re: Мигане на светодиод(и) ?
Колегата itso.t е най-близо до това, за което питам. Нещо (тук е проблема, не знам какво) като му кажа запали за 1 сек зеления диод и то да го свърши, от друго място като му кажа червен да мига през 1 сек за 10 секунди пак да го задейства. От трето място rgb да мига зелено, когато има данни от usb или някаква друга комуникация, отново да го направи. Относно rtos - заиграх се с nuttx, но и там стои същият въпрос - как е правилно да се организират нещата. Това ако го знам, ще напиша каквото ми трябва.
_________________ Определянето стойността на дадена величина се нарича ИЗМЕРВАНЕ! Опонентът се оборва с ФАКТИ, а не с ЕПИТЕТИ!
|
| Пет Апр 20, 2018 3:09 pm |
|
 |
|
ike
Ранг: Форумен бог
Регистриран на: Пет Фев 04, 2005 9:59 pm Мнения: 6019 Местоположение: София
|
 Re: Мигане на светодиод(и) ?
Аз не разбрах какъв е процесора, какъв е ОС-а и на какъв език се пише.
_________________ Warriors of the Night, ASSEMBLER!!!
|
| Пет Апр 20, 2018 3:11 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11265 Местоположение: Добрич
|
 Re: Мигане на светодиод(и) ?
Това нещо се нарича опашка или още FIFO. Доколкото разбирам от няколко места ще пъхаш команди за LED-a. Затова ти е нужна синхронизация при пъхането. При различните архитектури има различни бързи методи за синхронизация, най-елементарния е просто забраняваш прекъсванията докато пишеш. Може и да има по-добри (примерно ексклузив достъп и т.н.). Като цяло обаче идеята не е добра ми се струва. По 10-на секунди да трае един тип мигане означава междувременно нищо да не може да показваш. Най-често когато са много неща за показване се правят в поредица. Една голяма пауза след това по едно мигане за всяко нещо. Като мигането може да е кратко или продължително. За кратко - ОК, за проблем дълго. Ако имаш и цвят може за ОК да е зелено, за проблем червено, може и комбинации да вкараш. Въпросът е, че така е по-лесно за поддръжка щото потребителите няма нужда да помнят кое мигане за какво е. Достатъчно е да могат да броят само 
|
| Пет Апр 20, 2018 3:45 pm |
|
 |
|
syscop
Ранг: Форумен бог
Регистриран на: Пет Юни 03, 2005 9:39 pm Мнения: 2277
|
 Re: Мигане на светодиод(и) ?
Няма значение нито езика, нито процесора. Като разбера как трябва да изглеждат нещата писането на код няма да е трудно. @miro_atc Това за опашката го мислих/мисля го, но там може да има проблем при показване на събития, които не могат да чакат, т.е. ще трябва да има някаква система за приоритети.
_________________ Определянето стойността на дадена величина се нарича ИЗМЕРВАНЕ! Опонентът се оборва с ФАКТИ, а не с ЕПИТЕТИ!
|
| Пет Апр 20, 2018 3:46 pm |
|
 |
|
ike
Ранг: Форумен бог
Регистриран на: Пет Фев 04, 2005 9:59 pm Мнения: 6019 Местоположение: София
|
 Re: Мигане на светодиод(и) ?
За различните процесори и OS-и процеса е различен.
_________________ Warriors of the Night, ASSEMBLER!!!
|
| Пет Апр 20, 2018 4:14 pm |
|
 |
|
Desert Leo
Ранг: Форумен бог
Регистриран на: Чет Фев 10, 2005 3:25 pm Мнения: 5677 Местоположение: София
|
 Re: Мигане на светодиод(и) ?
Таймер генерира прекъсване през определено време. При всяко прекъсване инкрементираш съответните броячи и проверяваш дали е изтекло времето на съответното светене и ако да - сменяш състоянието.
|
| Пет Апр 20, 2018 4:37 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
 Re: Мигане на светодиод(и) ?
Аз го правя като един от системните таймери (на ниска честота - примерно 10Hz) върти някакъв байт, дума или квото ще да е и примерно най-младшия бит е състоянието на лед-а. Процеса който иска да се индицира на светодиод просто си слага каквото иска да индицира в съответния байт или дума. И ако е на 10 Hz 11001100 ще мига през 0.2 сек. а 10101010 ще мига през 0.1 сек. и т.н. Може и примерно таймера сам да си презарежда поредицата като я шифтне цялата - така докато процеса заявил мигане не запише 0, мигането/светенето си продължава. Не работя с ОС и идея си нямам как би станало там ама едва ли е много по-различно. Предполагам че е по-засукано ама като цяло едва ли е някаква космическа технология.
|
| Съб Апр 21, 2018 10:54 pm |
|
 |
|
relsys
Ранг: Форумен бог
Регистриран на: Пет Ное 25, 2005 11:41 am Мнения: 1680
|
 Re: Мигане на светодиод(и) ?
Така както го описаха колегите, ето го и като код за PIC18 в най-простия му вид. Можеш да добавиш още изходи и проста логика кога каво да се зарежда.
|
| Нед Апр 22, 2018 11:00 am |
|
 |
|
Zdrav
Ранг: Форумен бог
Регистриран на: Сря Яну 26, 2005 2:01 pm Мнения: 1952 Местоположение: Варна
|
 Re: Мигане на светодиод(и) ?
лека добавка: за да направиш писането по 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 |
|
|