реклама на сайте
подробности

 
 
> Диагностика через светодиод, 1 диод, много состояний
singlskv
сообщение Feb 26 2008, 23:53
Сообщение #1


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Вопрос в следующем:
- есть один LED загорающийся подачей 0 в порт
- пусть имя порта определено типа #define LED_PORT PORTx
- и маска пина диода типа #define LED_MASK (1<<Pxx)
- есть прерывание(функция) вызывающаяся допустим раз в миллисекунду
- нужно выводить много различных состояний(диагностика) на этот LED
- примеры:
0,5c горим; 0,5 не горим
0,25c горим; 1c не горим; 0,25 горим, .....
0,25c горим; 0,25c не горим, 0,25 горим, 1c не горим,....
ну и т.д.
- количество состояний ограниченно чем-нить разумным, типа 4-6 вариантов последовательностей.

вопрос в том как эфективнее(и по коду и по скорости) это организовать...

P.S. крайние варианты типа горим полгода а потом не горим 1мс не рассматриваем
P.P.S должен присутствовать и вариант просто горим непрерывно
P.P.P.S. как это сделать в принципе, я знаю, интересны просто варианты сделать это оптимально.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
zltigo
сообщение Feb 28 2008, 23:43
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Когда-то особо не заморачиваясь написал мигалку на 10 состояний для 4x светодиодов, ARM smile.gif smile.gif
Код
//---------------------------------------------------------------------------
#define MAX_LED_MODES    10
static const ulong led_const[MAX_LED_MODES] =
                    { 0x00000000,            // 0 Off
                      0x11111111,            // 1 On
                      0x11110000,            // 2 Slow Blink
                      0x11001100,            // 3 Normal Blink
                      0x10101010,            // 4 Fast Blink
                      0x10000000,            // 5 Single Flash
                      0x10100000,            // 6 Two    Flash
                      0x10101000,            // 7 Tree   Flash
                      0x01111111,            // 8 Single Blackout
                      0x01011111            // 9 Two    Blackout
                    };
ulong ledstat =    0;
//  4 LEDS processor
//---------------------------------------------------------------------------
void led_prosess( int counter )
{
ulong curstat;
    curstat = ((ledstat >> ((counter & 0x07 )<<2)) & 0x0F)<<BIT_LED0;
    if( curstat )
        IO1CLR = curstat;
    curstat = (~curstat)&(0x0F<<BIT_LED0);
    if( curstat )
        IO1SET = curstat;
}


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
singlskv
сообщение Feb 29 2008, 00:10
Сообщение #3


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(zltigo @ Feb 29 2008, 02:43) *
Когда-то особо не заморачиваясь написал мигалку на 10 состояний для 4x светодиодов, ARM smile.gif smile.gif
Спасибо.
Нечто подобное я обдумывал, но у такого варианта есть один недостаток,
все циклы(время одного прохода) имеют одинаковую длительность, а это не всегда удобно,
правда зато по памяти не накладно.
Go to the top of the page
 
+Quote Post
ReAl
сообщение Feb 29 2008, 07:47
Сообщение #4


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(singlskv @ Feb 29 2008, 02:10) *
Нечто подобное я обдумывал, но у такого варианта есть один недостаток, все циклы(время одного прохода) имеют одинаковую длительность, а это не всегда удобно, правда зато по памяти не накладно.
Ну и что? Всё равно очень тонких различий в длительности на глаз нельзя заметить - выбираете подходящий квант времени и останавливаетесь на различии Т и 2Т, а 1,5Т всё равно будет мало отличимо от обеих. Зато очень просто реализуется, "хочется вааще цветомузыку устроить" - дайте 16 бит маску на светодиод.
У меня с не помню каких времён так и светодиоды сделаны (загружается маска, в прерывании по старшему биту светим/не светим и циклический сдвиг маски влево) и пискунчики (только там маска в прерывании сдвигается логическим сдвигом, а не циклическим - отпищали и затихли).


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
singlskv
сообщение Feb 29 2008, 09:21
Сообщение #5


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(ReAl @ Feb 29 2008, 10:47) *
Ну и что? Всё равно очень тонких различий в длительности на глаз нельзя заметить - выбираете подходящий квант времени и останавливаетесь на различии Т и 2Т, а 1,5Т всё равно будет мало отличимо от обеих. Зато очень просто реализуется, "хочется вааще цветомузыку устроить" - дайте 16 бит маску на светодиод.

