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

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

 Барграф это такая линейная шкала, размер которой соответствует значению какого-либо настраиваемого параметра. Еще одна разновиднотсь барграфа с ползунком - положение ползунка будет меняться в зависимости от значения переменной в пределах 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
Просмотров: 14608 | Комментарии: 15 | Теги: измерения, bascom-avr, индикатор | Рейтинг: 5.0/6
Всего комментариев: 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)
Интересная библиотека спасибо! Что за энкодер стоит?

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






   EasyEDA:  бесплатный редактор схем

   ✓ Создание схем
   ✓ Возможность симуляции
   ✓ Быстрое создание печатных плат
   ✓ Интуитивно понятный интерфейс

   Нарисуй свою схему прямо сейчас!
   Изготовление печатных плат   https://easyeda.com/order
авторизация
Логин:
Пароль:
Комментарии
Когда не хватает ног. Часть 2. Сдвиговый регистр 74HC595
08.12.2016 - exersizze:
yorx выдалось немного свободного времени, проверил в симуляторе. Проблема...
Логгер температуры 2.0
05.12.2016 - Evgeny6873:
Хотел повторить схему и долго ждал дисплей, два раза заказывал с Китая, пришел. ...
Когда не хватает ног. Часть 2. Сдвиговый регистр 74HC595
01.12.2016 - yorx:
Доброго времени суток, exersizze попробовал Ваш код все равно не работает как на...
Помни об усадке!
30.11.2016 - pchela5:
Автомобильные никакие не лезут?
Помни об усадке!
29.11.2016 - AlekS:
Виктор, спасибо.
С заменой транса в зиму, перестройка не комельфо) Валяет...
Управляем микроконтроллером с ПК по UART
29.11.2016 - exersizze:
Михаил, для работы с инфракрасными датчиками и диодами есть команды RC5SE...
Управляем микроконтроллером с ПК по UART
29.11.2016 - Михаил:
Всем привет.
Подскажите как переменную S передать по инфракрасному каналу...
Помни об усадке!
29.11.2016 - pchela5:
> Если ленту светодиодную порезать и соединить последовательно
Только ...
Когда не хватает ног. Часть 2. Сдвиговый регистр 74HC595
29.11.2016 - exersizze:
yorx, вывод Q7 ' первой микросхемы соединен с DS второй микросхемы? С...


Лучшие цены на 3D принтеры
успей сделать себе подарок к Новому Году! ;)


Prusa i3

Prusa i3 от 12500 р.



Rostoсk

Rostock от 15000 р.