Уже пару раз всплывал вопрос, про работу с цветными дисплеями. Не могу сказать, что испытываю большой интерес к ним, поэтому откладывал до тех пор, пока не появится соответствующая задача. Собственно время пришло, поэтому делюсь впечатлениями.
Начнем сразу с печальки, мой дисплейчик называется UG-6028GDEBF02, мне он достался по работе и я не представляю, где его можно купить и достать, поэтому не спрашивайте. Производитель WiseChip, можете у них запросить напрямую. Какой смысл тогда о нем писать? Общие принципы одни и те же, поэтому приладить какой то свой дисплей не составит труда.
Из интересного: диагональ 1.7, количество цветов 262к, разрешение 160×128 точек.
Чем не порадовал этот дисплей, это тем, что у него болтается гибкий шлейф, поэтому не имея 35-Pin ZIF разъема, не представляю как еще его можно подключить. Учитывая то, что такие разъемы не продаются на каждом углу, да и шаг 0.5мм, то дисплей никак нельзя назвать радиолюбительским.
Но могу сказать на этом минусы заканчиваются. Сам по себе дисплейчик легкий и тонкий. От какой то определеннной тактовой частоты микроконтроллера, дисплей никак не зависит. Отослал ему данные и они будут на дисплее, пока их не затрешь.
Про саму технологию OLED очень много написано в гугле. Основные моменты: большой угол обзора, быстрый отклик, отсутствие подсветки, хорошая контрастность, малое токопотребление. Из минусов — не большой срок работы (выцветание).
Субъективное мнение, оставшееся от дисплея — контрастность очень хорошая, там где черное, там действительно черное, хорошая яркость, нет бликов. К зеленому и синему нет претензий, а вот «ядовитый» красный мне так и не удалось получить. Красный мог бы быть поярче. BMP я не выводил, поэтому за качество картинки не могу сказать, а вот надписи и линии полным ходом, впечателение осталось очень приятное, для этого он годится.
Подключиться можно по нескольким интерфейсам.
Я использовал параллельный, по той причине, что переносил либу с другой платформы. Писал либу сам, но с оглядкой, некоторые вещи вроде таблицы символов, я оставил в неизменном виде.
Инициализация есть в даташите, все довольно прозрачно.
Работать с дисплеем тоже довольно просто. Ножкой RS выбираем, что это будет команда или данные, выставляем 8 бит данных на ножках D17-D10 и подаем синхру ногой WRB. Все данные ушли.
Для того, чтобы закрасить один пиксель, нужно запихнуть в регистр DDRAM 18 бит. Для режима 65к цветов, каждый цвет кодируется 6 битами, поэтому чтобы закрасить 1 пиксель, потребуется две посылки по 8 бит, по хитрой схеме
Заливать каждый пиксель отдельно геморно, поэтому присутствуют регистры MX1, MY1, MX2, MY2 которыми задается заливаемая область.
Направление заливки справа налево, сверху вниз меняется как угодно. Стартовая точка указывается в координатах 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, просто правьте дефайны под свои ноги.
Либа
К сожалению мне так и не удалось нормально сфоткать, как бы не пытался получилось даже не близко к реальному.
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
http://avr-start.ru/wp-content/uploads/2016/02/font.7z
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