TFT LCD ILI9163C 128x128

Joiner
Offline
Зарегистрирован: 04.09.2014

Прочитал на форуме, что кто-то купил такой дисплейчик. Купил тоже. Дисплейчик понравился тем, что цветной, красивый, да и цена вкусная. Запустил тесты (правда не все пошли), и решил прикупить еще. Решил между делом исготовить себе настольные часики. Таковые у меня имеются уже. Они сделаны на модуле RTC D3231 и текстовом дисплее 16х2. Точность хода даже больше чем устраивает. Время установил в начале апреля, сейчас они ушли всего на 3 секунды.  Хочу сделать часики с таймером, секундомером, календариком и даже может быть с простеньким шедуллером.

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

А вот сам дисплейчик

Может у кого есть опыт, подскажите что почитать.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А что за дисплейчик? Название, ссылочку?

Joiner
Offline
Зарегистрирован: 04.09.2014

ЕвгенийП пишет:

А что за дисплейчик? Название, ссылочку?

http://www.ebay.com/itm/310876068105?_trksid=p2057872.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Joiner, Все команды и вообще весь интерфейс дисплея описаны в его (дисплея) дадашиите - http://www.orientdisplay.com/pdf/ILI9163C.pdf

Joiner
Offline
Зарегистрирован: 04.09.2014

ЕвгенийП пишет:

Joiner, Все команды и вообще весь интерфейс дисплея описаны в его (дисплея) дадашиите - http://www.orientdisplay.com/pdf/ILI9163C.pdf

Спасибо, но мне такой документ не осилить. Посмотрел, ни чего не понял. Мне бы описание библиотеки....

Joiner
Offline
Зарегистрирован: 04.09.2014

С библиотекой немного разобрался. Перевел свои часики с LCD 16х2 на ILI9163C. Часики стали намного красивее. На днях придут смд резисторы, разведу платку, все соединю.....и буду делать красиво.

Жаль, что по дисплею ни кто ни чего не знает......дисплейчик классный, придется разбираться в одиночку. Как попользовался, решил все свои LCD 16х2 просто выбросить.

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Joiner, не выбрасывай! 16х2 - вещь нужная определенно!

По библиотеке - зайди в папку либы, там открой файл .h, в инициализации класса будет список функций с параметрами...а дальше-знание англа!

Joiner
Offline
Зарегистрирован: 04.09.2014

Yarik.Yar пишет:

Joiner, не выбрасывай! 16х2 - вещь нужная определенно!

По библиотеке - зайди в папку либы, там открой файл .h, в инициализации класса будет список функций с параметрами...а дальше-знание англа!

Зашел в папку, открыл файл.....но ни хрена там ни чего не увидел. Слышал, что где-то надо смотреть, но ни как не найду где  :(

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Показываю на примере UTFT.

Открыл UTFT.h и ищу заветное...

...

class UTFT
{
	public:
		UTFT();
		UTFT(byte model, int RS, int WR, int CS, int RST, int SER=0);
		void	InitLCD(byte orientation=LANDSCAPE);
		void	clrScr();
		void	drawPixel(int x, int y);
		void	drawLine(int x1, int y1, int x2, int y2);
		void	fillScr(byte r, byte g, byte b);
		void	fillScr(word color);
		void	drawRect(int x1, int y1, int x2, int y2);
		void	drawRoundRect(int x1, int y1, int x2, int y2);
		void	fillRect(int x1, int y1, int x2, int y2);
		void	fillRoundRect(int x1, int y1, int x2, int y2);
		void	drawCircle(int x, int y, int radius);
		void	fillCircle(int x, int y, int radius);
		void	setColor(byte r, byte g, byte b);
		void	setColor(word color);
		word	getColor();
		void	setBackColor(byte r, byte g, byte b);
		void	setBackColor(uint32_t color);
		word	getBackColor();
		void	print(char *st, int x, int y, int deg=0);
		void	print(String st, int x, int y, int deg=0);
		void	printNumI(long num, int x, int y, int length=0, char filler=' ');
		void	printNumF(double num, byte dec, int x, int y, char divider='.', int length=0, char filler=' ');
		void	setFont(uint8_t* font);
		uint8_t* getFont();
		uint8_t	getFontXsize();
		uint8_t	getFontYsize();
		void	drawBitmap(int x, int y, int sx, int sy, bitmapdatatype data, int scale=1);
		void	drawBitmap(int x, int y, int sx, int sy, bitmapdatatype data, int deg, int rox, int roy);
		void	lcdOff();
		void	lcdOn();
		void	setContrast(char c);
		int		getDisplayXSize();
		int		getDisplayYSize();
		void	setBrightness(byte br);
		void	setDisplayPage(byte page);
		void	setWritePage(byte page);
...

Вот и список функций)

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Если не неаходишь, кинь ссыль на либу. Помогу)

