Перейти к содержанию
    

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

вопрос в том как запоминать все состояния эфективно, они все разные по длительности и по количеству состояний.
Примерно так (нашел в очень старом исходнике):
.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}};

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

нужно разные(в том числе по количеству состояний) последовательности,

как в моем первом примере, 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 - вернуться к началу...

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

 

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

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

 

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Когда-то особо не заморачиваясь написал мигалку на 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;
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...на различии Т и 2Т, а 1,5Т всё равно будет мало отличимо от обеих.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...