Подключение 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

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

Alex_EXE | 22.04.2016 | STM32 |

18 комментариев на « Подключение 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 #

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

  11. timer пишет 27.10.2017 в 15:56 #

    Проверенно с дисплейчиком от китайского мп3 за 100р. Работает!

  12. Alex_EXE пишет 27.10.2017 в 20:16 #

    Можете фотографию выслать, прикрепляю к комментарию. Интересно посмотреть.

  13. clo7 пишет 22.12.2017 в 23:07 #

    сперва хотелось бы поблагодарить автора стати. действительно трудно найти инфо про эти дисплеи. но я не понял про выводы V0 V1 V2 V3 V4. на них ненужно подавать напряжение?

  14. Alex_EXE пишет 22.12.2017 в 23:49 #

    Всё согласно схеме. Дополнительно нечего подавать не нужно, на этих выводах, вроде, располагается встроенный бустер, поэтому конденсаторы нужно ставить с запасом по напряжению.
    Обвязка у подобных дисплеев примерно одинакова, но выводы могут располагаться по другому, название выводов одинаковы. Схема включения может немного различаться.
    Поэтому на выбранный дисплей в любом случае нужен даташит. Схемы включения всех дисплеев брал из официальной документации именно на конкретные марки.
    В статье видны 4 разные дисплея, у 3-х (на зеленой платке) схема включения и распиновка оказалась одинаковой и она отличается от GG1286456FFWJ-A-R.

  15. clo7 пишет 23.12.2017 в 00:07 #

    спасибо! очень помог

  16. Александр Д пишет 25.02.2018 в 18:34 #

    Добрый день!
    В моем устройстве был использован довольно редкий дисплейный модуль COG с матрицей 132×64 на контроллере Solomon SSD1815BZ. К сожалению ничего похожего в сети сейчас не обнаруживается. Максимально близкое это 132×64 на контроллере ST7567, где-то прочитал что у них система команд одинаковая. Однако по распиновке не у всех контактов есть прямое соответствие. Можете ли как-то помочь по данному вопросу? Т.е. имеется ли возможность один заменить другим? И что будет если установить дисплей на контроллере SSD1815BZ но с матрицей 128×64 — будет ли работать вообще?

  17. Alex_EXE пишет 27.02.2018 в 08:48 #

    Данные дисплеи бывают с разными интерфейсами SPI, i2c, 8080. Некоторые поддерживают несколько, выбор производится соответствующими выводами.
    Для дисплеев с интересом 8080: идут 8 линий данных и 5 линий управления, у которых в разных источниках разные названия, даже у меня на сайте на принципиальной схеме название одно, а на pcb, которая была разработана много ранее, другое (использовались разные даташиты на разные дисплеи, а управление одинаковое); порядок у меня совпадает, ищите аналогию использую эти две картинки.
    CS — выбор кристалла
    Reset (RST) — сброс
    RS — выбор команд/данных
    E (A0) — разрешение
    RW/RD — запись/чтение
    При подключении подобных дисплеев так же нужно обратить внимание на линии подключения конденсаторного умножителя: CAP+- V1… Вот здесь нужен даташит. Но можно попробовать подобрать по аналогии, некоторая зависимость по названиям просматривается, но у таких дисплеев бывает несколько схем включения умножительных конденсаторов.
    По разрешению:
    отличие разрешения и смещение — не страшно, его можно настроить или во время инициализации (если есть соответствующие команды) или компенсировать при выводе данных на дисплей.
    В инициализации так же есть свои нюансы:
    Выбор напряжения умножителя и схемы включения конденсаторов умножителя, контрастность, начало вывода (угол), ориентация горизонтальная/вертикальная, развертка (чересстрочная, последовательная…)… Это уже будет зависеть от типа дисплея. Здесь критические могут быть только первые пункты, остальные можно будет без документации подобрать уже во время работы.

  18. Александр Д пишет 27.02.2018 в 18:54 #

    Спасибо за ответ!
    Вообще ситуация такова, что сильно ограничены в возможности внесения каких-либо программных изменений кода. Условно имеем «черный ящик» с 18-пиновым выходом и анод/катод для подсветки. В этот разъем был включен дисплей, который надо заменить. Даташиты, распиновка есть. На рынке нет ничего похожего… Максимально подходящий дисплей из доступных на ST6757 практически с аналогичной распиновкой (порядок пинов тот же, но обратный). Бустера (умножителя) на новом дисплее нет. Вопросы по соответствию контактов 1..5 SSD1815BZ и 10..12 ST6757 соответственно. Можно ли просто тупо включить другой дисплей в разъем через переходник и что подавать на контакты 10-12? Если у вас есть время и возможность помочь советом, напишите на email…

    Дисплей на SSD1815BZ
    1.V6 (This pin is the most negative LCD driving voltage)
    2.V5
    3.V4
    4.V3
    5.V2 (V2-V5 — These are the LCD driving voltage levels)
    6.C2P
    7.C2N
    8.C1N
    9.C1P
    10.C3N
    11.VEE
    12.VSS
    13.VDD
    14.SDA
    15.SCK
    16.D/C
    17./RES
    18./CS
    K
    A

    Дисплей на ST6757
    1.A
    2.K
    3./CS
    4./RES
    5. A0 (D/S)
    6.SCK
    7.SDA
    8.VDD
    9.VSS
    10.V0 (Positive LCD driver supply voltage )
    11.XV0 (Negative LCD driver supply voltage )
    12.VG (LCD driving voltage for segments)

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

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