Joiner
Offline
Зарегистрирован: 04.09.2014

Yarik.Yar пишет:

Если не неаходишь, кинь ссыль на либу. Помогу)

Буду очень благодарен. Может хоть потом сам читать научусь

https://yadi.sk/d/0YAPevFFjfNuH

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Запутанно немного, но оно...


	void     	begin(void),
				setAddrWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1),//graphic Addressing
				setCursor(int16_t x,int16_t y),//char addressing
				pushColor(uint16_t color),
				fillScreen(uint16_t color=0x0000),
				clearScreen(uint16_t color=0x0000),//same as fillScreen
				drawPixel(int16_t x, int16_t y, uint16_t color),
				drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color),
				drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color),
				fillRect(int16_t x, int16_t y, int16_t w, int16_t h,uint16_t color),
				setRotation(uint8_t r),
				invertDisplay(boolean i);
	uint8_t 	errorCode(void);			
	void		idleMode(boolean onOff);
	void		display(boolean onOff);	
	void		sleepMode(boolean mode);
	void 		defineScrollArea(uint16_t tfa, uint16_t bfa);
	void		scroll(uint16_t adrs);
	void 		startPushData(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1);
	void 		pushData(uint16_t color);
	void 		endPushData();
	void		writeScreen24(const uint32_t *bitmap,uint16_t size=_TFTWIDTH*_TFTHEIGHT);

Могу пояснить названия)

Joiner
Offline
Зарегистрирован: 04.09.2014

Yarik.Yar пишет:

Запутанно немного, но оно...

...................

Могу пояснить названия)

Спасибо! Кое-чего узнаю знакомое. Завтра попробую с незнакомым. Если что не разберусь, то спрошу.

Спасибо за помощь!

Joiner
Offline
Зарегистрирован: 04.09.2014

Сплагиатил стрелочные часики (идут от RTC). Источник здесь http://arduino-project.net/analog-clock-arduino-mega/  Я делал на Nano, окончательно будет на Pro Mini. А в общем, какая разница?

Переделал под свой дисплейчик. Убил целый вечер. С дисплеем еще не до конца разобрался.

Вот что получилось (в натуре смотрится симпатичней чем на фотке)

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Зачёт)

Joiner
Offline
Зарегистрирован: 04.09.2014

Yarik.Yar пишет:

Зачёт)

Спасибо :) Но у меня еще есть вопросы. Позднее задам. Не все команды в библиотеке  пока понял.

Joiner
Offline
Зарегистрирован: 04.09.2014

Кое что понял, но что-то не понятно. Оставил команды, которые не понимаю. Что они делают, как работают


		setAddrWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1),//graphic Addressing
			
		pushColor(uint16_t color),
			
			
uint8_t 	errorCode(void);			
void		idleMode(boolean onOff);

void		sleepMode(boolean mode);
void 	defineScrollArea(uint16_t tfa, uint16_t bfa);
void		scroll(uint16_t adrs);
void 	startPushData(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1);
void 	pushData(uint16_t color);
void 	endPushData();
void		writeScreen24(const uint32_t *bitmap,uint16_t size=_TFTWIDTH*_TFTHEIGHT);

Yarik.Yar, не подскажите?

 

 

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

 

idleMode и sleepMode - режимы энергосбережения, спящий режим экрана. pushColor - задать цвет. writeScreen24 - отрисовка картинки (этой функции нужен указатель на массив данных с картинкой) . Все остальны функции вроде системные, типа отправить данные и задать активную область;)

 

Joiner
Offline
Зарегистрирован: 04.09.2014

Yarik.Yar пишет:

 

