Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
08.06.2011, 16:15
|
|
Частый гость
Регистрация: 24.03.2009
Сообщений: 45
Сказал спасибо: 4
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Эффективная индикация амплитуды сигнала на 7-сегментниках
Привет всем.
Микроконтроллер в ходе работы измеряет некий сигнал, амплитуду которого нужно показать в процентах (максимум известен) на трех семисегментных индикаторах, подключенных через сдвиговые регистры. Кроме этоко МК делает еще много работы, а сигнял постоянно меняется и нао довольно часто обновлять показания на индикаторах. Вопрос - как наиболее эффективно заставить МК вычислять сколько процентов в данный момент сигнал составляет от известного максимума и отсылать все это на сдвиговые регистры?
Самое банальное решение это делить на 100 - если получится 1, то показать единицу в левом индикаторе; делить на 10 - получившийся резалт показывать в среднем индикаторе; брать остаток деления на 10 и показывать его в правом индикаторе. Реализуется одним if, делением на 10, switch, затем остаток от деления на 10 и еще раз switch.
Может можно попроще?
Спасибо.
|
|
|
|
08.06.2011, 16:47
|
|
Заблокирован
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
|
Re: Эффективная индикация амплитуды сигнала на 7-сегментниках
Сообщение от poltergeist
|
Может можно попроще?
|
Можно проще и быстрее. Надо создать в памяти таблицу из 100 двухбайтовых элементов, в которую записать все возможные показания индикатора от 0 до 100. Первый байт - сегменты первого индикатора, второй байт - второй индикатор + 1бит для зажигания "1" в третьем. Потом просто прыгать на нужный элемент таблицы и сразу сдвигать полученную пару байтов в регистры индикатора.
Этот способ хорош ещё тем, что при некотором расширении таблицы можно выводить не только цифры, но и текстовые символы, типа "Err", "---" и т.д.
Последний раз редактировалось Yurkin2007; 08.06.2011 в 16:50.
|
|
|
|
08.06.2011, 16:52
|
|
Прописка
Регистрация: 19.07.2006
Адрес: Russia,Yekaterinburg
Сообщений: 184
Сказал спасибо: 12
Сказали Спасибо 75 раз(а) в 43 сообщении(ях)
|
Re: Эффективная индикация амплитуды сигнала на 7-сегментниках
Сообщение от poltergeist
|
довольно часто обновлять
|
Нет такого временного промежутка как довольно часто.
Чисто физиологически для большинства людей будет жутко дискомфортно смотреть на мельтешащие цифры. А при длительности индикации менее 100 мс, еще и редкий человек сможет прочитать хотя бы 4-5 значений подряд. А если там будет "довольно часто" скакать 1-2-3-2-1-0 то просто неприятно будет.
Поэтому для индикации подобных процессов рациональнее использовать не 7сегментный цифровой индикатор, а светодиодные линейки...
__________________
Разработка электроники на заказ, написание ПО для ПК и МК.Обращайтесь в личку.
|
|
|
|
08.06.2011, 17:01
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,294
Сказал спасибо: 442
Сказали Спасибо 1,048 раз(а) в 706 сообщении(ях)
|
Re: Эффективная индикация амплитуды сигнала на 7-сегментниках
Деление на 10/100 - весьма "тяжелая" операция. Тут вопрос в диапазоне входных данных. Вполне можно обойтись обычным вычитанием. На форуме уже была подобная тема.
__________________
misterdi<@>i.ua
|
|
|
|
08.06.2011, 17:20
|
|
Частый гость
Регистрация: 24.03.2009
Сообщений: 45
Сказал спасибо: 4
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Эффективная индикация амплитуды сигнала на 7-сегментниках
mobil2005, вы правы. Индикация будет происходить около 5 раз в секунду.
MisterDi, диапазон все время меняется. Система самообучается, т.е. каждый раз обнаружив амплитуду, которая больше, чем система когда-либо видела ранее, то она переобучается, и ведет отсчет исходя из нового максимума.
На форуме искал, но не нашел к сожалению. Возможно тема называется не совсем понятно. Не припомните как называется?
Что именно имеется ввиду под вычитанием? Можно немного поподробнее?
Yurkin2007, т.е. просто массив данных. Да это идея. Надеюсь все это влезет во флеш память. Спасибо за идею.
|
|
|
|
08.06.2011, 17:47
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,294
Сказал спасибо: 442
Сказали Спасибо 1,048 раз(а) в 706 сообщении(ях)
|
Re: Эффективная индикация амплитуды сигнала на 7-сегментниках
Входные данные это всегда какой-то диапазон. Если это АЦП то 8-10-.....-ХХХ бит, соответственно зависимости от размера входных данных по-разному нужно будет обрабатывать входной поток. Если диапазон широкий, то без деления не обойтись К сожалению вспомнить точное название старой темы не могу.
__________________
misterdi<@>i.ua
|
|
|
|
08.06.2011, 18:41
|
|
Частый гость
Регистрация: 24.03.2009
Сообщений: 45
Сказал спасибо: 4
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Эффективная индикация амплитуды сигнала на 7-сегментниках
MisterDi, не, не АЦП. Все сложнее. На вход МК приходит цифровой сигнал с постоянно меняющейся частотой и скважностью. МК должен мерить сколько времени за 200мс сигнал является логич. единицей. Соответственно таймер, и прерывания по нараст. и спад. фронтам. И потом по показаниям каунтера надо отображать. Каунтер считает с частотой 125000Гц.
В первом посте назвал все это амплитудой, потому как не хотел все усложнять - вопрос то мой был не по приципу измерения чего либо, а по принципу отображения.
|
|
|
|
08.06.2011, 19:06
|
|
Прописка
Регистрация: 19.07.2006
Адрес: Russia,Yekaterinburg
Сообщений: 184
Сказал спасибо: 12
Сказали Спасибо 75 раз(а) в 43 сообщении(ях)
|
Re: Эффективная индикация амплитуды сигнала на 7-сегментниках
Сообщение от poltergeist
|
В первом посте назвал все это амплитудой, потому как не хотел все усложнять - вопрос то мой был не по приципу измерения чего либо, а по принципу отображения.
|
В чем беда то? Не понимаю.
Если у вас проблемы с тем что во время вывода счетчик перестает считать значит организовали что-то не так.
Индикация у вас статическая. А значит проблем в принципе быть не должно.
Где-то по прерыванию ваш счетчик монотонно считает импульсы, по таймеру раз в 200 мс устанавливается флаг обновления индикатора, и в темповую переменную сохраняете значение счетчика.
В майне в цикле постоянно анализируется флаг отрисовки и как только он установится начинается процесс обновления. Во время обновления счетчик как считал так и считает.
Т.е. прерывания не запрещаете. Ибо даже если в момент записи в регистр произойдет прерывание то ничего не случится кроме задержки на долю мс. которая видимым образом будет незаметна.
Вот если индикация динамическая, тут неможко посложнее. Но у вас вроде не этот случай.
__________________
Разработка электроники на заказ, написание ПО для ПК и МК.Обращайтесь в личку.
|
|
|
|
08.06.2011, 19:14
|
|
Заблокирован
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
|
Re: Эффективная индикация амплитуды сигнала на 7-сегментниках
Сообщение от mobil2005
|
В чем беда то? Не понимаю.
|
Как я понял, вопрос г-на Полтергейста был: как проще отобразить десятичное число от 0 до 100 на трёхразрядном семисегментом индикаторе ...
|
|
|
|
08.06.2011, 19:51
|
|
Частый гость
Регистрация: 24.03.2009
Сообщений: 45
Сказал спасибо: 4
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Эффективная индикация амплитуды сигнала на 7-сегментниках
mobil2005, беды нет никакой. Просто, как сказал Yurkin2007, я просто хочу организовать весь процесс как можно проще, чтобы все функции, которые выполняет МК (а их еще немало - обработка кнопок, котоые жмет юзер, индикация на шкалу от 0 до 10 светодиодов, запись и чтение из ЕПРОМ иногда и т.п.) успевали отрабатываться. Вот и попросил совета, как сократить до минимума нагрузку на МК при расчетах числа, которое надо отобразить на индикаторе, и как проще произвести само отображение.
Кстати, насчет расчетов. Можно ли их тоже как то упростить? Т.е. если например МК помнит, что максимум за 200мс может быть, скажем 123442 тиков таймера, а за последние 200мс насчиталось 23542, то... Даже если заранее, при инициализации МК, заполнить таблицу, что от 0 до 1234 клоков, это 1%, от 1234 до 2468 это 2% и т.д. все равно будет сложно... Хм, туплю...
Последний раз редактировалось poltergeist; 08.06.2011 в 19:55.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 22:23.
|
|