Подключение COG LCD дисплея на ST7565R контроллере

Одним из популярных типов графических дисплеев являются COG (Chip On Glass — кристалл на стекле) дисплеи. Из-за своих компактных размеров они широко используются в портативных устройствах, имеют небольшое энергопотребление, невысокую цену (если знать, где покупать). Из недостатков — наличие некоторого количество внешнего обвяза и у большинства мелкий шаг выводов, что неудобства доставит только для начинающих, для портативных устройств это будет даже плюсом.

Подключения дисплея на st7565r к stm32

Подключения дисплея на st7565r к stm32

В принципе к таким дисплеям можно отнести монохромные дисплеи от сотовых телефонов, некоторые из которых рассматривались уже ранее — nokia 3310, 1100, 2760. Но эти дисплеи изготавливались для сотовых телефонов и из этого вытекают некоторые проблемы, из-за чего для изделий массового производства они являются не лучшим вариантом.

Более оптимальным вариантом для серийных устройств будут универсальные серийные дисплеи, к которым можно отнести, например WinStar’овские индикаторы. В статье будет рассмотрен ещё один пример таких индикаторов — ряд графических монохромных COG дисплеев на контроллере ST7565R. А подключать его будем к stm32f103. В работе будет использована библиотека Standard Peripheral Library.

Точнее в примере буду использовать ранее представленную отладочную плату stm32f103c8t6. В качестве главного гостя статьи выступит индикатор на контроллере ST7565R — GS-GG1286456FFWJ-A-R , купленный в местной промэлектронике пару лет назад.

COG LCD GS-GG1286456FFWJ-A-R на ST7565R

COG LCD GS-GG1286456FFWJ-A-R на ST7565R

Для начала поподробнее рассмотрим их плюсы и минусы.

Плюсы:

  • Компактные. Дисплей при видимой области 47,33х23,65мм имеет размеры 58х39,5х5,1мм + шлейф и провод подсветки.
  • Размеры дисплея GG1286456FFWJ-A-R (из datasheet)

    Размеры дисплея GG1286456FFWJ-A-R (из datasheet)

  • Малое энергопотребление. Замеренный ток рабочего дисплея без подсветки 250мкА.
  • Низкая оптовая! цена.
  • Некоторые дисплеи имеют несколько типов интерфейсов, как параллельный, так и последовательный

Минусы:

  • Самый главный минус этих дисплеев, что их можно отнести к специализированным. Главным их потребителем выступают серийные производители. Среди радиолюбителей они не очень распространены. Из этого всего вытекает, что обычным магазинам невыгодно держать такие позиции и их у них в продаже или нет, или т.к. это редкая позиция — у неё высокая цена, в то время, как себестоимость низкая. Т.е. в наших магазинах это редкая и дорогая позиция в розничных отделах, но их можно купить в Китае!
  • За компактность приходится платить некоторым внешним количеством компонентов. В качестве обвязки выступает внешний умножитель напряжения на конденсаторах. Так же отмечаю, что при выборе конденсаторов для этого дисплея смотрите на максимальное их напряжение.
  • Почти у всех дисплеев разная распиновка, следовательно у них плохая взаимозаменяемость.
  • Нет крепежных отверстий.

Плюс/минус:

  • Мелкий шаг. Обычно такие дисплеи имеют гибкий PCB шлейф с шагом 0.5мм. Так же можно встретить шаг 1мм и ещё бывают выводные дисплеи с шагом 1,27мм. Для новичка это минус, для человека с опытом или в серийном устройстве это не имеет значения или плюс.

Так же отмечу, что большое распространение получили модули, которые содержат COG или OLED дисплей установленный на печатную плату с необходимой обвязкой, бонусом идут крепежные отверстия. На плату остается только подать питание и подключить линии данных и управления.

Другие варианты дисплеев на контроллере ST7565R Другие варианты дисплеев на контроллере ST7565R Другие варианты дисплеев на контроллере ST7565R

Другие варианты дисплеев на контроллере ST7565R

Дисплеи имеют разную площадь в том числе площадь подсветки, а токоограничивающий резистор не изменялся, поэтому чем больше дисплей на снимках тем он тусклее, выдержка одинаковая.

Подключение дисплея GG1286456FFWJ-A-R

Большинство дисплеев имеют несколько вариантов интерфейсов подключения: параллельный 8080, 6800, различные последовательные. В примере будет рассмотрен вариант 8080, т.е. имеем 8 параллельных линий данных DB0-DB7 и 5 линий управления:
CS — выбор дисплея,
reset — сброс,
A0 или RS — выбор данных или команд,
RW — запись данных в дисплей или чтение
и RD (E) — сигнал по которому производится операция чтения/записи данных в дисплей. При необходимости некоторыми линиями данных можно пренебречь: CS, RW и крайнем случае сбросом; если только в проекте используется всего один дисплей и он один сидит на линиях управления, данные из дисплея не считываются, и во время работы не нужен аппаратный сброс дисплея.

Дисплей питается от 3.3В, как сам, так и его светодиодная подсветка. Потребляемый ток около 250мкА со скачками до 500мкА, что достаточно экономично. Дисплей будем подключать к микроконтроллеру stm32f103c8t6, который питается то же от 3.3В, значит ни каких согласующих элементов не нужно.

Схема

Схема

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

Печатка

Печатка

Печатная плата выполнена на односторонним листе стеклотекстолита размерами 50,5х30,5мм. Из компонентов один резистор перемычка (0 Ом) 1206 и 9 конденсаторов 0805 по 1мкФ 25В. Разъём FPC 0.5mm 30P. Контроллер и его блокировочные конденсаторы по 0,1мкФ находятся на отладочной плате.

Организация дисплея

Дисплей имеет разрешение 128х64 точки, но, как и большинство монохромных дисплеев, имеет постраничную организацию.

Организация дисплея

Организация дисплея

Экран разбит на 8 страниц высотой по 8 точек (строк), которые образуют байт. Прямое обращение к произвольной точке невозможно, обращение производиться постранично.

Изменить 1 пиксель

То есть для того, что бы закрасить один пиксель по координате X=1 Y=5, нам будет нужно записать первый столбец нулевой страницы целиком X=1 Y=0-7. Для этого нужно или хранить видео буфер в контроллере; или перед записью считать блок, затем его модифицировать и только потом записать его; или хорошо представлять структуру экрана и учитывать её при выводе надписей, графиков, рисунков… В самом простом — текстовом — варианте работы с такими дисплеями, достаточно использовать шрифт кратный по высоте 8 точкам (1 странице) и выводить его кратно 8 точкам: 0,7,15…

Прошивка/библиотека

Библиотека для работы с дисплеями на контроллере ST7565R по параллельному интерфейсу 8080 в текстовом режиме была написана на основе даташита и исходника идущего с подобным дисплеем от другого производителя. Команды и шрифты были взяты и адаптированы из ранних моих проектов по дисплеям от nokia3310 и 1100. Библиотека подходит для дисплеев на основе контроллера ST7565R. При её использование нужно учитывать особенности каждого отдельно взятого дисплея, например, то, какие линии управления у дисплея инвертированы, а какие нет. Так же она написана под
семейство контроллеров stm32f1xx, при использовании её на других контроллерах нужно изменить функцию инициализации выводов и define’ы отвечающие за управления выводами.

Библиотека содержит следующий функции:

lcd_init_pins(); Инициализация выводов дисплея
lcd_delay(unsigned long p); Задержка
lcd_write_data(unsigned char dat); отправка данных на дисплей
lcd_write_cmd(unsigned char cmd); Отправка команд
lcd_Initial_Dispay_Line(unsigned char line); Адрес первой строки дисплея
lcd_Set_Page_Address(unsigned char add); Установка строки (заменена lcd_gotoxy)
lcd_Set_Column_Address(unsigned char add); Установка столбца (заменена lcd_gotoxy)
lcd_Power_Control(unsigned char vol); Управление питанием
lcd_Regulor_Resistor_Select(unsigned char r);
lcd_Set_Contrast_Control_Register(unsigned char mod); Установка контрастности дисплея
lcd_init(void); Инициализация дисплея
lcd_clear(void); Очистка дисплея

Далее идут команды работы с текстом на дисплее. Напоминаю, что дисплей имеет разрешение 128х64, размер символа 6х8, следовательно на дисплей помещается 8 строк по 21 символу.

lcd_gotoxy(unsigned char x,unsigned char y); Установка текстового курсора
x — столбец, y — строка (страница)
unsigned char lcd_symbol_decode(unsigned char c); Декодирование сжатой ASCII таблицы
c — код символа в ASCII
lcd_putch(unsigned char c); Вывод символа на дисплей
c — символ
lcd_putch_inv(unsigned char c); Вывод инвертированного (закраска) символа
c — символ
lcd_puts(char *s); Вывод строки
s — строка
lcd_puts_inv(char *s); Вывод инвертированной строки
s — строка
void lcd_test(void); Тестовое заполнение дисплея подряд идущим символами
lcd_putch_big_prototype(unsigned char col,unsigned char row,char c, unsigned char inv); Вывод символов х2 х4 х8 размера
col — ширина
row — высота
c — символ
inv — инверсия 0 — выкл, 1 -вкл
lcd_putch_big(char c); Вывод символа размера х2
c — символ
lcd_puts_big(char *s); Вывод строки х2
s — строка
lcd_puts_int2(unsigned char v); Вывод числа из двух цифр (простая функция)
v — число от 0 до 99
lcd_puts_int(int v); Вывод числа.
v — число от -32768 до 32767
lcd_puts_long(unsigned long v); Вывод длинного 4 Байтового числа (внимание! функция занимает много памяти)
v — число от -2147483648 до 2147483647

Инициализация выводов дисплея производиться путём настройки следующих define’ов в файле ST7565R.h , для stm32f1xx контроллеров.

#define INVERT_MODE				1						//	перевернуть дисплей

#define lcd_port_data			GPIOB					//	порт линий данных
#define lcd_port_data_rcc		RCC_APB2Periph_GPIOB	//	тактирование порта линий данных
#define lcd_port_data_offest	0				//	смещение, если начальный вывод не 0
#define lcd_pins_data			GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
					//	линии данных, должны идти подряд по возрастающей

#define lcd_port_control		GPIOB					//	порт линий команд
#define lcd_port_control_rcc	RCC_APB2Periph_GPIOB	//	тактирование порта линий команд
#define lcd_pin_RS				GPIO_Pin_14		//	линия выбора команды/данные
#define lcd_pin_RW_WR			GPIO_Pin_13		//	линия чтение/запись
#define lcd_pin_E_RD			GPIO_Pin_12		//	линия enable, разрешения
#define lcd_pin_CS1				GPIO_Pin_11		//	линия выбора кристала/дисплея
#define lcd_pin_RST				GPIO_Pin_15		//	линия сброса

Если семейства контроллера отличается, то нужно будет подправить настройку выводов МК функция в файле ST7565R.c : lcd_init_pins, функции вывода данных и команд — lcd_write_data, lcd_write_cmd , а так же define управляющих линий в ST7565R.h .

Пример программы, результат работы которой представлен на первых фотографиях.

init();				//	инициализация контроллера
GPIO_WriteBit(GPIOC,GPIO_Pin_13,Bit_SET);	//	включить светодиод
delay_ms(100); 	//	задержка 100 мс
lcd_init_pins();	//	инициализация выводв LCD
delay_ms(100);
lcd_init();		//	инициализация LCD
delay_ms(100);
GPIO_WriteBit(GPIOC,GPIO_Pin_13,Bit_RESET);	//	выключить светодиод
lcd_clear();		//	очистка дисплея
lcd_gotoxy(0,0);	//	установить курсора по координатам x=0 , y=0 
lcd_puts("COG");	//	вывод строки
lcd_gotoxy(3,0);	//	установить курсора по координатам x=3 , y=0 
lcd_puts_big("LCD128x64");	//	вывод строки шрифтом x2
lcd_gotoxy(0,2);	//	установить курсора по координатам x=0 , y=2 
lcd_puts("GS-GG1286456FFWJ-A-R");
lcd_gotoxy(0,3);
lcd_puts("controller ST7565R on");
lcd_gotoxy(0,4);
lcd_puts("mc stm32f103c8t6");
lcd_gotoxy(0,5);
lcd_puts_big("Alex_EXE");
lcd_gotoxy(10,7);
lcd_puts("alex-exe.ru");

Думаю, нечего дополнительно комментировать не нужно, в коде комментарии достаточны.

Скачать библиотеку ST7565R
Скачать проект под CooCox
Скачать печатку в sprint layout 5

Статья обновлена 23.04.2016

10 комментариев »

Alex_EXE | 22.04.2016 | STM32 | 2 512 просмотров

10 комментариев на « Подключение COG LCD дисплея на ST7565R контроллере»

  1. Юрий пишет 22.04.2016 в 13:00 #

    Добрый день!
    Периодически посещаю ваш сайт и слежу за новыми обновлениями, т.к. сам начинал с pic-ов и в данный момент работаю с stm32.
    Очередная хорошая статья! Жаль, что чуть раньше не вышла)
    Пару месяцев назад тоже пришлось разбираться с контроллером ST7565 на экране w012864C2-TFH от WINSTAR и писать свою библиотеку под русские шрифты разной величины и стиля (подключение по spi).
    Очень помогла вот эта статья:
    http://edeca.net/wp/electronics/the-st7565-display-controller/
    и программа для генерации шрифтов на странице автора.
    Возможно вам тоже будет интересно.

    Удачи и успеха во всем.

  2. Alex_EXE пишет 22.04.2016 в 14:17 #

    К сожалению, что-то написание этой статьи у меня затянулось, начал её ещё в декабре прошлого года.
    Хотел всё её написать более развёрнутой (программную часть), а в итоге вчера дописал до необходимого минимума и выложил. Может быть ближайшее время немного дополню её.
    С данными дисплеями с удовольствием работаю уже более 2-х лет.

  3. Юрий пишет 22.04.2016 в 15:19 #

    В своих статьях Вы выкладываете только основу кода, для запуска и понимания работы модуля. Интересно, как у Вас организован вывод русских символов 🙂
    Данный вопрос возник еще при использовании библиотеки на 1602 дисплей, брал ее за образец для своего проекта.
    Я пользуюсь Keil и для меня в обоих случаях сложность была связана с соотнесением кода русской буквы в таблице дисплея с кодом в отладчике)
    Интересно, какой средой разработки Вы пользуетесь и какое решение использовали =)

    С Уважением, Юрий

  4. Alex_EXE пишет 22.04.2016 в 19:14 #

    Сейчас использую CooCox, у него проблем с кириллицей не наблюдается. В Keil по началу библиотеку работы с дисплеем и все сообщения на русском писал в notepad++. Потом как то случайно, файл перевёлся, кажется, в юникод, из под него с кириллицей в Keil стало возможно работать. Точнее объяснить не смогу, т.к. уже забыл, по моему, на этот вопрос не раз давал ответ в комментариях к ранее описанным символьным дисплеям под stm32.
    Когда закончил изучение и перешел к проекту, над которым до сих пор работаю, то сразу оценил, что выйду за ограничение в 32КБ и перешел на другую IDE.

  5. Alex_EXE пишет 22.04.2016 в 23:33 #

    Статью слегка дополнил.

  6. Владимир пишет 20.10.2016 в 20:15 #

    А нет ли у вас случайно конвертера изображений 128*64,чтобы на выходе получить массив,как в вашей программе Image generator 84*48 дисплея от нокиа.

  7. Alex_EXE пишет 20.10.2016 в 20:27 #

    Как промню, у меня на сайте есть 2 программы image generator. Первая генерирует для нокии т.е. 84х48, это первая версия программы и та статья иметь пометку устарела. Вторая версия генерирует до 320х240.

  8. Серый пишет 03.02.2017 в 17:48 #

    вряд ли есть что-то из паябельного дешевле дисплея от nokia 1202
    по цене 70! р.

  9. Alex_EXE пишет 03.02.2017 в 23:43 #

    Статья не об этом. Читайте внимательно предисловие.
    Если в своих конструкциях хотите использовать — то используйте дисплеи от сотовых, сам когда то так делал, кстати по дисплеям от нокии у меня есть несколько статей. Я же данный дисплей применяю в серийном устройстве, ну и в своих конструкциях перешел на него то же.

  10. Алексей пишет 19.02.2017 в 00:40 #

    Спасибо за инфу, дисплейчик давно был куплен и на днях попался на глаза, буду пробовать запускать.

Комментарии RSS

Оставьте отзыв