idleMode и sleepMode - режимы энергосбережения, спящий режим экрана. pushColor - задать цвет. writeScreen24 - отрисовка картинки (этой функции нужен указатель на массив данных с картинкой) . Все остальны функции вроде системные, типа отправить данные и задать активную область;)

 

Спасибо, будем разбираться дальше.

Joiner
Offline
Зарегистрирован: 04.09.2014

Возник вопрос.

В библиотеке есть шрифт, который на фото самый мелкий (он по умолчанию). На экране помещается штук пятнадцать строк по 21 символу. Неплохо. Увеличение размера шрифта, как я понимаю, осуществляется простым увеличением того, самого мелкого. Я пробовал в строку tft.setTextSize(2); подставлять значения от 1 до 15 (дальше было лень...но размер шрифта увеличивается). И чем крупнее символы, тем виднее их корявость. Подскажите, возможно ли внедрить в библиотеку шрифт большего размера, но достойный по красоте количеству пикселей на него затраченных. Вот фотка шрифтов 2 и 1

Joiner
Offline
Зарегистрирован: 04.09.2014

Замутил макетик настенных часиков. Нарисовал печатку, присобачил туда проминьку и часы реального времени и пищалочку. Вот висят они у меня над письменным столом, и даже тикают. Все свободные пины проминьки вывел на плате с правого бока. При надобности можно припаять разъем (если захочется в устройство еще какие функции добавить). Теперь остается усовершенствовать ПО. Потом только понял, что вместо проминьки можно было применить просто микросхемку...ну ладно...учтем на будущее.

Joiner
Offline
Зарегистрирован: 04.09.2014

А вот видео их работы :) https://www.youtube.com/watch?v=MjywhTycwVk&feature=youtu.be

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Joiner пишет:

Замутил макетик настенных часиков ...

Идея моего внука: добавить в часы Wi-Fi и убрать за ненадобностью кнопки установки времени, а можно также убрать RTC. Если время запрашивать через Wi-Fi, скажем, каждый час, то между запросами часики и родным таймером микроконтроллера обойдутся.

Ну, конечно, это реализуемо, если Wi-Fi всегда под рукой. Хотя, если от RTC таки не отказываться (а только от кнопок), то время можно запрашивать не так часто (типа раз в неделю).

Joiner
Offline
Зарегистрирован: 04.09.2014

ЕвгенийП пишет:

........, если Wi-Fi всегда под рукой. Хотя, если от RTC таки не отказываться (а только от кнопок), то время можно запрашивать не так часто (типа раз в неделю).

У меня идея была немного другая. Я хотел часы, которые сами являются эталоном, и ни у кого ни чего не запрашивают. У них очень точный ход. Я установил их в апреле этого года. Отличие от интернетовских часов точного времени сейчас 7 или 8 секунд. А так как в них еще есть своя батарейка, то отключение электроэнергии не повлияют на показания часов. Исходя из выше изложенного, кнопки в часы поставил совсем не для установки времени, а для простора увеличения функционала часиков (всякие таймеры, напоминалки, а может еще что-то, что еще не придумал :). Там еще 12 пинов свободными остались.

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

SpearMint
SpearMint аватар
Offline
Зарегистрирован: 23.11.2015

Имеется такой же дисплей. Использую вместе с ардуино уно rev3. Хотел бы поинтересоваться у всех ли медленно отрисовывается текст? Если сделать цикл когда экран будет обновляться ежесекундно, то изображение будет постоянно моргать, а с большим количеством текста и вовсе медлительность видно налицо.

Если привести пример, то если взять и сделать секундомер, то экран будет каждое обновление содержимого моргать.

Joiner
Offline
Зарегистрирован: 04.09.2014

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

Завтра попробую буковки в примере.....

У вас, наверное какая-то кривая библиотека.

SpearMint
SpearMint аватар
Offline
Зарегистрирован: 23.11.2015

Использую данную библиотеку https://github.com/sumotoy/TFT_ILI9163C, но пред релиз будет по-шустрее https://github.com/sumotoy/TFT_ILI9163C/tree/Pre-Release-1.0r. Буду благодарен если опробуете отобразить текст на экране.

Да, часы у меня почему то тоже быстро работают, а вот с текстом беда.

p.s хотел бы узнать, есть ли различия между ILI9163 и ILI9163C? или это и вовсе одно и тоже?

