Главная » Статьи » Полезная информация

Барграф на знакосинтезирующем дисплее

 Барграф это такая линейная шкала, размер которой соответствует значению какого-либо настраиваемого параметра. Еще одна разновиднотсь барграфа с ползунком - положение ползунка будет меняться в зависимости от значения переменной в пределах 0-100%, это мы наблюдаем, к примеру, каждый раз изменяя настройки громкости в плеере. Использование барграфов в меню упрощает визуальную настройку - мы сразу можем определить значение настраиваемого параметра. Да и выглядит приятней и по взрослому. В статье опишу метод создания барграфов для знакосинтезирующих дисплеев 16х2 с контроллером HD44780.

 Для быстрого создания барграфа  в своем проекте будем пользоваться библиотекой от австрийского товарища Мэтиаса Браунеккера (Matthias Braunecker), на данный момент поддерживается 5 типов барграфов, каждый из которых имеет свой номер:




 Выводить барграф на дисплей с данной библиотекой очень просто, сейчас рассмотрим это. Для начала скачиваем саму библиотеку:

lcd_bar.bas

 Для подключения библиотеки в начале программы прописываем следующие строки:

Const Lcd_bar_style = [Style]
$include "lcd_bar.bas"

в первой строке вместо [Style] вставляем цифру от 0 до 4, тем самым выбираем какой вид будет иметь наш барграф. В следующей строке подключаем саму библиотеку и указываем путь, чтобы компилятор его нашел. В данном случае библиотека лежит в папке с проектом, поэтому полный путь к файлу указывать не обязательно.


 В том месте где нужно вывести барграф, вставляем вот это:

Locate [x] , [y]
Lcd_bar [value] , [x-size]

В первой строке указываются координаты начала шкалы. В следующей строчке  [value] заменяется той переменной, значение которой нам нужно отрисовать. Параметром [x-size] указывается длина выводимого барграфа, тоесть насколько он будет вытянут по длине дисплея.


 Теперь небольшой пример использования библиотеки. К микроконтроллеру Atmega8 подключен энкодер. Общий вывод энкодера поcажен на землю, а выводы данных подключены напрямую к PortD.2 (используется прерывание Int0) и PortD.4

 Схема подключения:




 При вращении ручки энкодера изменяется переменная Value в пределах значений от 0 до 100. В первой строке дисплея начиная с третьего знакоместа выводится барграф, длиной 12 символов.

 Для улучшения юзабильности можно дабавить цифровую информацию настраиваемого параметра, как это сделано у меня:


$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 34
$swstack = 32
$framesize = 34


Config Portd.= Input               'для подключения второго выхода энкодера
Config Int0 = Falling                 'прерывание INT0 по заднему фронту
On Int0 Encod

Enable Interrupts
Enable Int0

'конфигурируем подключение дисплея
Config Lcdpin=Pin,Rs=Portc.0,E=Portc.1,Db4=Portc.2,Db5=Portc.3,Db6=Portc.4,Db7=Portc.5
Config Lcd = 16 * 2

Cursor Blink
Cls
Lcd "AVRproject.ru"
Lowerline
Lcd "Bargraf demo"
Wait 3
Cursor Noblink


Cursor Off

Cls

Const Lcd_bar_style = 1               'выбранный стиль барграфа
$include "lcd_bar.bas"                'подрубаем внешний файл библиотеки

Dim Value As Byte                     'переменная с которой работаем

Do

 Disable Interrupts                  'запрещаем прерывания во время работы с дисплеем
 Locate 1 , 3
 Lcd_bar Value , 12                    'выводим барграф размером 12 символов


 If Value > 100 Then Value = 0        'держим переменную в пределах от 0 до 100

 Locate 2 , 1
 Lcd "Value = " ; Value ; " %"        'выводим числовое значение переменной

 Enable Interrupts                  'снова разрешаем прерывания

 Waitms 70
 Cls

Loop

End


Encod:
 Waitms 2                            'ждем пока утихнет дребезг контактов
 If Pind.= 0 Then
  If Pind.= 0 Then                 'если на ноге единица (импульс не пришел) тогда
  Incr Value                         'инкременируем переменную (увеличиваем на 1)
  Else                               'в обратном случае
  Decr Value                         'декрементируем переменную (уменьшаем на 1)
  End If
 End If
 Gifr = 64                           'сбрасываем регистр хранения прерывания INT0