Дело в том, что иногда вывод на светодиод диагностики совмещен с выводом диагностики на
верхний проц и там приходиться делать очень разные по длительности последовательности.
Вобщем, как всегда, хочется максимальная гибкость настроек в сочетании с минимальными
ресурсами на реализацию. И на елку влезть....
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- singlskv   Диагностика через светодиод   Feb 26 2008, 23:53
- - yod   Ну как в PC сделано - при загрузке динамик орет е...   Feb 27 2008, 03:48
- - AHTOXA   Ну например так. Заводим структуру: Кодtypedef str...   Feb 27 2008, 04:33
|- - Сергей Борщ   Цитата(AHTOXA @ Feb 27 2008, 06:33) Ну на...   Feb 27 2008, 07:07
||- - AHTOXA   Цитата(Сергей Борщ @ Feb 27 2008, 12:07) ...   Feb 27 2008, 07:24
|- - singlskv   Цитата(AHTOXA @ Feb 27 2008, 07:33) ........   Feb 27 2008, 18:22
|- - Сергей Борщ   Цитата(singlskv @ Feb 27 2008, 20:22) воп...   Feb 27 2008, 21:57
|- - AHTOXA   Цитата(singlskv @ Feb 27 2008, 23:22) нуж...   Feb 28 2008, 04:45
- - war4one   Цитата(singlskv @ Feb 27 2008, 02:53) Воп...   Feb 27 2008, 05:25
|- - Dog Pawlowa   Есть случаи, когда тестируются базовые вещи в само...   Feb 27 2008, 07:12
- - Kirill Frolov   Цитата(singlskv @ Feb 27 2008, 02:53) Воп...   Feb 27 2008, 07:19
|- - war4one   Цитата(Kirill Frolov @ Feb 27 2008, 10:19...   Feb 27 2008, 09:47
|- - muravei   Цитата(Kirill Frolov @ Feb 27 2008, 10:19...   Feb 27 2008, 15:53
- - bodja74   Светодиод на TX ,если заморгал ,переключаюсь на те...   Feb 27 2008, 12:15
- - zhevak   Господа, господа! Давайте сначала определимся...   Feb 27 2008, 20:10
|- - singlskv   Цитата(zhevak @ Feb 27 2008, 23:10) Госпо...   Feb 27 2008, 21:02
|- - bodja74   Цитата(singlskv @ Feb 28 2008, 01:02) Раз...   Feb 27 2008, 21:38
- - Nanobyte   Если прибор не сильно многосерийный, а пользовател...   Feb 28 2008, 06:53
- - Wildcat   ЦитатаЕсли прибор не сильно многосерийный, а польз...   Feb 28 2008, 22:12
|- - singlskv   Цитата(Wildcat @ Feb 29 2008, 01:12) По п...   Feb 28 2008, 22:38
|- - rezident   Цитата(singlskv @ Feb 29 2008, 03:38) Про...   Feb 28 2008, 22:48
|- - zltigo   Цитата(ReAl @ Feb 29 2008, 10:47) ...на р...   Feb 29 2008, 08:13
- - Angelo   Используйте 2 светодиода, затраты чуть выше, зато ...   Mar 1 2008, 15:16


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 14:18
Рейтинг@Mail.ru


Страница сгенерированна за 0.01426 секунд с 7
ELECTRONIX ©2004-2016