И все таки, Владимир, Вы делитесь своим опытом, хоть и размышляли на коммерческие темы. За это Вам огромное спасибо! Продолжайте в том же духе! Крайне полезная информация для саморазвития.
@VladimirMedintsev4 жыл бұрын
Спасибо.
@f33net4 жыл бұрын
Рисовать шрифты крестиками в символьном массиве да ещё обрабатывать это не препроцессором при компиляции, а оставлять в нагрузку чипу - это самое то однокристалкам :))) Осталось только винду в однокристалку загнать... :))) Если кому трудно сделать шрифт отдельно (кроме дурины, все компиляторы имеют инструменты для редактирования шрифтов), то, хотя бы, отдать это дело препроцессору - дефайнами крестики менять на единички, подчёркивание на нолик и получать из этого записи в двоичном виде сразу на этапе компиляции. Да и описывать битовые матрицы сразу в коде двоичными числами чуть менее наглядно, чем крестиками.
@VladimirMedintsev4 жыл бұрын
Про препроцессор очень хорошая идея. Я до нее не догадался. Очень спасибо. Таким образом можно решить много проблем.
@SergeLevin4 жыл бұрын
Не поленился, сходил на канал, откуда взят данный пример и посмотрел как там это реализовано. Идея в том, что массив на самом деле не символьный. А перед определением шрифта подключается файл с пачкой дефайнов (#include "font.h" на 05:16): #define ________ 0x00 #define _______X 0x01 ......... #define XXXXXXXX 0xFF Т.е. всё уже отдано на откуп препроцессору.
@VladimirMedintsev4 жыл бұрын
@@SergeLevin Уже увидел. И мне это все больше нравится.
@philkulibin26024 жыл бұрын
@@VladimirMedintsev не знаю какой у вас С версии а у меня 0x0f == 0b00001111 Значит true
@silentage63104 жыл бұрын
по синтаксису сразу было понятно что это дефайны. там же коды(X _) не в строках были.
@aka_DRY4 жыл бұрын
По поводу шрифтов страдал тоже, сердце успокоилось на uGFX. Хоть и тяжеловата, но могуча. А главное, что шрифты можно брать прямо из /usr/share/fonts/truetype/
@ugene40632 жыл бұрын
TheDotFactory
@shamanhex4 жыл бұрын
Отлично! Как раз подбираю монитор для корпуса на din-рейку.
@silentage63104 жыл бұрын
интересно, сам неделю назад делал себе инструмент для создания шрифтов для мини дисплейчика на ws2812. на js/vue за вечер управился. догадывался что есть готовые сервисы/рпограммы, просто самому интересно было разобраться.
@AlexandrZverev4 жыл бұрын
Сглаженные шрифты, подготовленные в графическом редакторе на таком экранчике выглядят идеально). Сделал вывод цифр крупным шрифтом таким образом, картинки хранятся на spi flash.
@sledleo3 жыл бұрын
какой редактор и какая процедура?
@AlexandrZverev3 жыл бұрын
@@sledleo , редактор любой подходящий, смысл в том, чтобы сделать сглаживание шрифтов и вывести в нужном формате цветности(565). Каждый символ отдельным файлом .bmp Использовал GIMP. Позже нашел github.com/lvgl/lv_font_conv, конвертер шрифтов в bmp, сглаживание есть, опций много, но пока не использовал, и для моего варианта там не хватает выбора цвета текста и фона. Подготовил файлы bmp в GIMP, разные по ширине символы разделил на два подмножества (цифры одной ширины, а точка и т.п. другой ширины), записал на флэш w25q64, туда же хотел записать таблицу сопоставления символ - адрес символа, но так как был отдельный мало использованный eeprom, то записал на eeprom, с учетом что это первые отладочные экземпляры и так проще было загружать произвольные изображения по uart и править таблицу загруженных. Символы выводятся на экран как есть, если надо много вариантов цветов текста и фона, то добавляются соответствующие подготовленные изображения, да, работы руками в редакторе много, если нужен весь алфавит или много цветовых вариантов, но я делал только цифры и несколько значков для единиц измерения. Вывод символа: ищем символ в таблице символов, читаем символ по найденному адресу в буфер озу (один spi) и выводим на экран(другой spi), by DMA. Для ускорения выводятся только те символы строки, которые изменились в ней с прошлого раза.(а также все последующие за измененным, так как измененная ширина может сбить оставшуюся часть строки). Оптимизация для находящихся на одном месте экрана строк, которые периодически обновляются. Ссылки на код дать не могу - он в полностью отлаженном, но непричесанном варианте, пока не созрел для github).
@Ryazanec133 жыл бұрын
Обожаю экран от нокии 1202, жаль, что фиг где достаёшь сейчас. В магазине одном по 70р в свое время все экраны скупил, лет 8 назад. В первую машину ваз2110 делал бортовой комп на нем. Описание протокола общения с эбу в интернете нашлось, и в итоге мне это 3 раза в ремонте помогло, один раз хреновы бензином заправил я и вылез чек по детонации, второй раз катушка барахлила, вылезла ошибка по пропускаем и третий раз ошибка по датчику коленвала отловил, провод отгнил.
@ВладимирМ-е6ь4 жыл бұрын
Когда-то нашел программу LCD font maker , как по мне оказалась удобней других.
@Kaaaaaaaaaarrrrr4 жыл бұрын
Со шрифтом 5х8 работает изумительно, а 7х11 кириллицу выводит кракозябрами
@allaksusallaksus24024 жыл бұрын
Все строки состоящие из символов _ и X состоят из восьми символов и где-то в вашей программе есть следующее #define _X_X_X_X 0x55
@VladimirMedintsev4 жыл бұрын
Да, да, спасибо уже увидел как там хитро все реализовано. И честно говоря мне это жутко понравилось. Так что теперь возьму на вооружение. Я до такого приема действительно не додумался.
@allaksusallaksus24024 жыл бұрын
Символы _ и X анализирует компилятор а не целевая программа, поэтому занимаемое шрифтами место останется таким же как и с помощью записи в виде шестнадцатиразрядных чисел
@konstantingolinskiy49444 жыл бұрын
Можно использовать всего один шрифт размером например 6х8 и реализовать множитель в функции который будет его увеличивать хоть навесь экран, тем самым экономим память на хранении шрифтов и получаем любой размер кратный 6х8 char ST7789_DrawChar(uint16_t x, uint16_t y, uint16_t TextColor, uint16_t BgColor, uint8_t TransparentBg, FontDef_t* Font, uint8_t multiplier, unsigned char ch) { uint32_t i, b, j; uint32_t X = x, Y = y; uint8_t xx, yy; if( multiplier < 1 ){ multiplier = 1; } /* Check available space in LCD */ if ( ST7789_Width FontWidth) || ST7789_Height FontHeight) ) { /* Error */ return 0; } /* Go through font */ for (i = 0; i < Font->FontHeight; i++) { if( ch < 127 ){ b = Font->data[(ch - 32) * Font->FontHeight + i]; } else if( (uint8_t) ch > 191 ){ b = Font->data[((ch - 192) + 96) * Font->FontHeight + i]; } else if( (uint8_t) ch == 168 ){ // 168 символ по ASCII - Ё // 160 эллемент ( символ Ё ) b = Font->data[( 160 ) * Font->FontHeight + i]; } else if( (uint8_t) ch == 184 ){ // 184 символ по ASCII - ё // 161 эллемент ( символ ё ) b = Font->data[( 161 ) * Font->FontHeight + i]; } for (j = 0; j < Font->FontWidth; j++) { if ((b FontWidth * multiplier); /* Increase string pointer */ str++; } /* Everything OK, zero should be returned */ return *str; } Шрифт только у меня отличается от вашего по битовой маске, у меня идет слева на право и сверху вниз пример: 0x2000, 0x5000, 0x8800, 0x8800, 0xf800, 0x8800, 0x8800, 0x0000, // A multiplier - множитель при 1 шрифт будет 6х8 ,при 2 12х16 и т.д
@bdfy83493 жыл бұрын
Ого, не ожидал вас тут увидеть. Спасибо за код и платку ст-линк в2.1, работает изумительно
@masterkit95174 жыл бұрын
Бесценный канал!
@sergeydrachuk86124 жыл бұрын
Возможно, можно было использовать старую библиотеку от Нокии. Контроллеру (по крайней мере ST7789S) можно задать любые направления отрисовки через MADCTL (36h): Memory Data Access Control .
@rinatkin77034 жыл бұрын
Здравствуите , где наити команды инициализации .настроики этого дисплея
@VladimirMedintsev4 жыл бұрын
Внутри функции init ну или в даташите
@vitalypuzrin4 жыл бұрын
Вот github.com/littlevgl/lv_font_conv :). Когда устал от стремных шрифтов на эмбедах, запилил спецификацию и конвертор из TTF. С кернингом, сжатием и субпиксельным сглаживанием. Вот тут фоточка на 0.96" дисплее github.com/puzrin/dispenser/blob/master/doc/assembly.md#pcb-assembly. Это сейчас на LittlevGL поддерживается, но формат шрифта описан подробно, желающие могут привинтить куда душе угодно.
@VladimirMedintsev4 жыл бұрын
Спасибо вам огромное, очень красиво шрифт смотрится.
@ussh4694 жыл бұрын
Лайк как и обычно)
@АлександрСмирнов-л6з3 жыл бұрын
разобраться не получается с русскими буквами , если выводить 7*11 как отдельный символ ST7789_DrawChar_7x11 то выводит нормально, а если строкой ST7789_print_7x11 то каракули почему то. 5*7 выводит все нормально. Нужна помощь автора. Еще подскажите есть дисплейчик 240*240 St7789, ничего не выводится, только горит подсветка, как можно определить что он не исправный?
@rinatkin71944 жыл бұрын
Здравствуйте можете показать код инициализации дисплея 7789 на С
@VladimirMedintsev4 жыл бұрын
В описании этого видео есть ссылка на библиотеку. Скачайте и там код на Си. И там инициализация.
@ДенисДавыдов-г6ы4 жыл бұрын
Здравствуйте, не подскажите как добавить шрифт крупнее?
@VladimirMedintsev4 жыл бұрын
По аналогии с уже добавленными.
@BizonAll3 жыл бұрын
А как подключить вашу библиотеку в STM32CubeIDE для платы BluePill? Я, вроде бы, разобрался в том, как подключить SPI, кварц, переназначить пины для BLK, DC и RES; также изменил в библиотеках и шрифтах HAL-библиотеку для своего микроконтроллера (STM32F103C8T6), но, учитывая, что вы, судя по всему, программировали в Keil, есть какое-то несовпадение по дополнительным библиотекам ввода-вывода. P.S.: только начинаю осваивать STM32. Осваиваю с определённой целью: сделать кое-какое устройство на основе этого микроконтроллера и экранчика. Так что не судите строго, если задаю глупый вопрос...
@bdfy83493 жыл бұрын
эта библиотека - хлам. Хотите быстро сделать устройство на bluepill, то устанавливайте на него sm32duino и берите готовую библиотеку от cbm80amiga. Она работает в разы быстрее хлама в видео, а пользоваться ей в разы удобнее.
@BizonAll3 жыл бұрын
@@bdfy8349 Мне ваш путь не подходит как минимум потому, что я хочу весь проект делать не в среде Arduino, а в STM32CubeIDE... Так что, если творчески перерабатывать ваше предложение, то мне необходимо адаптировать библиотеку CBM80Amiga под STM32. Но тогда уж легче попробовать "прикрутить" эту к своему проекту... Точнее, я и пробую это сделать... Но, подозреваю, проблема в том, что частота работы SPI для STM32F030 отличается от таковой для STM32F103, потому что выставить аналогичную частоту с помощью предделителей на STM32F103 мне не удалось: либо больше, либо меньше (18Mbits/s или 9Mbits/s против 12Mbits/s в оригинале). Кроме того, в оригинальном проекте SPI параметр DataSize равен 4bits, а для STM32F103 этот параметр можно выставить в 8bits или в 16bits. Также, вероятно, я чего-то не учитываю при переносе проекта из среды Keil на STM32CubeIDE. Из того, что сделал: 1) подменил библиотеку "stm32f0xx.h" в файлах шрифтов на "stm32f1xx_hal.h" (вопрос: корректная ли замена? И, вообще, нужно ли там подключать эту библиотеку? А то не вижу в этом смысла); 2) сделал аналогичную замену в файлах "st7789.h" и "st7789.c" (заменил "stm32f0xx_hal.h" на "stm32f0xx_hal.h"); 3) в файле "st7789.c" заменил строку #include на #include "main.h", чтобы библиотека работы с экранчиком могла взаимодействовать с контактами, к которым этот экранчик подключен К сожалению, моего опыта в программировании не хватает для полноценного понимания того, что происходит в функциях "ST7789_SendCmd" и "ST7789_SendData"... :-( А именно там идёт взаимодействие с интерфейсом SPI... P.S.: хотелось бы увидеть комментарии Vladimir Medintsev на тему того, что я делаю неправильно... И, по-возможности, объяснения, что и как мне сделать, чтобы данная библиотека заработала на плате BluePill STM32F103C8T6...
@Sborka_Electron3 жыл бұрын
@@BizonAll Ого я сегодня то же самое сделал подменил. У меня заработало
@BizonAll3 жыл бұрын
@@Sborka_Electron если бы вы на видео показали все свои шаги для подключения этой библиотеки, от момента создания проекта до момента подключения дисплея к микроконтроллеру, а также работающий дисплей, я был бы вам очень благодарен!
@VladimirMedintsev3 жыл бұрын
Я два месяца на это смотрел. Что необходимо сделать: 1. Создать пустой проект в кубе под микроконтроллер вашей макетки. 2. Скопировать в проект файлы библиотеки. 3. Добавить их в проект. 4. Изменить 2 функции в которых проходит работа с SPI. И все, и все будет работать.
@AxGxP4 жыл бұрын
1:37 39 строка, проверки на
@Ch-zp9ft4 жыл бұрын
Здравствуйте! Спасибо за ваши видео, безценно для начинающего. Работаю с True Studio . Ваша библиотека там успешно заработала. Подскажите как реализовать там русский язык, просто напечатанные символы не выводятся.
@VladimirMedintsev4 жыл бұрын
Значит что-то не так с кодировкой текста в используемой IDE. У вас там случайно не unicode включена? Как бы вы же сидите перед компьютером. Проверьте что ваша функция отдает в библиотеку и далее и далее. Отладку никто не отменял.
@Ch-zp9ft4 жыл бұрын
@@VladimirMedintsev Спасибо, будем искать!
@generalleitenant424 жыл бұрын
Здраствуйте . Попробовал вашу библиотеку только с дисплеем st7789 1.14inch 135X240 ТАК у меня и не запустился дислей
@VladimirMedintsev4 жыл бұрын
А у меня запустился :-)
@generalleitenant424 жыл бұрын
@@VladimirMedintsev именно 135х240
@VladimirMedintsev4 жыл бұрын
Важно не разрешение, а контроллер. Если контроллер правильный то должно всё работать. Можно попробовать посмотреть что там по spi, уменьшить скорость).
@generalleitenant424 жыл бұрын
@@VladimirMedintsev скорость нормальная , а я могу вам отправить чтоб вы посмотрели может все таки где то я ошибаюсь
@stari40k4 жыл бұрын
Вы внимательно посмотрите, там ДЕФАЙНАМИ скорее всего сделано, в итоге тот же массив.
@Ironziz4 жыл бұрын
Здравствуйте Владимир !!! Библиотека действительно получилась классная ))) Спасибо вам, испытал. Единственно шрифты, почему то у меня печатаются зеркально ((( , Использую st7735 Использовал шрифт 7x11
@MrSasha30504 жыл бұрын
🔥
@MrCrossRaccoon4 жыл бұрын
эхххх, я думал, он масштабируется до 240*320 :) придётся адафрутовскую колупать
@MrCrossRaccoon4 жыл бұрын
UPD Семён Семёныч! (с) как я сразу не заметил, что размеры экрана uint8_t ))) колупаю Вашу библиотеку, в топку адафрут :) UPD и после передачи данных (и команд) надо бы притормозить разок __NOP(), а то у меня артефакты появляются :) Вот теперь всё работает, спасибище :)
@VladimirMedintsev4 жыл бұрын
Простите не понял, где артефакты? Где nop() поставить?
@MrCrossRaccoon4 жыл бұрын
@@VladimirMedintsev после *((__IO uint8_t *)&SPI1->DR) = Cmd; и, соответственно, Data. Это на 18мбит SPI, с меньшей скоростью наверное уже паузу полноценную надо будет ставить, пока не проверял. ну и 16 бит там, где высота/ширина и область вывода данных задаётся.
@ЮрийИванов-т8о3 жыл бұрын
С таким качественным дисплеем работать без сглаживания, себя не уважать
@13-Radeon2 жыл бұрын
Адаптировал данную библиотеку под AVR на программный SPI, добавил поддержку нескольких шрифтов, так же добавил функцию форматированного вывода значения переменной со знаком и запятой. Сам демо поект собран в среде Code Vision AVR 2.05.0, под Atmega8L. В данной компиляции у меня дисплей имеет разрешение 240х280 в горизонтальной развертке. Владимир добавил возможность смены ориентации и изменение разрешения дисплея, так что все настраивается! drive.google.com/file/d/1_4ijNgu4xJqDpVWpNUmTr_0ztTrHzqdh/view?usp=sharing Во второй ссылке вся необходимая информация по дисплею, включая программу для генерации шрифтов, но нужно кое что знать об этом. В папке "Создание шрифтов" есть файл "Как создать шрифт". Поскольку саму функцию отрисовки шрифтов я тоже изменил, что бы ускорить функцию и уменьшить занимаемую память.... drive.google.com/file/d/1EOHFAokXYvg3XXALrQTWTfpFGdDAXY26/view?usp=sharing ОБРАТИТЕ ВНИМАНИЕ, ЧТО В ПОСЛЕДНЕМ АРХИВЕ ЛЕЖАТ И ПРИМЕРЫ ДЛЯ STM. ТЕ ЭКЗЕМПЛЯРЫ ИМЕЮТ МИНИМУМ ИЗМЕНЕНИЙ ОТ ТОГО ЧТО ПРЕДСТАВЛЕНО В ВИДЕО. ВСЕ ИЗМЕНЕНИЯ, КОТОРЫЕ НА МОЙ ВЗГЛЯД НАПРАВЛЕННЫЕ НА ОПТИМИЗАЦИЮ, РЕАЛИЗОВАНЫ ИМЕННО В ПРИМЕРЕ ПОД AVR!!! Разумеется программный SPI не ускоряет работу, просто мне так было удобней с моей отладочной платой... Прикрутить аппаратный SPI не проблема. В данном видео Владимир разжувал, где, что и за что....