|
Диагностика через светодиод, 1 диод, много состояний |
|
|
|
Feb 27 2008, 21:57
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(singlskv @ Feb 27 2008, 20:22)  вопрос в том как запоминать все состояния эфективно, они все разные по длительности и по количеству состояний. Примерно так (нашел в очень старом исходнике): Код .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}};
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Feb 28 2008, 04:45
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(singlskv @ Feb 27 2008, 23:22)  нужно разные(в том числе по количеству состояний) последовательности, как в моем первом примере, 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 - вернуться к началу... Хотя, если это для пользователей, то я тоже склоняюсь к мысли, что индикация должна производиться числом вспышек, а не хитрой последовательностью сигналов.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Feb 28 2008, 06:53
|

За битами по регистрам гоняюсь
  
Группа: Свой
Сообщений: 457
Регистрация: 24-04-06
Из: Таганрог
Пользователь №: 16 446

|
Если прибор не сильно многосерийный, а пользователи не специалисты, лучше поставить один дешёвый семисегментный индикатор и регистр сдвига. Число осмысленных знаков более двух десятков, а если использовать и мигание, тогда, ИМХО, хватит на всё. Расходуется всего два пина, можно обойтись и одним. В итоге, получится ещё и дешевле, ибо экономятся деньги на междугородних переговорах с заказчиком. В своё время мне приходилось растолковывать заказчикам мигающие сигналы, и хотя в мануале всё было расписано, всегда находится особо неопытный пользователь. После установки индикатора проблемы закончились.
--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
|
|
|
|
|
Feb 28 2008, 22:12
|
Частый гость
 
Группа: Участник
Сообщений: 104
Регистрация: 21-12-06
Пользователь №: 23 770

|
Цитата Если прибор не сильно многосерийный, а пользователи не специалисты, лучше поставить один дешёвый семисегментный индикатор и регистр сдвига. Число осмысленных знаков более двух десятков, а если использовать и мигание, тогда, ИМХО, хватит на всё. Расходуется всего два пина, можно обойтись и одним. В итоге, получится ещё и дешевле, ибо экономятся деньги на междугородних переговорах с заказчиком. В своё время мне приходилось растолковывать заказчикам мигающие сигналы, и хотя в мануале всё было расписано, всегда находится особо неопытный пользователь. После установки индикатора проблемы закончились. Святые слова По поводу одного светодиода с различными комбинациями для женщины - знало бы о ваших идеях наше ОТК =>  ... Количество глюков невообразимо. Могут пропускать все - мигание, включение, выключение, считать вспышки - тем более. Это вы и специалист разберетесь и знаете, когда работает, а когда нет. Ставьте индикатор по совету Nanobyte и не сомневайтесь. Вам будет намного легче жить
--------------------
Затравленный и прижатый к стене кот превращается в тигра. Мигель Сервантес.
|
|
|
|
|
Feb 28 2008, 22:38
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(Wildcat @ Feb 29 2008, 01:12)  По поводу одного светодиода с различными комбинациями для женщины - знало бы о ваших идеях наше ОТК =>  ... Количество глюков невообразимо. Могут пропускать все - мигание, включение, выключение, считать вспышки - тем более. Это вы и специалист разберетесь и знаете, когда работает, а когда нет. Да нет, насчет женщин это была просто кем-то подкинутая шутка, смотреть на мигание будут инженеры, так что непоняток не будет, а поставить по индикатору к каждому процу просто невозможно, на одной плате может быть до 16 таких процов и каждый со своим блоком питания, и т.д. Вопрос был именно в организации хранения информации о состоянии светодиода(количество режимов, количество состояний в каждом режиме, длительности интервалов ON/OFF). Просто количество байтиков на хранение этой инфы оказалось немаленьким, и хотя в итоге я уместился в нужный объем, возник вопрос, а нельзя ли уменьшить количество, необходимой для столь простого действия, памяти.... типа может я чего-нить не так делаю
|
|
|
|
|
Feb 28 2008, 23:43
|

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

|
Когда-то особо не заморачиваясь написал мигалку на 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; }
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Feb 29 2008, 00:10
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(zltigo @ Feb 29 2008, 02:43)  Когда-то особо не заморачиваясь написал мигалку на 10 состояний для 4x светодиодов, ARM  Спасибо. Нечто подобное я обдумывал, но у такого варианта есть один недостаток, все циклы(время одного прохода) имеют одинаковую длительность, а это не всегда удобно, правда зато по памяти не накладно.
|
|
|
|
|
Feb 29 2008, 07:47
|

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

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

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

|
Цитата(ReAl @ Feb 29 2008, 10:47)  ...на различии Т и 2Т, а 1,5Т всё равно будет мало отличимо от обеих. Именно так, как на слух можно отличить более-менее уверенно 6dB по уровню, так и на глаз частоту мигания в два раза. Посему и сделано было три градации, частоты мигания и до трех (дальше уже народ путается) морганий/пригасаний. Формально, состояний в приведенном тексте можно нарисовать и много больше, но они будут мало отличаться.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Feb 29 2008, 09:21
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

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

Группа: Участник
Сообщений: 58
Регистрация: 1-12-07
Пользователь №: 32 871

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