SpearMint
SpearMint аватар
Offline
Зарегистрирован: 23.11.2015

Для меня оказалось неожиданостью, но на ШИМ портах которые стояли по дефолту экран работает если и не в два раза быстрее чем подключённый к обыкновенным портам.

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Это не потому что ШИМ, а потому, что на этих пинах сидит хардварный, железный SPI, он всяко быстрее работает, чем ногодрыг на других пинах)

SpearMint
SpearMint аватар
Offline
Зарегистрирован: 23.11.2015

Если кому будет интересно, в новой версии библиотеки автор добавил возможность добавить сторонние шрифты.

https://github.com/sumotoy/TFT_ILI9163C/tree/Pre-Release-1.0r4

Joiner
Offline
Зарегистрирован: 04.09.2014

SpeaкMint, спасибо!

Только что-то пока не удалось запустить. Добавил библиотеку, скетчи не компилируются, выдает ошибку. Заменил библиотеку, тоже самое. А старая библиотека работает.

Что не так делаю?

SpearMint
SpearMint аватар
Offline
Зарегистрирован: 23.11.2015

Что за ошибка? Примеры пробовали?

С 1.x adafruit нет необходимости подключать

cannibal66670
Offline
Зарегистрирован: 26.12.2015

из проекта удалите строчку  #include <Adafruit_GFX.h> ... и все заработает , я так вчера тоже сидел библиотеку мучал, пока не доперло)))) ...

cannibal66670
Offline
Зарегистрирован: 26.12.2015

кстати пробовали подключать программно к spi этот дислей, если да, то киньте пример, а то я не так давно  в этой среде работаю, пытаюсь совместно с этим экраном подключить радио модуль 24l01 но пока не понял как ....раньше в bascom работал с контроллерами avr ...

Dmn
Dmn аватар
Offline
Зарегистрирован: 29.11.2015

Купил 2 таких дисплея, у обоих процентров 30 экрана со стороны ног в разноцветных пикселях. Как шум. И если запустить часы из примера библиотеки, то центр циферблата показывает в центре чистой части, а не в центре дисплея. И часть картнки не видна. Одинаковая проблема на обоих. Это брак, или это я натворил????

Joiner
Offline
Зарегистрирован: 04.09.2014

Скорее всего что-то не так делаете. У меня 5 таких дисплеев, все работают. Правда один пришел неисправный (подсветка только светилась и больше ничего), но продавец прислал на замену другой.

P.S. То что оба дисплея одинаково неправильно работают, укрепляет уверенность в том, что дело не в дисплеях.

cannibal66670
Offline
Зарегистрирован: 26.12.2015

все исправляется одной строкой, в сетапе пропишите tft.setRotation(2);

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

Dmn
Dmn аватар
Offline
Зарегистрирован: 29.11.2015

cannibal66670 Спасибо, помогло. А что это за ....... такая???

cannibal66670
Offline
Зарегистрирован: 26.12.2015

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

Joiner
Offline
Зарегистрирован: 04.09.2014

А что значит впритык хватает?  Я не смотрел сколько у меня занимает. Ни каких проблем с поворотом не возникало. Скетч стрелочных часиков с библиотекой экрана, с библиотекой RTC занимает 18300, т.е. 56%. Вроде еще есть где развернуться.

Dmn
Dmn аватар
Offline
Зарегистрирован: 29.11.2015

Joiner, там, видимо, другой скетч, просто эта же библиотека. Она вроде вообще единственная, по крайней мере я другой не нашёл.

Dmn
Dmn аватар
Offline
Зарегистрирован: 29.11.2015

Вдимо проблема не с опворатами,а с адресацией. Когда вводим tft.setRotation (2); мы переворачиваем изображение вверх ногами. В противном случае как будто 0 по Y в программе не совпадает с 0 дисплея. Причём по наблюдениям такая фигня только с дисплеями на чёрном текстолите. С дисплеями на красном такой проблемы, вроде, нет.

cannibal66670,  у Вас какой цвет текстолита?

Может кто из гуру подскажет где копать?

