Форум РадиоКот https://radiokot.ru/forum/ |
|
Вывод данных на цветной дисплей 128*128 на базе ST7735 https://radiokot.ru/forum/viewtopic.php?f=25&t=154245 |
Страница 1 из 1 |
Автор: | Frogfot [ Пн апр 16, 2018 16:54:06 ] |
Заголовок сообщения: | Вывод данных на цветной дисплей 128*128 на базе ST7735 |
Повторил проект rozorh http://radiokot.ru/articles/78/ - всё запустилось с первого раза, за что автору благодарность. Отличие только в другом индикаторе - 1,8" TFT 128х160, и контроллер у меня чуть отличается - пришлось оставить в команде MADCTL (0x36) цветовую палитру GBR, поскольку был неправильный вывод цветов. Также растянул вывод цветов и кекстовой надписи на весь дисплей - поменял в команде задания координат вывода с 128 на 160. Картинку кота (126х126) не менял, поскольку прошивка и так почти 32 КБайта. Потом слегка усовершенствовал программу - перешёл с программного SPI (хотя в некоторых случаях это удобно - можно брать любых 3 пина) на аппаратный SPI (дисплей я включил через резисторные делители - 1КОм от портов и 2,2КОм на землю), дисплей тоже запитан от 5В, поскольку на платке распаян стабилизатор 5В/3,3В, подсветка дисплея через резистор 510 Ом запитана от 5В. При переходе от soft SPI к hard SPI зрительно скорость прорисовки выросла раз в 5-10 (точно не измерял), также запустил Таймер 0 для отладки - помигать светодиодом, подёргать WatchDog, потому что иногда дисплей после прошивки не запускался - пришлось передёргивать программатор. Потом задеqствовал Chip Select на PB4 - вообще пропали зависания, скорее всего при прошивке дисплей входил в ступор от команд прошивки, поскольку задействованы одни и те же пины. Если кому-то интересно, выложу исправленный проект под GCC и скриншоты. Добавлено after 8 hours 15 minutes 14 seconds: Хоть никто и не просил, выкладываю свой вариант проекта ATmega32 + TFT 1,8" 160x128 на ST7735. Фотку я оставил, только сделал фон индикатора чёрным, а дальше в цикле вывод текста - 8 строк каждая разным цветом и переключение цвета фона тоже 8 разных цветов (1 строка из 8 будет не видна - совпадает цвет текста и цвет фона). Прошивка в проекте в архиве. Подключение индикатора к МК: A0 - PB3, CS - PB4, SDA - PB5, SCK - PB7. Вложение:
|
Автор: | Frogfot [ Пт апр 27, 2018 17:39:42 ] |
Заголовок сообщения: | Re: Вывод данных на цветной дисплей 128*128 на базе ST7735 |
Перевёл проект для TFT 1,8" 160x128 на ST7735 с ATmega32 на STM32F051R8 с платы DISCOVERY F0. STM32F051 пошустрее - 48 МГц, флеша 64 кБ и оперативы 8 кБ, периферии в 2 раза больше + DMA. Аппаратный SPI запустил, вроде передаёт данные - во всяком случае данные с MOSI заводил на MISO - совпадают, но с ним пока дисплей чего-то не работает, и пока не разобрался, как аппаратно управлять сигналом SC. Пока для отладки сделал SOFT SPI, запустил через него 8-разрядный 7-сегментник на MAX7219 и вот сейчас TFT-шку 1,8". TFT c STM32F051 с SOFT SPI визуально работает пошустрее чем на ATmega32 на 8 МГц c HARD SPI, всё-таки 48 МГц, и прошивка для Меги была впритык, на STM32F051 занимает чуть больше 36 кБ из 64-х (у меня там много лишнего - всякая периферия - таймеры, USARTы и другое). Если кому надо - выложу проект с SOFT SPI, пока буду разбираться с Hardовым SPI. |
Автор: | Jurkin [ Пт мар 06, 2020 01:29:14 ] |
Заголовок сообщения: | Re: Вывод данных на цветной дисплей 128*128 на базе ST7735 |
А вот кто нить может разжевать как технически воспроизвести сиё действо: Цитата: В отличие от вывода полноцветного изображения, кодировка которого требует уйму места в памяти, для вывода одноцветных изображений любого цвета объём кода не намного превысит требующегося для работы с монохромным дисплеем, т.к. в этом случае есть возможность управлять каждым пикселем побитно, т.е. одним байтом сразу 8-ю точками экрана. Для реализации такого незадокументированного способа мы воспользуемся редактором, который позволяет кодировать байт информации не сверху вниз, а горизонтально. Отличный вариант такого редактора – TheDotFactory (можно скачать в приложении). После поместим полученный код в память, а при выводе информации на экран будем применять следующую уловку: закрашивать пиксель, который должен быть видимым (бит=1), цветом, отличным от цвета фона, а пиксель, который видимым быть не должен (бит=0), цветом, совпадающим с цветом фона. Смотрел код, ну чёт всё равно не въехал - мне бы шаг за шагом этот незадокументированный способ. Ну по стандарту понятно: CMD 0x2A, DATA 4байта CMD 0x2B, DATA 4байта CMD 0x2C, DATA -2ух байтовыми цветными точками заполняем выделенную область - тут всё понятно. Ну а как например за байт 8 точек сразу зарисовать, всё вьехать не могу. Ну получил из проги к примеру цифорку 5: ![]() и какими и в какой последовательности CMD, DATA закидывать эти байты в ST 7735. |
Автор: | Frogfot [ Сб мар 14, 2020 22:13:36 ] |
Заголовок сообщения: | Re: Вывод данных на цветной дисплей 128*128 на базе ST7735 |
Ну получил из проги к примеру цифорку 5: ![]() и какими и в какой последовательности CMD, DATA закидывать эти байты в ST 7735. СпойлерКод: void PutChar (u8 ch, u8 x, u8 y) { u8 i, j; SetCursorPos (x, y, x+FontHeight-1, y+FontWidth-1); // Задать область вывода TFT_SET_CMD; TFT_CS_LO; SPI_Send_8(RAMWR); TFT_SET_DAT; for (i=0; i<5; i++) // вывод одноцветного изображения символа - 1 байт = 8 пикселей на экране { u8 Temp = font5x7 [5*ch + i]; for (j=0; j<8; j++) { if (Temp & 0x80) { SendData16(ColorPixel); } // Color Pixel else { SendData16(ColorFon); } // Color Fon Temp <<= 1; } } TFT_CS_HI; } Только прога для фонта 5х7, для фонта 7х5 надо поменять счётчики i и j. |
Автор: | Jurkin [ Вс мар 15, 2020 20:56:21 ] |
Заголовок сообщения: | Re: Вывод данных на цветной дисплей 128*128 на базе ST7735 |
Только прога для фонта 5х7, для фонта 7х5 надо поменять счётчики i и j. Спасибо, да я уже разобрался... Просто думал, что действительно есть какая то "не задокументированная" лазейка, а на деле, просто программная реализация выдачи стандартных для данного дисплея команд - за счёт этого и получается как бы один байт - восемь точек. |
Автор: | mab72 [ Пн мар 21, 2022 14:02:28 ] |
Заголовок сообщения: | Re: Вывод данных на цветной дисплей 128*128 на базе ST7735 |
Если кому надо - выложу проект с SOFT SPI... Если не трудно выкладывай |
Автор: | kovalgg [ Вт дек 12, 2023 22:03:51 ] |
Заголовок сообщения: | Re: Вывод данных на цветной дисплей 128*128 на базе ST7735 |
Здравствуйте!Люди добрые,растолкуйте,как правильно подготовить изображение? Из картинок к программе ConvertBMP ,нормально выводится только одна из двух 128х160. Вторая какими то полосами.Дисплей st7735 128x160 Добавлено after 4 hours 51 minute 29 seconds: Разобрался.Все картинки в программе,кроме одной, с глубиной 24 бита, а та что выводится нормально-16 бит. Возникает следующий вопрос: каким конвертером понизить глубину до 16 бит(5-6-5)? |
Автор: | shonty [ Вт дек 12, 2023 22:52:29 ] |
Заголовок сообщения: | Re: Вывод данных на цветной дисплей 128*128 на базе ST7735 |
.. каким конвертером понизить глубину до 16 бит(5-6-5)? В ГИМП можно преобразоваться в 16 бит В фотошоп не знаю, но думаю и там можно. В консольной imagemagic можно, если конвертировать с опцией -depth 16 |
Автор: | kovalgg [ Чт дек 14, 2023 21:39:52 ] |
Заголовок сообщения: | Re: Вывод данных на цветной дисплей 128*128 на базе ST7735 |
shonty, Здравствуйте!Благодарю за подсказку. Попробовал в фотошопе.Получилось. |
Автор: | BDDW [ Вт янв 09, 2024 23:40:54 ] |
Заголовок сообщения: | Re: Вывод данных на цветной дисплей 128*128 на базе ST7735 |
Доброго времени суток. Кто ни будь разбирался со всеми командами? До конца не понятна разница между командами: 0x12 - выбор рабочей области дисплея включен (Partial mode on) 0x2A - установка начального (параметр XS) и конечного (параметр XE) адресов столбцов в ОЗУ контроллера. (Column address set) 0x2B - установка начального (параметр YS) и конечного (параметр YE) адресов строк. (Row address set) 0x30 - Частичный набор адресов начала/конца (Partial start/end address set) С 0x2A и 0x2B - все понятно. На просторах интернета все очень хорошо разжевано. А вот про другие (на мой взгляд очень похожие команды) - ни слова. Даташит - курил. Но по англицки плохо понимаю. Хотелось бы на пальцах. |
Автор: | shonty [ Ср янв 10, 2024 16:00:21 ] |
Заголовок сообщения: | Re: Вывод данных на цветной дисплей 128*128 на базе ST7735 |
BDDW писал(а): Partial mode Полгода назад разбирался с Partial mode и скроллингом на дисплее ILI9341, в принципе тоже самое, что и ST7735. В режиме Partial mode просто на часть экрана не выводится изображение. Зачем это нужно я так и не понял.. Скроллинг меня также не удовлетворил.. (но в ST7735 вроде нет скроллинга) Просто делал обновляемый график, вот и решил посмотреть, чем полезным можно воспользоваться. Вобщем оставил эту затею.. Для меня бесполезные опции. Наибольший интерес представляет регистр MADCTL, иной раз настройки полностью не совпадают с даташитом. Но это от дисплея зависит. Так же на некоторых ST7735 наблюдается смещение изображения. Сейчас как раз работаю с ST7735 1,8" 128x160 MSP1803, у него смещение 1px по вертикали и 2px по горизонтали. Приходится корректировать програмно. BDDW писал(а): Даташит - курил. Но по англицки плохо понимаю. Хотелось бы на пальцах. По этому поводу я придерживаюсь мнения, что даташиты пишут люди, которые так же не совсем в совершенстве владеют английским. Где нибудь в Тайване. |
Автор: | BDDW [ Пт янв 12, 2024 11:53:12 ] | ||
Заголовок сообщения: | Re: Вывод данных на цветной дисплей 128*128 на базе ST7735 | ||
Полгода назад разбирался с Partial mode и скроллингом на дисплее ILI9341, в принципе тоже самое, что и ST7735. Я то же сейчас разбираюсь с ними. Программа инициализации для ST7735 подошла к ILI9341. Сейчас заказал еще ST7789. Для начала взял список команд из даташита и свел в единую таблицу (если кому надо (поможет) - прилагаю). В режиме Partial mode просто на часть экрана не выводится изображение. Зачем это нужно я так и не понял.. А при включении Partial mode изображение ранее выведенное на экран сохраняется, а обновление данных идет в ранее заданной области командой 0x30? Просто делал обновляемый график, вот и решил посмотреть, чем полезным можно воспользоваться. Вобщем оставил эту затею.. Для меня бесполезные опции. Я занимаюсь сейчас ровно тем же. Столкнулся с тем, что получаю координаты точки. Xочу вывести ее на экран. Логично было бы дать одну команду - какую ни будь "SET Y" и далее строка Y и цвет точки (X автоматически должен увеличиться на 1) - 5 байт. А фактически получается: 0x2A + 4 байта, 0x2B + 4 байта, 0x2C + 2 байта. И того 13 байт. Наибольший интерес представляет регистр MADCTL, иной раз настройки полностью не совпадают с даташитом. Но это от дисплея зависит. 0x36?
|
Автор: | shonty [ Пт янв 12, 2024 17:35:26 ] |
Заголовок сообщения: | Re: Вывод данных на цветной дисплей 128*128 на базе ST7735 |
По Partial mode я толком так и не понял саму суть этой опции. Ведь можно просто задать на дисплее любую произвольную область и заливать её пикселями. BDDW писал(а): Я занимаюсь сейчас ровно тем же. Столкнулся с тем, что получаю координаты точки. Xочу вывести ее на экран. Логично было бы дать одну команду - какую ни будь "SET Y" и далее строка Y и цвет точки (X автоматически должен увеличиться на 1) - 5 байт. А фактически получается: 0x2A + 4 байта, 0x2B + 4 байта, 0x2C + 2 байта. И того 13 байт. У меня вывод графика организован так: - Массив хранится в eeprom - "Флаг индекса", определяет в какую ячейку eeprom записывать данные и с какой ячейки выводить первый бар Собственно сам вывод графика: - задаётся поле вывода 160х320, точнее 320 горизонталь и 160+(толщина линии графика) вертикаль. - из массива берётся значение согласно индексу (преобразовывается в координату, сравнивается с пределами...). - выводится бар: цвет фона + точка (3px) графика соответствующим цветом + цвет фона до конца высоты бара. - увеличиваем адрес eeprom, берём следующее значение. - новый бар заливается уже рядом с предыдущим. Не знаю на сколько понятно смог объяснить.. Но поле задаётся только один раз. График заливается в дисплей побарно, одновременно закрашивая бары предыдущего графика. Визуально почти не заметно.. Как то так.. |
Автор: | Илья79 [ Вс янв 14, 2024 04:26:04 ] |
Заголовок сообщения: | Re: Вывод данных на цветной дисплей 128*128 на базе ST7735 |
Участок кода для дисплея 1,44" на Arduino IDE СпойлерКод: #include <SPI.h> #define SPI1_NSS_PIN PA4 byte data; //дефайны команд управления дисплеем #define SWRESET 0x01 #define SLPOUT 0x11 #define DISPON 0x29 #define CASET 0x2A //x0=int,x1=int #define RASET 0x2B //y0=int,y1=int #define RAMWR 0x2C #define MADCTL 0x36 //RGB.3=1, остальные=0 #define COLMOD 0x3A //64k=5 #define INVON 0x21 // invert on0x21 //дефайны выводов порта В для управления дисплеем #define TFT_CS PA1 #define A0 PA2 //dc //инициализация дисплея void disp_init() { Send(SWRESET,0); //программный ресет delay(120); Send(SLPOUT,0); //будим после ресета delay(120); Send(DISPON,0); //включаем экран Send(MADCTL,0); // RGB и поворачиваем экран Send(0b01111000,1); Send(5,1); Send(INVON,0); } void Send(unsigned char DATA, unsigned char DC) { unsigned char k; if(DC) {sbi(A0);} else cbi(A0); digitalWrite(SPI1_NSS_PIN, LOW); // manually take CSN low for SPI_1 transmission data = SPI.transfer(DATA); //Send the HEX data 0x55 over SPI-1 port and store the received byte to the <data> variable. digitalWrite(SPI1_NSS_PIN, HIGH); // manually take CSN high between spi transmissions } void Disp_set( unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1) { Send(CASET,0); Send(0,1); Send(x0+1,1); Send(0,1); Send((x0+x1),1); Send(RASET,0); Send(0,1); Send(y0+26,1); Send(0,1); Send((y0+y1+25),1); Send(RAMWR,0); } void Cls_disp(uint32_t back_color) { Disp_set(0,0,160,80); for(int k=0;k<12800;k++){ Send((back_color>>16),1); Send((back_color>>8),1); Send((back_color&0xFF),1); } } void setup() { pinMode(PA1, OUTPUT);//sc pinMode(PA2, OUTPUT);//ds pinMode(PA3, OUTPUT);//res pinMode(PA5, OUTPUT); pinMode(PA7, OUTPUT); digitalWrite(PA3, HIGH);//1 SPI.begin(); //Initialize the SPI_1 port. SPI.setBitOrder(MSBFIRST); // Set the SPI_1 bit order SPI.setDataMode(SPI_MODE0); //Set the SPI_2 data mode 0 SPI.setClockDivider(SPI_CLOCK_DIV8); //SPI_FREQ Slow speed (72 / 16 = 4.5 MHz SPI_1 speed) pinMode(SPI1_NSS_PIN, OUTPUT); disp_init(); Cls_disp(white); } |
Автор: | shonty [ Чт янв 25, 2024 08:31:05 ] |
Заголовок сообщения: | Re: Вывод данных на цветной дисплей 128*128 на базе ST7735 |
BDDW писал(а): Программа инициализации для ST7735 подошла к ILI9341. Сейчас заказал еще ST7789. В качестве дополнительных источников информации можно посмотреть даташиты на HX8353 HX8357 GC9A01 S6D02A1 .... и подобные... Но по Partial Mode как то скупо везде написано, даже в даташитах 2019 года. Нумерация глав разная, а основная инфа везде как под копирку. Можете ещё тут пошукать по дисплеям. Кстати, дисплей 1.8 Inch 160x128 на синей подложке, под который я писал как под ST7735, у буржуев позиционируется как S6D02A1, но разницы в командах абсолютно никакой нет. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |