Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Arduino:Библиотеки/GLCD

Материал из Онлайн справочника
Перейти к: навигация, поиск

Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Ambox content.png Черновик


Содержание

Библиотека GLCD-Arduino[1]

Библиотека GLCD-Arduino (GLCDv3) – это неофициальная библиотека Arduino, поддерживающая LCD-мониторы, в которых используется чип KS0108 (или эквивалентный ему).

Примечание: Библиотека GLCDv3 больше не является рекомендуемой библиотекой.

Разработка GLCDv3 не ведется с 2012 года, и авторы не выпускали официальных релизов с декабря 2011 года. Кроме того, GLCDv3 не работает на новых моделях Arduino и новых версиях IDE Arduino. Образно говоря, срок жизни GLCDv3 подошел к концу.

Главный автор GLCDv3 теперь работает над библиотекой openGLCD. Она более функциональна и имеет более широкую поддержку устройств. У нее есть режим совместимости с GLCDv3, и она использует ту же схему соединения, что и GLCDv3.

Кроме того, репозиторий на Google Code, где хранится GLCDv3, Google больше не поддерживает. Проекты, хранящиеся на этом сайте, были заархивированы, но функции сайта Google Code со временем будут выключаться, после чего прекратит работу и сам сайт.

Поэтому использовать библиотеку GLCDv3 больше не рекомендуется.

На главной странице проекта в Google Code есть упоминание насчет устаревания GLCDv3, но поскольку сайт грозит исчезнуть, мы повторим его здесь:

«Эта библиотека больше не поддерживается авторами, и ее не обновляли с декабря 2011 года. Кроме того, она не работает с новыми версиями IDE Arduino (вроде 1.0 и выше), потому что они используют обновленные инструменты AVR-GCC, а код библиотеки GLCDv3 с ними не совместим.

Альтернативы библиотеке GLCDv3

Если вы не против библиотеки, лицензированной GPL 3.0 (то есть, если ваш проект с открытым кодом), то одной из альтернатив может стать библиотека openGLCD. Она поддерживается разработчиками и совместима с GLCDv3.

Еще одна альтернатива – это u8glib. Она распространяется по модифицированной лицензии BSD (т.е. «New BSD License» или «The BSD 3-Clause License»).

Дополнительную информацию о GLCDv3 можно найти по этой ссылке.

О библиотеке

Последнюю версию библиотеки GLCD-Arduino можно найти здесь. В комплекте с ней идет несколько скетчей-примеров и файл readme.txt, которые объясняет, как добавить библиотеку, а также содержит развернутую документацию. Самую актуальную и наиболее полную документацию читайте в HTML-файле (по адресу glcd/doc/GLCDref.htm в распакованной папке библиотеки).

Библиотека GLCD-Arduino обладает следующими функциями:

  • Поддержка Arduino 1.x (по-прежнему работает с IDE Arduino в версиях до 1.x)
  • Поддержка плат Mega 2560, Sanguino и Teensy
  • Упрощенное назначение контактов. Любую функцию GLCD можно назначить для любого контакта платы
  • Аккуратная и корректная визуализация шрифтов всех размеров и в каждом пикселе
  • Текстовые области, определяемые пользователем
  • Возможность скроллинга текста вверх/вниз
  • Функции для кругов
  • Дополнительные скетчи-примеры, включая диагностический скетч
  • Полная документация в HTML-формате и с функцией поиска
  • Назначать контакты также можно при помощи AVR-порта и номера контакта (то есть в формате PIN_D3) вместо номера контакта на самой Arduino
  • Поддержка шрифтов с фиксированной шириной (до размеров 8 x 21)
  • Функция CursorTo(), которая ставит курсор в указанном месте (работает только со шрифтами с фиксированной шириной)
  • Функция DrawBitmap(), которая показывает растровые изображения, хранящиеся во flash-памяти. В комплекте с библиотекой идет утилита на Processing, которая конвертирует монохромный растровый файл в заголовочный файл и сохраняет это изображение во flash-памяти, чтобы его затем можно было использовать в функции DrawBitmap().
Тестовый скетч, запущенный на плате max232 Freeduino, к которой подключена GLCD-панель

Тестовый скетч, запущенный на плате max232 Freeduino, к которой подключена GLCD-панель

Библиотека GLCD основана на графических функциях для дисплеев с чипами ks0108, написанных Фабианом Максимилианом Тьелем (Fabian Maximilian Thiele). Тьель также владеет правами на эти функции. Ссылка на сайт в его коде не работает, но вы можете приобрести копию его оригинальной работы в разделе «Загрузки» в конце этой статьи.

Библиотека GLCD создана именно на основе функций Тьеля, но в результате доработки стала гибче в назначении портов и быстрее при работе с I/O контактами. Кроме того, было добавлено несколько вспомогательных функций, а интерфейс был адаптирован под Arduino. Названия функций в большинстве своем остались без изменений, чтобы облегчить портирование кода, написанного для оригинальной версии. Некоторые функции теперь используют аргументы по умолчанию – ради простоты использования.

Функции

Ниже – список функций библиотеки GLCD. Более полную, подробную и актуальную информацию о функциях читайте в HTML-документации.

  • GLCD.Init(invert). Инициализирует библиотеку. Аргумент invert отвечает за инвертирование при рисовании: если вместо него будет стоять false, это включит режим рисования, а если true, то режим «стерки». Смотрите также функцию SetInverted().
  • GLCD.GotoXY(x,y). Располагает курсор на заданных координатах по x и y. Если аргументами указать «0» и «0», курсор будет выставлен в верхний левый угол экрана.
  • GLCD.ClearScreen(). Очищает экран LCD-дисплея.

Рисующие функции (цвет WHITE означает стирание, а цвет BLACK – рисование; указывается вместо аргумента color):

  • GLCD.DrawCircle(x, y, radius, color). Рисует круг с центром, расположенным по координатам x и y.
  • GLCD.DrawLine(x1,y1,x2,y2,color). Рисует линию, один конец которой находится по координатам x1 и y1, а второй – по координатам x2 и y2.
  • GLCD.DrawVertLine(x, y, length, color). Рисует вертикальную линию.
  • GLCD.DrawHoriLine(x, y, length, color). Рисует горизонтальную линию.
  • GLCD.DrawRect(x, y, width, height, color). Рисует прямоугольник.
  • GLCD.DrawRoundRect(x, y, width, height, radius, color). Тоже рисует прямоугольник, но с закругленными краями.
  • GLCD.FillRect(x, y, width, height, color). Рисует закрашенный прямоугольник.
  • GLCD.InvertRect(x, y, width, height). Инвертирует пиксели у заданного прямоугольника.
  • GLCD.SetInverted(invert). Инвертирует режим рисования.
  • GLCD.SetDot(x, y, color). Рисует точку указанного цвета в указанной локации.
  • GLCD.DrawBitmap(bitmap, x, y, color). Рисует растровое изображение по указанным координатам.

Функции для шрифтов

  • GLCD.SelectFont(font, color ). Выбирает шрифт. Если никакой цвет указан не будет, то по умолчанию будет выставлен BLACK.
  • GLCD.PutChar(character). Печатает заданный символ на текущей позиции курсора.
  • GLCD.Puts(string). Печатает указанную строку на текущей позиции курсора.
  • GLCD.Puts_P(string). Печатает строку из программной памяти на текущей позиции курсора.
  • GLCD.PrintNumber(number). Печатает десятичное значение указанного числа на текущей позиции курсора.
  • GLCD.CursorTo(x, y). Базовые координаты для шрифтов с фиксированной шириной (например, для системного шрифта).

Схема соединения и настройка

Настройка в библиотеке GLCD бывает трех типов:

  • Настройка библиотеки
  • Настройка дисплея
  • Настройка контактов

Настройка библиотеки выполняется в файле «glcd_Config.h» (он находится в корне распакованного ZIP-архива). Ею определяется вещи вроде типа дисплея и ряда других опций. Это самый главный конфигурационный файл.

Настройка дисплея отвечает за конфигурацию опций, которые характерны для разных типов дисплеев – вроде геометрии экрана, CS-линий и низкоуровневой синхронизации. Какой именно использовать файл для настройки дисплея, указывается в файле для настройки библиотеки, т.е. в «glcd_Config.h».

Настройка контактов выполняется в одном из заголовочных файлов, находящихся по адресу «glcd/config». Каждый из этих файлов отвечает за определенный контроллер. Типы контроллеров, которые поддерживаются в текущей версии:

  • ks0108_arduino.h <- это для плат ATmega168 и ATmega328
  • ks0108_mega.h <- это для Arduino Mega (ATmega1280/2560)
  • ks0108_Sanguino.h <- для Sanguino (ATmega644)
  • ks0108_Teensy.h <- для Teensy/Teensy++

Более подробно о настройке читайте в файлах «readme.txt» и «glcd_Config.h», а также в HTML-документации. Таблица ниже построена исходя из того, что контакты у вашего дисплея назначены по умолчанию.

Важно: Соединения с контактами дисплея должны быть припаяны. Если просто просунуть провода или 20-контактный гребешок в отверстия (без спайки), то правильного электрического соединения создано не будет.

Схемы соединения на самых распространенных GLCD-панелях

Arduino 168 Mega Функция Распиновка A Распиновка B Распиновка C Распиновка D Инф.
5V 5V +5 вольт 1  !2!  !2! 4
GND GND «Земля» 2  !1!  !1! 3
n/a n/a Vo (изменение контраста; входной контакт) 3 3 3 5 Подключите к движку контрастного потенциометра (т.е. к среднему контакту)
8 22 D0 4 7 7 9
9 23 D1 5 8 8 10
10 24 D2 6 9 9 11
11 25 D3 7 10 10 12
4 26 D4 8 11 11 13
5 27 D5 9 12 12 14
6 28 D6 10 13 13 15
7 29 D7 11 14 14 16
14 (alog0) 33 CSEL1 12 15 16 1 Выбор чипа 1
15 (alog1) 34 CSEL2 13 16 15 2 Выбор чипа 2
Reset 14 17 17 (См. примечание о контакте Reset ниже)
16 (alog2) 35 R_W 155 5 5 7 Запись / Считывание
17 (alog3) 36 D_I 16 4 4 6 Данные / Инструкция (он же RS)
18 (alog4) 37 EN 17 6 6 8 Контакт, сообщающий о том, что данные готовы для считывания
n/a n/a Vee/Vout (изменение контраста; выходной контакт) 18 18 18 Подключите к одной из ножек потенциометра на 10 или 20 кОм
n/a n/a Подсветка, +5V 19 19 19 Резистор на 100 или 330 ом, подключенный к +5V
Gnd Gnd Подсветка, «земля» 20 20 20
n/a n/a n/a n/a n/a n/a n/a Подключите другую ножку контрастного потенциометра к Gnd (т.е. к «земле»)

Примечание насчет сброса. Если IDE Arduino не может загрузить Arduino, когда Reset-линия GLCD-модуля подключена к Reset-контакту Arduino, смотрите раздел «Решение проблем» в конце статьи.

Дисплеи с распиновкой A

  • HDM64GS12L-4
  • Crystalfontz CFAG12864B (протестирован пользователем biomed). У модели CFAG12864B-YYH-N 18-ый контакт – это NC-контакт (у этой модели нет встроенного генератора отрицательного напряжения). Таким образом, в результате 3-ий контакт должен быть по-прежнему подключен к центральному контакту потенциометра (на 20 кОм), одна ножка которого должна быть подключена к +5V на Arduino (не к GND), а другая – к -5V, которые генерируются внешним источником питания (не 18-ым контактом). Кроме того, CSEL1 и CSEL2 нужно поменять местами, иначе левая и правая половины изображения будут перевернуты.
  • Sparkfun LCD-00710CM (протестирован пользователем biomed)
  • NKC Electronics LCD-0022 (тестирован пользователем NKC Electronics)
  • Longtech LGM128164H (тестирован пользователем mr_lanza)

Дисплеи с распиновкой B

  • HDM64GS12L-5
  • Lumex LCM-S12864GSF (протестирован пользователем jowan)
  • Futurlec BLUE128X64LCD (протестирован пользователем tyggerjai)
  • AZ Displays AGM1264F (протестирован пользователем santy)
  • Displaytech 64128A BC (протестирован Удо Клейном)
  • Adafruit GLCD (протестирован пользователем Things). Контакт RESET оставьте неподключенным, иначе будете испытывать проблемы с загрузкой.
  • DataVision DG12864-88 (протестирован пользователем wglover)
  • Topway LM12864LDW (протестирован пользователем zandaa)
  • Satistronics RT12864J-1 (протестирован пользователем doublet)
  • Digitron SG12864J4. По всей видимости, RESET нужно оставить неподключенным и здесь – чтобы не было проблем с загрузкой.
  • QY-12864F, производитель неизвестен (протестирован пользователем SphiNx)
  • TM12864L-2, производитель неизвестен (протестирован пользователем frantorres)
  • 12864J-1, производитель неизвестен (протестирован пользователем pixelk)
  • Huahong Technology Ltd LMG12864 (протестирован пользователем yxskaft). У модели LMG-SSC12A64DRY(-H) желто-зеленая подсветка.
  • Sure Electronics DE-LM105 (протестирован пользователем imode)
  • Wide.hk "LCD Shield Pro + GLCD 128x64 LCD" (протестирован пользователем universam). 6-контактная клавишная панель должна быть подключена к CS1 (A0) и «земле»!
  • NAN YA Plastics Corp LMC97S005C (протестирован пользователем serisman)
  • SYT-12864, производитель неизвестен (протестирован пользователем serisman)

Дисплеи с распиновкой C

  • Shenzhen Jinghua Displays Co Ltd. JM12864 (протестирован пользователем macpod). 3-ий контакт (Vo) должен быть отключен. Потенциометр на дисплее управляет контрастом. К светодиоду подсветки резисторы, возможно, уже добавлены.

Дисплеи с распиновкой D

Несколько дисплеев с разрешением 192х64:

Бренд Модель Чип Контраст
Wintek - Cascades WD-G1906G KS0108B От -7,5 до -10 вольт
Wintek – GEN WD-G1906G KS0108B От -7,5 до -10 вольт
Wintek WD-G1906G S6B0108A От -9,5 до -12 вольт
TECDIS Y19061 HD61202 От -7,5 до -10 вольт
Varitronix MGLS19264 HD61202 От -8,5 до -10,5 вольт

Контрастное напряжение отрицательно по отношению к «земле». Напряжение для подсветки – 4,7 вольт. Кроме того, она требует резистор на 10-12 ом, подключенный к +5V. Файл «ks0108_Manual_Config.h» должен быть настроен следующим образом:

define DISPLAY_WIDTH 192
define DISPLAY_HEIGHT 64

и

elif glcd_CHIP_COUNT == 3
define glcd_CHIP0 glcdCSEL1,LOW, glcdCSEL2,LOW
define glcd_CHIP1 glcdCSEL1,LOW, glcdCSEL2,HIGH
define glcd_CHIP2 glcdCSEL1,HIGH, glcdCSEL2,LOW

(Будем рады, если вы добавите к этим спискам другие модели дисплеев, протестированных для работы с библиотекой GLCD. Но если вы захотите добавить к этой таблице столбец для нового типа распиновки («E», «F», «G» и т.д.), то пожалуйста используйте буквы, идущие следующими по алфавиту и не переставляте буквы местами.)

KS0108 wiring.jpg

На этой картинке изображен самый распространенный тип распиновки – тип A. Ее можно использовать, чтобы проверить, как «даташит» вашего дисплея соответствует назначению контактов, перед тем, как начинать пайку. Особое внимание обратите на правильность подключения +5V и «земли».

Подключение внешних устройств

Большинству GLCD-панелей требуются внешний подстроечный потенциометр (для настройки контраста) и обычный резистор (чтобы ограничивать напряжение для подсветки). Схема соединения и список требуемых компонентов обычно указывается в «даташите» к GLCD-панели. Чтобы упростить подключение, можно использовать, к примеру, маленькую макетную плату с гребешком контактов и подключить ее к 5V, «земле» и Reset, тем самым создав соединение между GLCD-панелью и Arduino. Подробнее смотрите на картинке выше.

Примечание насчет контрастного потенциометра.

Обратите особое внимание на то, как подключен контрастный потенциометр. На модулях с ks0108 от подключается не так, как на обычных LCD-дисплеях типа hd44780. На них ножки контрастного потенциометра подключаются, как правило, к +5V и GND. Но на модулях с ks0108 этот потенциометр (как правило, номиналом в пределах 10-20 кОм) используется, чтобы создать варьирующееся отрицательное напряжение от Vee к GND и тем самым питать входной сигнал на Vo. Для этого одну ножку потенциометра нужно подсоединить к «земле» (т.е. к GND), а другую – к Vee (т.е. к выходному контакту с отрицательным напряжением), благодаря чему движок (средний контакт потенциометра) получит изменямое напряжение, питающее контакт Vo, управляющий контрастом GLCD-дисплея.

Изменения в назначении контактов для Arduino

Чипу ks0108 нужно много контактов. Помимо линий, отвечающих за питание, ему требуется 8 контактов для передачи информации и 5 контактов для передачи команд. В идеале командные контакты должны быть на одном порту, а информационные – на другом. Впрочем, на стандартной Arduino реализовать это не так-то просто.

Однако в 3-ей версии библиотеки GLCD (т.е. GLCDv3) процесс назначения контактов стал гибче – теперь любую команду библиотеки и любой информационный контакт можно подключить к любому контакту Arduino. Если информационные контакты будут разведены по разным портам, то код будет работать слегка медленнее, но в большинстве случаев это не так уж важно. Чтобы поменять назначение контактов, вам нужно отредактировать соответствующий конфигурационный файл, расположенный по адресу «glcd/config» (если используете Arduino на базе m328, то файл называется ks0108.h). Найдите секцию, которая начинается следующим образом:

 /********************************************************/
 /* Configuration for assigning LCD bits to Arduino Pins */
 /********************************************************/

Это переводится как «Назначение контактов LCD для контактов Arduino». Ниже указано, какие контакты будут отвечать за передачу информации, а какие-за передачу команд:

         Name                Arduino pin number 
 #define glcdData0Pin        8
 #define glcdData1Pin        9
 #define glcdData2Pin        10
 #define glcdData3Pin        11
 #define glcdData4Pin        4
 #define glcdData5Pin        5
 #define glcdData6Pin        6
 #define glcdData7Pin        7
 #define glcdCSEL1           14 (Analog pin 0)
 #define glcdCSEL2           15 (Analog pin 1) 
 #define glcdRW              16 (Analog pin 2) 
 #define glcdDI              17 (Analog pin 3) 
 #define glcdEN              18 (Analog pin 4)

Все эти контакты и команды можно назначить для любого контакта Arduino (если только они не используются для чего-то еще). В процессоре m328 контакты распределены по портам следующим образом:

  • Порт B – c 8 по 13
  • Порт C – с 14 по 19 (аналоговые контакты)
  • Порт D – с 0 по 7 (обратите внимание, что 0-ой и 1-ый контакты используются для аппаратного последовательного порта)

Хотя любой контакт Arduino можно использовать для любого информационного контакта GLCD, если контакты Arduino находятся в одном порте и в последовательном порядке, то работают чуть более эффективно.

Назначение контактов, указанное в конфигурационном файле по умолчанию, как раз оптимизировано под эту эффективность.