Dmn
Dmn аватар
Offline
Зарегистрирован: 29.11.2015
Вот, что удалось найти. Но в скаченных библиотеках таких строк не нашёл((



There's different strain of this display on ebay, I have try to tracking all of them but may missing some      
 species! Actually the more popular has a RED pcb and a BLACK pcb that are completely same pcb but mount a       
different display that need some tweaking, in particular RED ones need offset but also some tweak for           
colors, etc. In the .h file in the library try to comment out one of the presets:
//#define __144_RED_PCB__
#define __144_BLACK_PCB__
//#define __22_RED_PCB__
I have a discussion here where a couple of users claim that the _GRAMHEIGH propriety should be always 128.
This is true ONLY if you will never use scroll! Scroll use the entire memory mapped to screen, my RED tag one
it's 128x128 but it uses 128x160! If during scroll you have some garbage means that you have not correctly
setup the display property:

#define _TFTWIDTH       128//the REAL W resolution of the TFT
#define _TFTHEIGHT      128//the REAL H resolution of the TFT
#define _GRAMWIDTH          128
#define _GRAMHEIGH          160//Heh? Yes! My display uses offset!
#define _GRAMSIZE       _GRAMWIDTH * _GRAMHEIGH //
#define __COLORSPC      1// 1:GBR - 0:RGB
#define __GAMMASET3     //uncomment for another gamma (1,2,3)
#define __OFFSET        32//this is the offset of my display, 160 - 128 = 32

You can write your own one by adding it in the .h file but let me know so I can add for other users.
The OFFSET have sense if the chinese vendor decided to align TFT at bottom lines of the controller.
This is nonsense since it will force you to use all the off-screen area as well (visible only when you use
scrolling).
Dmn
Dmn аватар
Offline
Зарегистрирован: 29.11.2015

Нашёл, оказывается не там искал.

В библиотеке есть папка _settings, в ней файл TFT_ILI9163C_settings . В случае проблемы в нём надо закоментить строчки как указано выше и всё будет работать!!!!

cannibal66670
Offline
Зарегистрирован: 26.12.2015

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

cannibal66670
Offline
Зарегистрирован: 26.12.2015

только что сделал вот так...

/*--------------------------------------------------------------------------------
Here you have to select the display you own..........................
You have a RED PCB, BLACK PCB or what?
Default:__144_RED_PCB__
(uncomment just one below...)
----------------------------------------------------------------------------------*/

//#define __144_RED_PCB__//128x128
#define __144_BLACK_PCB__//128x128
//#define __22_RED_PCB__//240x320

и все заработало)))))по умолчанию было вот так

/*--------------------------------------------------------------------------------
Here you have to select the display you own..........................
You have a RED PCB, BLACK PCB or what?
Default:__144_RED_PCB__
(uncomment just one below...)
----------------------------------------------------------------------------------*/

#define __144_RED_PCB__//128x128
//#define __144_BLACK_PCB__//128x128
//#define __22_RED_PCB__//240x320

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

Dmn, спасибо за подсказку...реально не натыкался на это , пока ковырялся в библиотеках...

cannibal66670
Offline
Зарегистрирован: 26.12.2015

теперь бы хотелось еще попробовать кирилицу добавить, для полноты картинки....

Dmn
Dmn аватар
Offline
Зарегистрирован: 29.11.2015

cannibal66670, с кирилицей беда. Мне вот хотя бы просто шрифт покрасивей, т.к. собираюсь только цифры выводить во весь экран. Но немогу ничего найти. Хотя непонятно, почему авторы билиотек заодно шрифты не делают??? 

Есть иструкция для самостоятельного изготовления, долго, но сделать можно. А в моём слу шрифт 8х12 вообще не вариант. Скорей всего буду пробовать сам циферки отрисовывать 60х80 примерно. Или 40х60. 

Вообще нужно курить форум на arduino.cc но оч сложно на английском, голова пухнет буквально через 5 минут чтения.

cannibal66670
Offline
Зарегистрирован: 26.12.2015

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

Dmn
Dmn аватар
Offline
Зарегистрирован: 29.11.2015

В комплекте к Adafruit_GFX идут несколько шрифтов, но как их использовать не пойму. Например 

на строку tft.setFont(); компилятор не ругается, значит в библиотеке такая команда есть, но  вот что в скобках написать не знаю.

Joiner
Offline
Зарегистрирован: 04.09.2014

Удалено....не так понял.