| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > Индикатор уровня на LCD. |
| Автор: Коляй 4.8.2006, 18:14 | ||
| Есть необходимость в логарифмическом индикаторе на LCD типа "полоса". В индикаторе 4 строки по 20 символов. И есть переменная int (результат АЦП). Как бы сделать что бы показания индикатора (одной строки) на больших уровнях переменной изменялись меньше, чем на малых в начале шкалы. (рассказал как смог) Я пока умею на СИ написать цикл из 20 строчек
и вручную поставить числа сравнений для каждого из 20 сегментов-уровней. Но может есть более изящное решение?(проц Атмега8535). |
| Автор: Romikgy 4.8.2006, 21:31 |
| возьми значения обычного логарифма и забей в таблицу и с ней сравнивай |
| Автор: Коляй 4.8.2006, 23:59 |
| Спасибо. А где бы почитать про эту таблицу? А то на этом форуме нашел про логарифмы, там тоже сказали про таблицу, а вот что за таблица не сказали. |
| Автор: Mikel 5.8.2006, 14:08 |
| Таблицу делаешь сам, т.к. в микроконтроллере нет функции логарифма. Поэтому забиваешь ее в массив 20 элементов в твоем случае. Каждому элементу индикатора соответствует число, такое что когда тебе надо отобразить уровень x и этот х больше того числа, индикатор включаешь. Таким образом у тебя загораются все индикаторы до какого-то, где х не переплюнул значение в ячейке. А массив составляешь по логарифмическому закону руками. Пример 8 бит АЦП х=0..255 ln(x+1)=0..5.545 А у тебя 0..19- надо отнормировать. ln(x+1)*20/ln(256)=0..20 берем первые 19 ln(x+1)*20/ln(256)=n ln(x+1)=n/20*ln(256); x=exp(n/20*ln(256))-1 подставляешь номер ячейки n соответсвующий nному индикатору. и считаешь таблицу. |
| Автор: Коляй 6.8.2006, 18:28 |
| Спасибо большое. |