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

Начнем сразу с печальки, мой дисплейчик называется UG-6028GDEBF02, мне он достался по работе и я не представляю, где его можно купить и достать, поэтому не спрашивайте. Производитель WiseChip, можете у них запросить напрямую. Какой смысл тогда о нем писать? Общие принципы одни и те же, поэтому приладить какой то свой дисплей не составит труда.

Из интересного: диагональ 1.7, количество цветов 262к, разрешение 160×128 точек.

Чем не порадовал этот дисплей, это тем, что у него болтается гибкий шлейф, поэтому не имея 35-Pin ZIF разъема, не представляю как еще его можно подключить. Учитывая то, что такие разъемы не продаются на каждом углу, да и шаг 0.5мм, то дисплей никак нельзя назвать радиолюбительским.

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

Про саму технологию OLED очень много написано в гугле. Основные моменты: большой угол обзора, быстрый отклик, отсутствие подсветки, хорошая контрастность, малое токопотребление. Из минусов — не большой срок работы (выцветание).

Субъективное мнение, оставшееся от дисплея — контрастность очень хорошая, там где черное, там действительно черное, хорошая яркость, нет бликов. К зеленому и синему нет претензий, а вот «ядовитый» красный мне так и не удалось получить. Красный мог бы быть поярче. BMP я не выводил, поэтому за качество картинки не могу сказать, а вот надписи и линии полным ходом, впечателение осталось очень приятное, для этого он годится.

Подключиться можно по нескольким интерфейсам.
ug60_sch

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

Инициализация есть в даташите, все довольно прозрачно.
initial

Работать с дисплеем тоже довольно просто. Ножкой RS выбираем, что это будет команда или данные, выставляем 8 бит данных на ножках D17-D10 и подаем синхру ногой WRB. Все данные ушли.

Для того, чтобы закрасить один пиксель, нужно запихнуть в регистр DDRAM 18 бит. Для режима 65к цветов, каждый цвет кодируется 6 битами, поэтому чтобы закрасить 1 пиксель, потребуется две посылки по 8 бит, по хитрой схеме
register

Заливать каждый пиксель отдельно геморно, поэтому присутствуют регистры MX1, MY1, MX2, MY2 которыми задается заливаемая область.
mem_area

Направление заливки справа налево, сверху вниз меняется как угодно. Стартовая точка указывается в координатах MEMORY_ACCESSPOINTER_X и MEMORY_ACCESSPOINTER_Y. Итого, указали область, стартовую точку, а дальше просто шлете цвета в регистр DDRAM, количество пикселей высчитываете сами. Если пошлете больше нужного, он их просто не выведет. В общем, что касается низкого уровня, то вроде все.

А вот следующий момент меня немного смутил, дело в том, что таблица кодировки для дисплея сделана в win1251, про которую keil ничего не знает. Я не придумал ничего лучше, чем переключиться в настройках кейла на utf и сделать функцию, которая переводит из UTF-8 в WIN1251. Также для вывода кирилицы сделал используется отдельная функция. Мне не кажется это решение хорошим, но лучше ничего в голову не пришло.

Теперь к самой библиотеке, если кому то удастся найти этот дисплей 🙂

void lcd_putchar(uint8_t ascii_code, uint8_t x0, uint8_t y0, uint8_t gamma); //вывод одного символа
void lcd_puts(uint8_t *string_ptr, uint8_t x0, uint8_t y0, uint8_t gamma); //вывод строки
void draw_line( uint8_t x, uint8_t y0, uint8_t y1, uint8_t gamma); //вывод линии/точки
void lcd_writeInt(uint16_t int_number, uint8_t x0, uint8_t y0, uint8_t gamma); //вывод целого числа
void clear_space (uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, uint8_t gamma); //очистка места
void lcd_putrus(uint8_t *rustr, uint8_t x0, uint8_t y0, uint8_t gamma); //вывод текста с кирилицей

Думаю объяснять особо нечего, x0, y0 — начальная точка x1, y1 — конечная. Гамма задана дефайнами, например GAMMA_BLUE_BLACK синий текст на черном фоне. Точки рисуются линиями, размером 1 пиксел. Настройки ножек камня находятся внутри USER DEFINED LCD section, просто правьте дефайны под свои ноги.

Либа

К сожалению мне так и не удалось нормально сфоткать, как бы не пытался получилось даже не близко к реальному.
oled

13 комментариев: Библиотека для цветного OLED дисплея

  • hi
    i need a firmware for ug6028 with ATMEGA64A in C language
    please help me

  • You can use library from article. Just replace platform specific defines, for example GPIO_SetBits(RS_PORT, RS_PIN) you can replace with PORTB.0 = 1 or any another pin. GPIO_ResetBits(RS_PORT, RS_PIN) replace PORTB.0 = 0; Also replace lcd_pin_init with your Atmega output ports config.

  • hi
    ok thats right
    i can replace but kiel can not built target
    cannot open source input file «font.h»: no such file or directory
    please email this file to me (font.h)
    #include «font.h» in file lcd.c
    thanks

  • thanks very much
    is mode of lcd 68xx series MCU or 80xx series ?
    ps=1 & CPU=1 is ok?

    please upload shematic file (just lcd shematic )for me to download
    i want know that mode of lcd and pin of control of lcd and drive of VDDH pin of lcd

  • i use 80xx interface, just connect pin to gnd. ps=1 parallel interface. VDDH — 12V.

  • hi
    are you sure your firmware is work?
    pin CSB is not use but ug-6028 pdf,s write that this pin should conect to 0 and 1 logic according to write timing
    i cannot turn on the my ug-6028
    please help me
    i want connect ug-6028 to lpc2368
    i change my micro
    thanks a lot

  • i send my firmware to your mail
    please check your mail and help me to write the firmware,s oled

  • RDB pin =???
    RESETB=???

  • one question
    when VDD=3.3v VDDIO=3.3v VDDH=14v is connect to all pad of OLED and , is turn on the OLED??

    Vsync=? HSYNC=? DOTCLK=? Enable=? Vsynco=??

  • hi
    i succesfull for turn on ug-6028 and drive this madule
    thanks very much

  • LCD_ASCII_2 ругается. Пытаюсь перенести на ST7789 128*160 англ. язык выводит, а русский ни в какую не хочет. Хотя есть в шрифтах русские буквы. Если не трудно сделайте статью по подключению, выводу русских и англ букв, и создание своего знакогенератора и шрифтов для ST7789

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Последние комментарии
  • Загрузка...
Счетчик
Яндекс.Метрика