Return


  Вот что получаем в итоге. При вращении ручки энкодера "ползунок" будет ползать по линейке, а переменная Value будет изменяться от 0 до 100%. Выбранный стиль барграфа = 1






И другие варианты шкал:


[Style] = 0
 



[Style] = 2





[Style] =3





[Style] = 4







Категория: Полезная информация | Добавлено: 27.12.2011
Просмотров: 21271 | Комментарии: 15 | Теги: измерения, bascom-avr, индикатор | Рейтинг: 5.0/7
Всего комментариев: 15
+1   Спам
15 exersizze   (30.05.2012 20:52) [Материал]
В условии нужно проверять значение переменной которая отвечает за пункты меню, и от ее значения уже менять ту переменную которая задействована в барграфе.

14 implex   (30.05.2012 16:51) [Материал]
Подскажите пожалуйста следующее. Программу хочу сделать на примере статьи "Делаем меню для своего проекта на микроконтроллере". Будет около 7 переменных, для каждой свой пункт меню с барграфом. Как организовать при переходе к одному из пунктов изменение именно этой переменной с помощью одного энкодера?

+2   Спам
13 RD3AVJ   (01.02.2012 14:50) [Материал]
2 Scorpushka: так распиновка в проекте на схеме принципиальной, а согласование - в коде программы (назначение портов). Соответствие - в даташите на Ваш LCD
на фотографиях проекта нумерация дисплея идет снизу вверх справа налево если смотреть на экран LCD:

....
10 9
8 7 =================================================
6 5
4 3 =================================================
2 1

ссылка на внешний вид и даташит (pdf) тут http://www.chipdip.ru/product/wh2002a-ngj-ct.aspx

12 Scorpushka   (01.02.2012 11:50) [Материал]
Распишите пожалуйста распиновку на шлейфе у вашего дисплея. у меня похожий, 20х2 не могу подключить. Заранее спасибо

11 exersizze   (14.01.2012 01:20) [Материал]
Конечно можно, резистор как делитель напряжения, заведите средний вывод резистора на вход АЦП. Полученное значение переменной преобразуйте как вам надо (в процентах) и выводите на дисплей

10 svetl1928   (13.01.2012 22:57) [Материал]
Блин, как раз то что мне надо! Только немного в другом варианте.
Подскажите пожалуйста, в контроллерах еще слабоват, но на работе срочно нужно сделать подобную вещь. В общем, есть плата нагрева, на станке фасовки молока в пакеты, на этой плате есть 10 оборотное переменное сопротивление (10 кОм), с помощью него регулируется непосредственно нагрев
Больше/Меньше. Можно ли как то заменить энкодер и скомпоновать под мою задачу. Нужно визуально наблюдать сколько накручено на плате в процентах.
Заранее благодарен!

9 slava022967   (13.01.2012 18:16) [Материал]
буду изучать!

8 exersizze   (13.01.2012 00:20) [Материал]
Этим говорим компилятору сколько нужно выделить памяти в мк для организации стека.
Вот для изучения http://mcselec.com/index.p....emid=57

7 slava022967   (12.01.2012 21:07) [Материал]
всем привет! Если можно подскажите новечку что делают эти строки:
$hwstack = 34
$swstack = 32
$framesize = 34
спасибо.

6 exersizze   (01.01.2012 18:09) [Материал]
Спасибо друзья, и вас с новым годом!

5 niko-lay   (01.01.2012 13:40) [Материал]
Присоединяюсь к поздравлениям! Всех с новым 2012 годом! Автору хочу пожелать новых задумок и интересных проектов! yahoo

4 amv2000   (31.12.2011 19:01) [Материал]
Всех с Наступающим Новым Годом!

3 amv2000   (27.12.2011 20:25) [Материал]
Спасибо Вы всегда идете в духе времени. biggrin

2 exersizze   (27.12.2011 16:18) [Материал]
Простой механический, 24 импульса на оборот, с кнопочкой. PEC12-4220F-S0024.

1 niko-lay   (27.12.2011 13:06) [Материал]
Интересная библиотека спасибо! Что за энкодер стоит?

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]






авторизация
Логин:
Пароль: