Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > Индикатор уровня на LCD.


Автор: Коляй 4.8.2006, 18:14
Есть необходимость в логарифмическом индикаторе на LCD типа "полоса". В индикаторе 4 строки по 20 символов. И есть переменная int (результат АЦП). Как бы сделать что бы показания индикатора (одной строки) на больших уровнях переменной изменялись меньше, чем на малых в начале шкалы. (рассказал как смог) 
Я пока умею на СИ написать цикл из 20 строчек 
Код

while(1)
{
if(int > 0xFE) {segment=20;break;}// максимум, светится вся строка (20 сегментов)
if(int > 0xE4) {segment=19;break;}//  19 сегментов
if(int > 0xD0) {segment=18;break;}// 18 сегментов
..........
..........

и вручную поставить числа сравнений для каждого из 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
 Спасибо большое.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)