Сергей Борщ 119 27 февраля, 2008 Опубликовано 27 февраля, 2008 · Жалоба вопрос в том как запоминать все состояния эфективно, они все разные по длительности и по количеству состояний.Примерно так (нашел в очень старом исходнике):.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}}; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 28 февраля, 2008 Опубликовано 28 февраля, 2008 · Жалоба нужно разные(в том числе по количеству состояний) последовательности, как в моем первом примере, 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 - вернуться к началу... Хотя, если это для пользователей, то я тоже склоняюсь к мысли, что индикация должна производиться числом вспышек, а не хитрой последовательностью сигналов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nanobyte 0 28 февраля, 2008 Опубликовано 28 февраля, 2008 · Жалоба Если прибор не сильно многосерийный, а пользователи не специалисты, лучше поставить один дешёвый семисегментный индикатор и регистр сдвига. Число осмысленных знаков более двух десятков, а если использовать и мигание, тогда, ИМХО, хватит на всё. Расходуется всего два пина, можно обойтись и одним. В итоге, получится ещё и дешевле, ибо экономятся деньги на междугородних переговорах с заказчиком. В своё время мне приходилось растолковывать заказчикам мигающие сигналы, и хотя в мануале всё было расписано, всегда находится особо неопытный пользователь. После установки индикатора проблемы закончились. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Proton5 0 28 февраля, 2008 Опубликовано 28 февраля, 2008 · Жалоба Если прибор не сильно многосерийный, а пользователи не специалисты, лучше поставить один дешёвый семисегментный индикатор и регистр сдвига. Число осмысленных знаков более двух десятков, а если использовать и мигание, тогда, ИМХО, хватит на всё. Расходуется всего два пина, можно обойтись и одним. В итоге, получится ещё и дешевле, ибо экономятся деньги на междугородних переговорах с заказчиком. В своё время мне приходилось растолковывать заказчикам мигающие сигналы, и хотя в мануале всё было расписано, всегда находится особо неопытный пользователь. После установки индикатора проблемы закончились. Святые слова :beer: По поводу одного светодиода с различными комбинациями для женщины - знало бы о ваших идеях наше ОТК => :twak: ... Количество глюков невообразимо. Могут пропускать все - мигание, включение, выключение, считать вспышки - тем более. Это вы и специалист разберетесь и знаете, когда работает, а когда нет. Ставьте индикатор по совету Nanobyte и не сомневайтесь. Вам будет намного легче жить :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
singlskv 0 28 февраля, 2008 Опубликовано 28 февраля, 2008 · Жалоба По поводу одного светодиода с различными комбинациями для женщины - знало бы о ваших идеях наше ОТК => :twak: ... Количество глюков невообразимо. Могут пропускать все - мигание, включение, выключение, считать вспышки - тем более. Это вы и специалист разберетесь и знаете, когда работает, а когда нет.Да нет, насчет женщин это была просто кем-то подкинутая шутка, смотреть на мигание будут инженеры, так что непоняток не будет, а поставить по индикатору к каждому процу просто невозможно, на одной плате может быть до 16 таких процов и каждый со своим блоком питания, и т.д. Вопрос был именно в организации хранения информации о состоянии светодиода(количество режимов, количество состояний в каждом режиме, длительности интервалов ON/OFF). Просто количество байтиков на хранение этой инфы оказалось немаленьким, и хотя в итоге я уместился в нужный объем, возник вопрос, а нельзя ли уменьшить количество, необходимой для столь простого действия, памяти.... типа может я чего-нить не так делаю :07: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 28 февраля, 2008 Опубликовано 28 февраля, 2008 · Жалоба Просто количество байтиков на хранение этой инфы оказалось немаленьким, и хотя в итоге я уместился в нужный объем, возник вопрос, а нельзя ли уменьшить количество, необходимой для столь простого действия, памяти.... типа может я чего-нить не так делаю :07: ИМХО уровень реализации должен соответствовать уровню абстракции. Иначе можно было бы давно уже перпетум мобиле изготовить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 28 февраля, 2008 Опубликовано 28 февраля, 2008 · Жалоба Когда-то особо не заморачиваясь написал мигалку на 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; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
singlskv 0 29 февраля, 2008 Опубликовано 29 февраля, 2008 · Жалоба Когда-то особо не заморачиваясь написал мигалку на 10 состояний для 4x светодиодов, ARM :) :)Спасибо. Нечто подобное я обдумывал, но у такого варианта есть один недостаток, все циклы(время одного прохода) имеют одинаковую длительность, а это не всегда удобно, правда зато по памяти не накладно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ReAl 0 29 февраля, 2008 Опубликовано 29 февраля, 2008 · Жалоба Нечто подобное я обдумывал, но у такого варианта есть один недостаток, все циклы(время одного прохода) имеют одинаковую длительность, а это не всегда удобно, правда зато по памяти не накладно.Ну и что? Всё равно очень тонких различий в длительности на глаз нельзя заметить - выбираете подходящий квант времени и останавливаетесь на различии Т и 2Т, а 1,5Т всё равно будет мало отличимо от обеих. Зато очень просто реализуется, "хочется вааще цветомузыку устроить" - дайте 16 бит маску на светодиод. У меня с не помню каких времён так и светодиоды сделаны (загружается маска, в прерывании по старшему биту светим/не светим и циклический сдвиг маски влево) и пискунчики (только там маска в прерывании сдвигается логическим сдвигом, а не циклическим - отпищали и затихли). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 29 февраля, 2008 Опубликовано 29 февраля, 2008 · Жалоба ...на различии Т и 2Т, а 1,5Т всё равно будет мало отличимо от обеих. Именно так, как на слух можно отличить более-менее уверенно 6dB по уровню, так и на глаз частоту мигания в два раза. Посему и сделано было три градации, частоты мигания и до трех (дальше уже народ путается) морганий/пригасаний. Формально, состояний в приведенном тексте можно нарисовать и много больше, но они будут мало отличаться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
singlskv 0 29 февраля, 2008 Опубликовано 29 февраля, 2008 · Жалоба Ну и что? Всё равно очень тонких различий в длительности на глаз нельзя заметить - выбираете подходящий квант времени и останавливаетесь на различии Т и 2Т, а 1,5Т всё равно будет мало отличимо от обеих. Зато очень просто реализуется, "хочется вааще цветомузыку устроить" - дайте 16 бит маску на светодиод. Дело в том, что иногда вывод на светодиод диагностики совмещен с выводом диагностики на верхний проц и там приходиться делать очень разные по длительности последовательности. Вобщем, как всегда, хочется максимальная гибкость настроек в сочетании с минимальными ресурсами на реализацию. И на елку влезть.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Angelo 0 1 марта, 2008 Опубликовано 1 марта, 2008 · Жалоба Используйте 2 светодиода, затраты чуть выше, зато легко определяемых состояний на порядки больше. Не эстетично юзеру с секундомером сидеть, это зло. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться