Jump to content

    
Sign in to follow this  
singlskv

Диагностика через светодиод

Recommended Posts

вопрос в том как запоминать все состояния эфективно, они все разные по длительности и по количеству состояний.
Примерно так (нашел в очень старом исходнике):
.h:

typedef struct
{
    unsigned char Freq;
    unsigned Time;
} NoteType;
extern void beep(NoteType *);

extern    NoteType PowerOnBeep[];
extern    NoteType PowerOffBeep[];
extern    NoteType LegalKeyBeep[];
extern    NoteType IllegalKeyBeep[];

.c:

NoteType const PowerOnBeep[]=
{
    {Hz(2000),100 ms},
    {Hz(1000),100 ms},
    {Hz(500),100 ms},
    {Hz(200),200 ms},
    {0,0}
};
NoteType const PowerOffBeep[]=
{
    {Hz(100),200 ms},
    {Hz(500),100 ms},
    {0,0}
};
NoteType const LegalKeyBeep[]={{Hz(1000),100 ms},{0,0}};
NoteType const IllegalKeyBeep[]={{Hz(200),100 ms},{0,0}};

Share this post


Link to post
Share on other sites
нужно разные(в том числе по количеству состояний) последовательности,

как в моем первом примере, OK, пусть нужно очень конкретные:

250MS_ON, 250MS_OFF, 250MS_ON, 250MS_OFF, 250MS_ON, 1000MS_OFF // три вспышки, пауза

500MS_ON, 500MS_OFF // равномерное мигание

250MS_ON, 250MS_OFF, 250MS_ON, 1000MS_OFF // две вспышки, пауза

_ON // все время включено

 

Тогда наверное проще иметь массив длительностей, и чтобы некоторые значения (например отрицательные) имели специальный смысл.

Например, -1 - остановиться, -2 - вернуться к началу...

 

Хотя, если это для пользователей, то я тоже склоняюсь к мысли, что индикация должна производиться числом вспышек, а не хитрой последовательностью сигналов.

Share this post


Link to post
Share on other sites

Если прибор не сильно многосерийный, а пользователи не специалисты, лучше поставить один дешёвый семисегментный индикатор и регистр сдвига. Число осмысленных знаков более двух десятков, а если использовать и мигание, тогда, ИМХО, хватит на всё. Расходуется всего два пина, можно обойтись и одним. В итоге, получится ещё и дешевле, ибо экономятся деньги на междугородних переговорах с заказчиком.

В своё время мне приходилось растолковывать заказчикам мигающие сигналы, и хотя в мануале всё было расписано, всегда находится особо неопытный пользователь. После установки индикатора проблемы закончились.

Share this post


Link to post
Share on other sites
Если прибор не сильно многосерийный, а пользователи не специалисты, лучше поставить один дешёвый семисегментный индикатор и регистр сдвига. Число осмысленных знаков более двух десятков, а если использовать и мигание, тогда, ИМХО, хватит на всё. Расходуется всего два пина, можно обойтись и одним. В итоге, получится ещё и дешевле, ибо экономятся деньги на междугородних переговорах с заказчиком.

В своё время мне приходилось растолковывать заказчикам мигающие сигналы, и хотя в мануале всё было расписано, всегда находится особо неопытный пользователь. После установки индикатора проблемы закончились.

 

Святые слова :beer:

 

По поводу одного светодиода с различными комбинациями для женщины - знало бы о ваших идеях наше ОТК => :twak: ... Количество глюков невообразимо. Могут пропускать все - мигание, включение, выключение, считать вспышки - тем более. Это вы и специалист разберетесь и знаете, когда работает, а когда нет. Ставьте индикатор по совету Nanobyte и не сомневайтесь. Вам будет намного легче жить :)

Share this post


Link to post
Share on other sites
По поводу одного светодиода с различными комбинациями для женщины - знало бы о ваших идеях наше ОТК => :twak: ... Количество глюков невообразимо. Могут пропускать все - мигание, включение, выключение, считать вспышки - тем более. Это вы и специалист разберетесь и знаете, когда работает, а когда нет.
Да нет, насчет женщин это была просто кем-то подкинутая шутка, смотреть на мигание

будут инженеры, так что непоняток не будет, а поставить по индикатору к каждому процу просто

невозможно, на одной плате может быть до 16 таких процов и каждый со своим блоком питания, и т.д.

 

Вопрос был именно в организации хранения информации о состоянии светодиода(количество режимов,

количество состояний в каждом режиме, длительности интервалов ON/OFF).

 

Просто количество байтиков на хранение этой инфы оказалось немаленьким, и хотя в итоге я

уместился в нужный объем, возник вопрос, а нельзя ли уменьшить количество, необходимой

для столь простого действия, памяти.... типа может я чего-нить не так делаю :07:

Share this post


Link to post
Share on other sites
Просто количество байтиков на хранение этой инфы оказалось немаленьким, и хотя в итоге я

уместился в нужный объем, возник вопрос, а нельзя ли уменьшить количество, необходимой

для столь простого действия, памяти.... типа может я чего-нить не так делаю :07:

ИМХО уровень реализации должен соответствовать уровню абстракции. Иначе можно было бы давно уже перпетум мобиле изготовить. :biggrin:

Share this post


Link to post
Share on other sites

Когда-то особо не заморачиваясь написал мигалку на 10 состояний для 4x светодиодов, ARM :) :)

//---------------------------------------------------------------------------
#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;
}

Share this post


Link to post
Share on other sites
Когда-то особо не заморачиваясь написал мигалку на 10 состояний для 4x светодиодов, ARM :) :)
Спасибо.

Нечто подобное я обдумывал, но у такого варианта есть один недостаток,

все циклы(время одного прохода) имеют одинаковую длительность, а это не всегда удобно,

правда зато по памяти не накладно.

Share this post


Link to post
Share on other sites
Нечто подобное я обдумывал, но у такого варианта есть один недостаток, все циклы(время одного прохода) имеют одинаковую длительность, а это не всегда удобно, правда зато по памяти не накладно.
Ну и что? Всё равно очень тонких различий в длительности на глаз нельзя заметить - выбираете подходящий квант времени и останавливаетесь на различии Т и 2Т, а 1,5Т всё равно будет мало отличимо от обеих. Зато очень просто реализуется, "хочется вааще цветомузыку устроить" - дайте 16 бит маску на светодиод.

У меня с не помню каких времён так и светодиоды сделаны (загружается маска, в прерывании по старшему биту светим/не светим и циклический сдвиг маски влево) и пискунчики (только там маска в прерывании сдвигается логическим сдвигом, а не циклическим - отпищали и затихли).

Share this post


Link to post
Share on other sites
...на различии Т и 2Т, а 1,5Т всё равно будет мало отличимо от обеих.

Именно так, как на слух можно отличить более-менее уверенно 6dB по уровню, так и на глаз частоту мигания в два раза. Посему и сделано было три градации, частоты мигания и до трех (дальше уже народ путается) морганий/пригасаний. Формально, состояний в приведенном тексте можно нарисовать и много больше, но они будут мало отличаться.

Share this post


Link to post
Share on other sites
Ну и что? Всё равно очень тонких различий в длительности на глаз нельзя заметить - выбираете подходящий квант времени и останавливаетесь на различии Т и 2Т, а 1,5Т всё равно будет мало отличимо от обеих. Зато очень просто реализуется, "хочется вааще цветомузыку устроить" - дайте 16 бит маску на светодиод.

Дело в том, что иногда вывод на светодиод диагностики совмещен с выводом диагностики на

верхний проц и там приходиться делать очень разные по длительности последовательности.

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

ресурсами на реализацию. И на елку влезть....

Share this post


Link to post
Share on other sites

Используйте 2 светодиода, затраты чуть выше, зато легко определяемых состояний на порядки больше. Не эстетично юзеру с секундомером сидеть, это зло.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this