Впрочем, в ряде случаев переназначение контактов все же имеет смысл. Так, для glcdEN можно назначить не 18-ый, а какой-то другой контакт, чтобы на m328-плате можно было задействовать интерфейс I2C.

Решение проблем

На дисплее не видны пиксели:

  • Проверьте подключения +5V и GND между Arduino и GLCD-панелью
  • Проверьте, правильно ли подключены контакты для передачи информации и команд
  • Проверьте напряжение (оно должно быть, как правило, между -3 и -4 вольтами) на контакте, при помощи которого меняется контраст на GLCD-панели. Когда скетч будет запущен, попробуйте постепенно настраивать диапазон контрастного потенциометра. Некоторые дисплеи очень чувствительны к этой настройке.
  • Проверьте, хорошо ли скомпилировался скетч и загрузился ли он на Arduino

Левая и правая стороны изображения инвертированы.

  • Поменяйте местами провода CSEL1 и CSEL2 (или поменяйте местами эти контакты в конфигурационном файле)

Искаженное изображение.

  • Проверьте, правильно ли подключены контакты для передачи информации и команд, а также соответствуют ли эти подключения настройкам в конфигурационном файле.

Не загружается скетч.

  • Попробуйте запустить GLCD-панель, но ничего не подключайте к ее Reset-линии
  • Попробуйте подключить Reset-линию GLCD-дисплея к Vсс
  • Включите Reset-функционал библиотеки

Примечание насчет Reset-контакта у GLCD-панели.

Если подключить GLCD-панель к Reset-линии Arduino, это может вызвать конфликт между Reset-контактом GLCD-панели и цепью Arduino, отвечающей за автосброс. Дело в том, что эта цепь довольно нестабильна. В результате у большинства GLCD-панелей при запуске будет происходить автоматический сброс, и в таком случае Reset-линию GLCD-панели лучше оставить неподключенной. Все остальные GLCD-панели будут работать нормально, если подключить их Reset-линию к Vcc. Кроме того, есть и третья группа – небольшой процент GLCD-панелей, которым все же нужен импульс сброса. В этом случае нужно воспользоваться библиотекой, и с ее помощью назначить для сброса другой контакт Arduino. Для этого отредактируйте конфигурационный файл для контактов и уберите комментирующие слеши у этой строчки:

// Reset Bit - uncomment the next line if reset is connected to an output pin //#define glcdRES 19 // Reset Bit

Затем подключите контакт Aruino, указанный как glcdRES, к Reset-контакту GLCD-панели.

Если у вас по-прежнему какие-то проблемы, об их решении можно спросить на форумах (ссылки см. ниже).

Использование и модификация библиотек

Об установке библиотек читайте тут, о модификации – тут.

Создание собственных иконок и шрифтов

Есть бесплатная программа на Java, позволяющая конвертировать любой из PC-шрифтов в формат, используемый библиотекой GLCD. Она называется FontCreator2 и создает заголовочный файл со шрифтом, который при подключении к скетчу сохраняется в программной памяти. Более подробно читайте в HTML-документации. Дополнительные шрифты можно найти в интернете.

Добавление изображений в прошивку

Скетч на Processing, идущий в комплекте с библиотекой, предназначен для конвертации растровых файлов в изображения, которые библиотека GLCD может отображать на GLCD-панели. Более подробно читайте в документации, которая идет в комплекте с библиотекой.

Загрузки

Вопросы, комментарии и предложения

Примеры

  • BigNums - Использование текстовых областей
  • clockFace - Аналоговые часы
  • GLCDdemo - Пример работы нескольких графических функций
  • GLCDdiags - Тест памяти и интерфейса GLCD-модуля
  • HelloWorld - «Привет, мир!»
  • ks0108example - Пример работы нескольких графических функций (версия для ks0108)
  • life - Игра «Жизнь»
  • Rocket - Игра «Ракета»
  • Serial2GLCD - Показ символов, введенных через монитор порта
  • GLCD BigDemo - Большое демо

См.также

Внешние ссылки

  1. playground.arduino.cc - GLCDks0108