Поскольку телевизор был уже разобран, и пользы от него не было не было ни какой, я решил попробовать подключить к нему контроллер.
Как подключить модуль LCD с большим разрешением и без видеопамяти к контроллеру — под катом.
Электроника телевизора состоит из 2 плат — на одной расположены видео-АЦП, видеопроцессор, тюнер, DC-DC и прочая обвязка. Эта плата нам не нужна. Вторая плата с маркировкой CPWBX0043TPZZ в данном случае важнее — на ней расположен контроллер LCD и инвертор для питания ламп подсветки. В гугле встречал упоминания, что точно такую же плату можно найти в портативном DVD плеере. Контроллером дисплея является микросхема LZ9JG17 (в даташите эта микросхема названа Timing Control IC). ВАЖНО: интерфейс у LCD модуля на данной микросхеме 18-bit RGB, и у данного LCD модуля нет встроенной видеопамяти.
Опишу поподробней работу данного интерфейса. Данные передаются в модуль по параллельной 18-битной шине(по 6 бит на цвет), по каждому тактовому сигналу на экране отображается новый пиксель, цвет которого соответствует коду на шине данных.
Для того, чтобы пиксели отображались на экране в нужных местах, используются сигналы горизонтальной(строчной) и вертикальной (кадровой) синхронизации.Ниже приведена временная диаграмма сигналов для LZ9JG17: clk — тактовый, HSY — горизонтальной синхронизации, DATA — данных.
По какой-то причине в реальности 216 тактовых импульсов отсчитывались от 2 фронта импульса HSY. Для правильной работы индикатора нужно выводить данные о всех 800 видимых пикселях — иначе нормального изображения не добиться.
С импульсом вертикальной синхронизации все похоже — для начала формирования нового кадра нужно установить на линии вертикальной синхронизации нужный уровень, отправить на индикатор определенное число
Микроконтроллер способен справиться с этой задачей, однако для достижения необходимой скорости передачи данных и формирования тактового сигнала нужно использовать SPI, тактовый сигнал при этом берется с вывода SCK, а данные — c MOSI. Поскольку вывод MOSI только один, то изображение возможно формировать только черно-белое, все входы данных модуля нужно запараллелить и соединить с MOSI.
В данном случае, при передаче одного байта через SPI на экране будут обновляться 8 пикселей. Частота передачи данных через SPI может доходить до половины тактовой частоты контроллера. Таким образом, для управления модулем LCD требуется всего 4 линии — clk, DATA, VSY, HSY.Для хранения одного кадка потребуется (800*480)/8 = 48000 байт. К сожалению, у контроллера STM32-DISCOVERY всего 8 килобайт ОЗУ. Поэтому на DISCOVERY возможно формировать только текст. При размере знакоместа 8×16 на экране можно расположить 100×30 знакомест — то потребует 3000 байт ОЗУ.
По поводу подключения в модулю. Модуль LCD соединялся с основной платой телевизора через 40-пиновй шлейф, к выводам которого не подпаятся. Однако рядом с разъемом шлейфа на плате модуля имеются круглые тестовые площадки достаточно большого размера, чтобы к ним можно было припаять провод. Поскольку даташит на контроллер LCD у меня был, то прозвонив мультиметром выводы LZ9JG17 и тестовые площадки, я определил назначение тестовых площадок модуля. С цепями питания еще проще — при подключенной плате телевизора измерил напряжения на наиболее толстых дорожках рядом с разъемом, и определил, что где. Модуль требует 5В 0.1А для питания основных цепей и 12В 0.8А для инвертора. Напряжение сигналов, подаваемых на модуль — 3.3В, так как LZ9JG17 питается именно от 3.3 В. Источник 3.3 вольт есть на самом модуле. Сигнал управления на инвертор подается с еще одного вывода разъема, для того включить подсветку, нужно подать на него 3.3В.
Фотография участка модуля LCD с распиновкой.
Подписи соответствуют подписям выводов LZ9JG17 в даташите. Площадки HENAB, HRVC, HRVC остаются не подключенными.
Что интересно, диод на плате установили китайцы — когда я в первый раз разбирал телевизор, отверстия под винты были закрыты заводской наклейкой.
Вывод VSY модуля у меня соединяется с выводом PC5 платы DISCOVERY, HSY — с PC4, clk — с PA5(SPI_SCK), запараллеленные входы данных — с PA7(SPI_MOSI).
Опыт показал, что вывод clk нужно соединить с землей через конденсатор 18пФ, иначе возникают артефакты изображения.
Фотография конструкции в сборе:
Теперь о программе. Она написана в IAR. Информация у меня передается в SPI через DMA. Используется двойная буферизация — в то время, пока данные из одного буфера передаются на индикатор, другой буфер заполняется данными программой.
Фотография готового устройства:
Работает LCD модуль стабильно, мерцание экрана не заметно. В принципе, подобным образом к DISCOVERY можно подключить любой экран с RGB интерфейсом, лишь бы был даташит на контроллер LCD и индикатор мог работать на соответствующей частоте развертки(у меня 17 Гц).
Позже хочу подключить модуль к более мощному контроллеру с 64 Кбайт памяти, что позволит организовать настоящую видеопамять и выводить на экран любую графику, и сделать что-то вроде настенного календаря-будильника с wifi, что позволит показывать прогноз погоды из интернета, синхронизировать данные будильника с компьютером, показывать заметки, сделанные на компьютере. Эдакий шаг к умному дому.
Очень скоро выяснилось, что у STM32F429ZI есть такая штука LCD-TFT display controller или сокращено LTDC и смешивание слоев, прозрачность — это его фича. А дисплей на самом деле обычный с одним физическим слоем, подключается по RGB интерфейсу.
По большому счету все дисплеи можно разделить на две категории: с встроенной графической памятью(GRAM) и без неё.
Из картинок понятно, что GRAM обязательно должна быть и если ее нет в дисплее, она может располагаться либо внутри микроконтроллера, либо подключаться к нему.
У LTDC своей памяти нет и тут в зависимости от размера дисплея существует два варианта расположения GRAM. Либо внутри МК, либо во внешней микросхеме памяти.
Как же это все работает?
Первичная инициализация дисплея происходит по SPI, там и выбирается в качестве управляющего интерфейса RGB. Далее, при настройке LTDC мы указываем адрес начала буфера и его размер(то самое GRAM). Сам буфер будет располагаться в оперативке, но используя FMC, мы можем обращаться к регистрам оперативки, как будто они находятся в памяти микроконтроллера. После того как вся периферия инициализирована, для отрисовки картинки на дисплее достаточно запихать ее в буфер, дальше LTDC все сделает за нас. Ниже можно посмотреть видео работы дисплея.
Источник: hubstub.ru
Ранее в заметке Микроконтроллеры STM32: работа с экранчиком 1602 по I2C мы научились выводить текст на HD44780-совместимый ЖК-индикатор с I2C-адаптером на базе чипа PCF8574. Эти индикаторы хороши тем, что они не дороги, имеют подсветку и позволяют выводить крупный текст. Но при этом они не могут похвастаться большой скоростью перерисовки, широким углом обзора, или возможностью выводить графическую информацию. Плюс к этому, они довольно громоздки, что в определенных задачах может быть неудобно. Поэтому сегодня мы поговорим о популярных OLED-дисплеях на базе чипа SSD1306, лишенных названных недостатков.
Fun fact! В этом блоге OLED-экранчик с I2C-интерфейсом на базе SSD1306 ранее уже упоминался в статье Используем джойстик от Sega Genesis в проектах на Arduino.
Такие дисплеи бывают разных размеров. Дисплей с диагональю 0.96 дюймов стоит на eBay около 3$, а аналогичный дисплей с диагональю 1.3 дюйма — около 7$. Еще есть совместимые дисплеи на базе чипа SSD1309 с диагональю 1.54 (ценой ~13.5$) и 2.42 дюйма (от 20$). Как правило, дисплеи отображают картинку 128x64 пикселей, но также встречаются и «полоски» 128x32 пикселя, и другие форматы. Пиксели могут быть белыми или синими. Еще встречаются дисплеи, у которых верхние 1/4 пикселей желтые, а нижние 3/4 — синие. Дисплеи на базе SSD1309 бывают белыми, синими, зелеными и желтыми.
Есть также аналогичные дисплеи на базе чипа Sh2106. Они лишь частично совместимы с SSD1306, поскольку поддерживают только страничную адресацию пикселей. В связи с этим некоторые библиотеки, написанные для SSD1306, могут с ними не работать. При этом внешне дисплеи на базе Sh2106 неотличимы от дисплеев на базе SSD1306. Стоит ли говорить, что в сети можно найти много сообщений о «сломанных библиотеках» и «бракованных дисплеях».
SSD1306 умеет работать по нескольким протоколам, в том числе по SPI и I2C. I2C удобнее использовать, когда хочется поменьше проводов и скорость передачи данных не критична. SPI требует больше проводов, но позволяет передавать данные намного быстрее. Притом, с точки зрения FPS нет большой разницы, что использовать. Например, STM32F103C8T6 легко показывает по I2C более 25 FPS, чего на практике должно быть более, чем достаточно. Для сравнения, по SPI на том же микроконтроллере можно получить до 54 FPS. Но не ясно, зачем это может быть нужно. Субъективно, куда важнее FPS’ов тот факт, что SPI позволяет больше времени тратить не на передачу данных, а какие-то полезные вычисления.
Fun fact! На самом деле, SSD1306 поддерживает два протокола SPI, так называемые 3-wire SPI и 4-wire SPI. Команды и данные у этого чипа передаются в виде байт, и еще один бит, так называемый D/C, нужен для того, чтобы отличить команды от данных. Так вот, отличие протоколов состоит в том, что в 3-wire SPI данные передаются блоками по 9 бит — бит D/C плюс один байт, а 4-wire SPI использует обычный 8-и битный SPI, плюс дополнительный провод для передачи бита D/C. Далее под SPI я буду понимать исключительно 4-wire SPI, так как чаще всего почему-то пользуются именно им.
Соответственно, дисплеи обычно продаются в виде I2C- или SPI-модулей, имеющих пины с шагом 2.54 мм. Но также продаются и дисплеи без какой-либо обвязки, имеющие только шлейф, идущий непосредственно к чипу. Интересно, что SPI-модули обычно имеют шелкографию, объясняющую, как перепаять их в I2C-модуль или модуль, работающий по 3-wire SPI. Например, я вполне успешно перепаял вот такой SPI-модуль от WaveShare, чтобы он работал по I2C. Увы, чтобы переделанный модуль работал корректно, ему приходится подавать на пин Reset сначала низкое напряжение, а затем высокое, что не требуется в обычных I2C-модулях. Но в остальном он работает без нареканий.
На приведенном фото слева изображен экранчик с диагональю 1.3″, белыми пикселями и работающий по I2C. Справа от него — похожий экранчик, но с диагональю 0.96″ и работающий по SPI. На фото не очень хорошо видно, но у этого экранчика 3/4 пикселей, находящихся ближе к пинам, выводятся через строчку. Я не уверен, то ли это брак, то ли экранчик таким и задуман, например, для снижения энергопотребления. По крайней мере, смотрится вполне симпатично. Заметьте также, что изображение у него выведено перевернутым на 180 градусов. Это уже было сделано намерено в коде прошивки, протокол SSD1306 такое позволяет. Оба экранчика подключены к отладочной плате Nucleo-F411RE.
Следующие два экранчика подключены к плате Blue Pill на базе микроконтроллера STM32F103C8T6. Первый экранчик 0.96″ — этот тот самый модуль от WaveShare, который я перепаял обратно, чтобы он снова работал по SPI. Верхние 1/4 писелей у этого дисплея желтые, а нижние 3/4 — синие. За ним идет экранчик, также имеющий диагональ 0.96″, но с белыми пикселями и работающий по I2C. Кстати, все четыре дисплея могут питаться как от 3.3 В, так и от 5 В.
Было протестировано несколько библиотек для работы с такими экранчиками. В итоге, больше всего мне понравилась 4ilo/ssd1306-stm32HAL. Позже я выяснил, что ее Google и выдает первой по запросу «stm32 ssd1306 library». Библиотека отличная, заводится с пол-оборота, содержит всего 150 строк кода, работает без нареканий. К сожалению, она умеет работать только по I2C. Поэтому поддержку SPI мне пришлось дописать самостоятельно, ну и заодно отрефачить кое-что по мелочи. Ссылку на получившуюся в итоге библиотеку ищите в конце поста.
В ходе работы над библиотекой я узнал, что дисплей 1.3″ почему-то немного иначе адресует пиксели, чем дисплей 0.96″. Чтобы на нем все отображалось корректно, мне пришлось переопределить ширину экрана:
# C defines
C_DEFS = \
-DUSE_HAL_DRIVER \
-DSTM32F411xE \
-DSSD1306_USE_I2C -DSSD1306_WIDTH=130 \
-DSTM32F4 # for ssd1306 library
Основной же код был написан так, чтобы он ничего не выводил в первом и втором столбце пикселей, потому что этот экранчик их не отображает. В результате получилось следующее:
#include «ssd1306.h»void ssd1306_TestFonts() {
ssd1306_Fill(Black);
ssd1306_SetCursor(2, 0);
ssd1306_WriteString(«Font 16×26», Font_16x26, White);
ssd1306_SetCursor(2, 26);
ssd1306_WriteString(«Font 11×18», Font_11x18, White);
ssd1306_SetCursor(2, 26+18);
ssd1306_WriteString(«Font 7×10», Font_7x10, White);
ssd1306_UpdateScreen();
}
void ssd1306_TestFPS() {
ssd1306_Fill(White);
uint32_t start = HAL_GetTick();
uint32_t end = start;
int fps = 0;
char message[] = «ABCDEFGHIJK»;
ssd1306_SetCursor(2,0);
ssd1306_WriteString(«Testing. ..», Font_11x18, Black);
do {
ssd1306_SetCursor(2, 18);
ssd1306_WriteString(message, Font_11x18, Black);
ssd1306_UpdateScreen();
char ch = message[0];
memmove(message, message+1, sizeof(message)-2);
message[sizeof(message)-2] = ch;
fps++;
end = HAL_GetTick();
} while((end — start) < 5000);
HAL_Delay(1000);
char buff[64];
fps = (float)fps / ((end — start) / 1000.0);
snprintf(buff, sizeof(buff), «~%d FPS», fps);
ssd1306_Fill(White);
ssd1306_SetCursor(2, 18);
ssd1306_WriteString(buff, Font_11x18, Black);
ssd1306_UpdateScreen();
}
void ssd1306_TestAll() {
ssd1306_Init();
ssd1306_TestFPS();
HAL_Delay(3000);
ssd1306_TestFonts();
}
Полную версию кода вы найдете на GitHub. Узнать больше о чипе SSD1306 можно из его даташита [PDF].
Библиотека была протестирована только на микроконтроллерах семейства STM32F1 и STM32F4, так как других у меня под рукой попросту нет. Если вас не затруднит проверить ее на других микроконтроллерах и сообщить о результатах в комментариях, я был бы крайне признателен. Также прямо сейчас у меня нет возможности проверить, работает ли библиотека с экранчиками на базе Sh2106 и SSD1309. Если вы можете протестировать это, мне также крайне хотелось бы узнать о результатах. Наконец, отмечу, что я с радостью приму патчи, добавляющие в библиотеку, скажем, вывод геометрических фигур, русские шрифты или поддержку 3-wire SPI.
А что вы думаете о подобных OLED-экранчиках? Доводилось ли вам с ними работать? Если да, то какую библиотеку вы использовали, и по какому протоколу она говорила с дисплеем?
Дополнение: Проверил, библиотека работает с SSD1309 и Sh2106.
Дополнение: Также вас могут заинтересовать посты Работа с цветными OLED-экранчиками на базе SSD1351 и Превращаем VGA-монитор в «большой OLED-экранчик» с помощью iCEstick.
Метки: STM32, Электроника.
ЖК-матрица от Nokia 3310 имеет размеры 84 × 48 пикселей, что позволяет комфортно отображать 14 разборчивых буквенно-цифровых символов в 6 строках. По сравнению с возможностями популярных буквенно-цифровых дисплеев (обычно 2 × 16 или 2 × 20 символов), это большой объем информации.
Блок питания 0…30 В / 3A
Набор для сборки регулируемого блока питания…
Поскольку дисплей был разработан для портативного устройства, поле отображения ЖК-матрицы не очень большое (30×24 мм), толщина всего модуля также мала (около 3 мм).
Рис. 1. Внешний вид дисплейного модуля от телефона Nokia 3310
Доступное в интернете описание дисплеев телефона Nokia 3310 указывают на то, что он имеет встроенный драйвер типа PCD8544 производства NXP (Philips).
Кратко напомним конструкцию и способ управления контроллером PCD8544. Его структура включает в себя:
Интерфейс связи контроллера PCD8544 был дополнен — по сравнению с классическим SPI — дополнительными линиями:
На рис. 2 показан временная диаграмма при отправке байта данных или команды на контроллер дисплея.
Рис. 2. Способ отправки байта на контроллер PCD8544
Передача начинается с активации линии nSCE (установка на низкий уровень). Данные из линии SDIN вводятся в регистр контроллера с нарастающими фронтами тактового сигнала SCLK. В примере, показанном на рис. 2, после ввода одного байта линия nSCE становится неактивной. Контроллер допускает ввод блока байтов с активным nSCE (без необходимости устанавливать 1 по этой линии после каждого переданного байта), что в свою очередь ускоряет передачу данных.
Расположение выводов модуля дисплея от телефона Nokia 3310
Контактный номер | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
функция | Vdd | SCLK | SDIN | D/C | SCE | GND | Vout | RES |
Напряжение питания дисплея (Vdd) должно составлять от 2,7 В до 3,3 В. Напряжение, подаваемое на матрицу дисплея (6 … 8 В), генерируется от внутреннего преобразователя контроллера и выводится на контакт Vout, к которому должен быть подключен внешний фильтрующий конденсатор 10 мФ.
На рис. 3 показана принципиальная схема, иллюстрирующая подключение модуля дисплея к микроконтроллеру.
Рис. 3. Схема подключения дисплейного модуля от Nokia 3310 к микроконтроллеру
Содержимое памяти SRAM, встроенной в контроллер PCD8544, можно изменить, введя данные в контроллер, когда линия D/nC находится в высоком состоянии. ЖК-матрица может отображать 48 строк, каждая из которых имеет 84 пикселя.
Память SRAM организована в 6 банков по 84 байта. Эта организация обеспечивает логическое разделение поля отображения на 6 строк по 84 столбца (рис. 4). Строки пронумерованы от 0 до 5, столбцы от 0 до 83.
Рис. 4. Организация памяти SRAM в контроллере PCD8544
При вводе данных в память изображений сначала укажите номер банка памяти (переменная Y на рис. 4), затем номер байта в строке (переменная X на рис. 4). Сохранение всего банка эквивалентно отображению одной строки дисплея (линейки).
Каждый байт оперативной памяти отображается в виде вертикальной полосы размером 8 пикселей. Старший пиксель в строке соответствует младшему значащему биту, а самый низкий пиксель соответствует старшему значащему биту памяти. В стандартном режиме отображения установка бита в байте памяти соответствует отображению черного пикселя, а обнуление соответствует его отключению.
При вводе байтов в память SRAM, контроллер PCD8544 автоматически увеличивает счетчики строк и столбцов. Существует два режима автоматической модификации счетчика: вертикальный и горизонтальный — устанавливаются с помощью команды «Function Set». Вертикальный режим показан на рис. 5.
Рис. 5. Вертикальная адресация памяти изображений в контроллере PCD8544
Каждый раз, когда байт сохраняется, он увеличивается на один ряд строк. Когда достигается максимальное число строк, счетчик строк сбрасывается, а счетчик столбцов увеличивается на 1. При отправке 6 байтов 0xFF, начиная с номера строки, равного нулю, в первом левом столбце дисплея будет отображаться вертикальная полоса по всей высоте дисплея. Режим вертикальной адресации (рис. 6) можно использовать при сохранении полноэкранного растрового изображения.
Рис. 6. Горизонтальная адресация памяти изображений в контроллере PCD8544
После сохранения каждого байта счетчик столбцов увеличивается. При достижении максимального числа столбцов счетчик столбцов сбрасывается, а счетчик строк увеличивается на 1. Режим горизонтальной адресации очень удобен при работе в текстовом режиме. Режимы адресации могут свободно переключаться во время нормальной работы дисплея, и это не влияет на отображаемую информацию.
Контроллер принимает два набора команд: стандартную и расширенную, их описания перечислены в табл. 1 .
Табл . 1. Команды контроллера PCD8544 (согласно документации NXP)
инструкция | D/C | Байт команды | описание | ||||||||
DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0 | ||||
H=0 lub H=1 | |||||||||||
NOP | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | Ничего не делать | |
Function Set | 0 | 0 | 0 | 1 | 0 | 0 | PD | В | H | Уменьшенное энергопотребление (PD), адресация (V) и расширенные команды (H) | |
Write Data | 1 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | ОЗУ | |
H = 0 основной набор команд | |||||||||||
Reserved | 0 | 0 | 0 | 0 | 0 | 1 | X | X | Не использовать | ||
Display Control | 0 | 0 | 0 | 0 | 0 | 1 | D | 0 | Е | Конфигурация дисплея | |
Reserved | 0 | 0 | 0 | 0 | 1 | х | х | X | X | Не использовать | |
0 | 0 | 1 | 0 | 0 | 0 | У2 | Y1 | Y0 | Установка счетчика строк 0 … 5 | ||
Set X address | 0 | 1 | X6 | X5 | Х4 | X3 | X2 | X1 | X0 | Установка счетчика столбцов 0 … 83 | |
H = 1 расширенный набор команд | |||||||||||
Reserved | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | Не использовать | |
Reserved | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | X | Не использовать | |
Temperature Control | 0 | 0 | 0 | 0 | 0 | 0 | 1 | ТС1 | TC0 | Температурный коэффициент | |
Reserved | 0 | 0 | 0 | 0 | 0 | 1 | х | X | X | Не использовать | |
Bias System | 0 | 0 | 0 | 0 | 1 | 0 | BS2 | BS1 | BS0 | Настройка BIAS | |
Reserved | 0 | 0 | 1 | X | X | X | х | X | X | Не использовать | |
Set Vop | 0 | 1 | Vop6 | Vop5 | Vop4 | Vop3 | Vop2 | Vop1 | Vop0 | Матричное напряжение питания (контраст) |
Описание параметров из таблицы 1.
знак | Когда 0 | Когда 1 |
PD | Активная система | Режим низкой мощности |
В | Горизонтальная адресация | Вертикальная адресация |
H | Базовый набор инструкций | Расширенный набор команд |
D E 0 1 1 0 1 1 | Дисплей выключен Нормальный режим Все сегменты освещены. Дисплей в инверсии | |
TC1 TC00 0 0 1 1 0 1 1 | VLCD температурный коэффициент 0 VLCD температурный коэффициент 1 VLCD температурный коэффициент 2 (стандарт) VLCD температурный коэффициент 3 |
Команда Function Set предназначена для программного переключения дисплея в режим пониженного энергопотребления, обращения к памяти RAM и установки набора команд (обычный или расширенный).
Контрастность дисплея зависит от напряжения, подаваемого на ЖК-матрицу, и устанавливается командой Set Vop. Можно установить 128 значений, но используемый диапазон регулировки составляет от 30 до 90.
Команда «Контроль температуры» позволяет установить одну из 4 предопределенных характеристик компенсации контрастной температуры. Коэффициент 2 (TC1 = 1, TC0 = 0) может использоваться для большинства приложений. Для дисплея телефона Nokia 3310 значение параметра BIAS должно быть 3.
Цифровой мультиметр AN8009
Большой ЖК-дисплей с подсветкой, 9999 отсчетов, измерение TrueRMS…
Дисплей ехал ко мне 4 недели. Заказывал 2 штуки отдельными заказами, иначе доставка сильно дорожала. Но приехали оба в одном стандартном желтом конверте с «пупырками».
Заказывал версию на 5 вольт. Судя по фото со страницы товара, от 3,3-вольтовой версии она отличается только наличием стабилизатора. Так что лучше брать ее. Разница в стоимости не значительна, и в 3,3 ее можно переделать просто установкой перемычки.
А вот подсветка — сделана одинаково. От 3,3В, с резистором на 10Ом — потребляет 30мА. От 5 вольт — я ставил два по 100Ом в параллель, получилось 40мА и хорошая яркость, считаю эти величины оптимальными. Подсветка равномерная.
Фото в работе с примера этой библиотеки:
Полутона на картинке — обусловлены динамической картинкой. Сегменты «зажигаются» моментально, а вот «гаснут» — примерно четверть секунды.
Конкретно в моих экземплярах — картинка была очень плохой, поэтому пришлось чуть поправить контраст. Для этого нужно открыть файл LCD_UC1609.H, найти соответствующую строку и заменить значение на 0x1B.
Так выглядит измененная строка:
#define UC1608_DEFAULT_GN_PM 0x1B
Еще одна хорошая библиотека. Тут уже контраст можно задать в программе, при вызове метода begin.
Углы обзора — такие же, как и в текстовом LCD. С боков еще терпимо, а вот вверх и вниз — уже при 45 градусов — уходит в негатив.
Картинка под углами 45 градусов:
Размеры, со страницы товара:
в сравнении с 1602
Плата сзади:
Перемычка J1 закорачивает стабилизатор 3,3 Вольт.
J2 — соединяет вывод анода подсветки и выход стабилизатора.
J3 — закорачивает выводы катода подсветки и GND.
R2 и R3 — соединенные параллельно резисторы подсветки, включены в цепь катода.
Цоколевка соответствует модулю дисплея на контролере ST7735.
Дисплей по своему интересный, но за такие деньги хочется лучшего контраста и быстродействия.
UPD: в комментариях была озвучена идея использовать дисплей, как экономичный индикатор, если отключить подсветку.
Вот как ин работает в инверсии, при среднем дневном освещении:
Напоминает первые мобильники с ТФТ дисплеями.
А вот так — если подсветка включена через резистор 5,6кОм на 5В. Видно намного лучше.
Когда отсоединил Vcc индикатора от питания — он продолжал работать, питания хватало от сигнальных линий.Ток потребления без подсветки — 3мА.
По току потребления:
Когда Vcc отключен и линии даных подключены напрямую к ардуине — дисплей инициализируется и работает, Потребление на Vcc, при его подключении, составляет 3мА. Но когда лини даных подключены к 3,3В — потребление по Vcc падает до 700мкА.
Видно, входы контролера не сильно толерантны к 5 вольтам.
В этой записи хочу поделиться опытом и готовыми библиотеками для работы с графическим дисплеем от Nokia 3110 (5110) для подключения к микроконтроллерам STM32, а, в частности, к STM32F100. Однако, не составит труда переделать для работы с микроконтроллерами семейства STM32F4. Давайте для начала разберемся Как работает графический дисплей.
Экран от Nokia 3110 представляет собой графический жидко-кристаллический дисплей с размером видимой части 84 на 48 точек. Управляется матрица контроллером PCD8544, даташит на него в конце статьи. Связь с контроллером осуществляется через последовательный интерфейс, что-то на подобии SPI.
Для управления дисплеем необходимо подключить следующие линии:
1) RST – Reset – линия сброса. Для сброса необходимо подать сюда 0. В рабочем режиме линия должна быть подтянута к Vcc.
2) CE – Chip Enable – линия выбора устройства на шине данных. При передачи данных дисплею – опустить к общему (лог.0). В режиме ожидания – к Vcc.
3) DC – Data/Command – выбор типа данных – передача команды (лог. 0) или информации в память дисплею (лог.1).
4) Din – Data in – линия данных.
5) Clk – Clock – линия для такта.
6) Vcc и Gnd – линии для питания.
Хочу обратить внимание, что дисплею и уровни на входе должны быть 3.3В, хотя встречаются и на 5В. Этот момент необходимо уточнять в каждом конкретном случае.
Итак, подключаем согласно этому к отладочной плате STM32F100: RST – PA0, CE – PA1, DC – PA2, Din – PA3, Clk – PA4.
Вся матрица экрана разделена на 6 строк (банков) и 84 столбца, т.е. получается 84 байта в ряду. Передача информации происходит побайтно. Передается вначале старший бит.
А вот так выглядит адресация в памяти дисплея:
И, конечно, контроллер поддерживает автоматическое смещения указателя адреса при непрерывной передачи данных. Есть два варианта: горизонтальное смещение и вертикальное. Будем использовать горизонтальное (в клеточках – номер байта при непрерывной передачи):
Теперь перейдем к разбору как оживить дисплей. Я использовать буду CooCox IDE, но это не принципиально. Как обычно, для удобства, я сделал структуру, в которой указываются линии подключения дисплея, внешняя функция задержки и указатель на переменную, где хранится информация о точках на экране.
N5110_TypeDef LCD = { {GPIOA, GPIO_Pin_0}, {GPIOA, GPIO_Pin_1}, {GPIOA, GPIO_Pin_2}, {GPIOA, GPIO_Pin_3}, {GPIOA, GPIO_Pin_4}, Delay_US, &m }; |
где m это матрица для хранения информации о точках экрана:
Для инициализации интерфейса необходимо вызвать N5110_Init() и передать указать на структуру:
Хочу обратить внимание, что все настройки портов и пинов выполнятся автоматически. При использовании других контроллеров (не F100), необходимо будет переделать эту функцию.
Ну и все, дисплей готов к работе. Опишу небольшое API моей библиотеки:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
Нарисовать символ размером 6*8 точек. Для добавления символов см. font.h N5110_WriteChar(N5110_TypeDef* lcd, uint8_t x, uint8_t y, uint8_t c); Тоже самое, что и предыдущая функция, только выводит инверсно символ N5110_WriteCharInv(N5110_TypeDef* lcd, uint8_t x, uint8_t y, uint8_t c); Очищает экран N5110_Clear(N5110_TypeDef* lcd); Переход к произвольной точке на экране. Отсчет от 0 N5110_GotoXY(N5110_TypeDef* lcd, uint8_t X, uint8_t Y); Вывести на экран строку N5110_WriteString(N5110_TypeDef* lcd, uint8_t x, uint8_t y, uint8_t *s); Выводит число на экран N5110_WriteDec(N5110_TypeDef* lcd, uint8_t x, uint8_t y, uint16_t buffer); Перерисовать экран N5110_Refresh(N5110_TypeDef* lcd); Нарисовать произвольную точку N5110_DrawPixel(N5110_TypeDef* lcd, uint8_t X, uint8_t Y); Очищает произвольную точку на экране N5110_ClearPixel(N5110_TypeDef* lcd, uint8_t X, uint8_t Y); Рисует линию N5110_DrawLine(N5110_TypeDef* lcd, uint8_t X1, uint8_t Y1, uint8_t X2, uint8_t Y2); Рисует окружность N5110_DrawCircle(N5110_TypeDef* lcd, uint8_t X, uint8_t Y, uint8_t R); Рисует прямоугольник N5110_DrawRect(N5110_TypeDef* lcd, uint8_t X1, uint8_t Y1, uint8_t X2, uint8_t Y2); Рисует «часовую стрелку» N5110_DrawClock(N5110_TypeDef* lcd, uint8_t X, uint8_t Y, uint8_t r, uint8_t ang); |
Стоит уделить внимание N5110_Refresh(). Эта функция перерисовывает экран по той информации, что содержится в переменной m. Поэтому, можно напрямую изменять ее и потом перерисовывать экран, так можно немного оптимизировать анимацию.
В заключении хочу сказать, что эта библиотека не является панацеей, и скорее всего часть функций можно будет выкинуть в реальном проекте, либо, наоборот, добавить. Ну и, конечно, там есть куча мест, где стоит оптимизировать алгоритм, но это уже я оставляю на читателя. Если есть вопросы по работе, то прошу их задавать не стесняясь 🙂
Файлы:
1) Проект в CooCox IDE Nokia 5110 LCD vs STM32
2) Даташит на контроллер дисплея PCD8544
3) Видео на YouTube Nokia 5110 LCD vs STM32
Компанией «Терраэлектроника» разработан дисплейный модуль TE-ULCD56, основой которого являются 5,6” цветной графический дисплей с сенсорным экраном и 32-разрядный ARM7-микроконтроллер LPC2478 компании NXP.
В память программ микроконтроллера на этапе изготовления загружается библиотека графических функций. Функции могут быть вызваны из прикладной программы при помощи SPI-команд. Это значительно упрощает формирование изображения на TFT-дисплее, а также обслуживание сенсорного экрана. Имеется возможность обновления загруженной библиотеки. Карта microSD предназначена для хранения графических объектов пользователя.
Рис. Дисплейный модуль TE-ULCD56 |
Обслуживание цветного графического дисплея с помощью специализированного 32-разрядного микроконтроллера позволяет разделить функции отображения информации и управления и дает разработчику возможность обеспечить современный графический интерфейс как в 32-разрядных информационно-управляющих системах, так и в 16- и 8-разрядных.
Модуль TE-ULCD56 включает:
TE-ULCD56 является бюджетным решением, готовым для интеграции в промышленные, торговые, бытовые терминалы и устройства, которые для управления требуют формирования цветных графических изображений и интерактивной связи с оператором. С его помощью возможно добавить современный и дружественный графический интерфейс к уже существующим системам управления.
Источник: Терраэлектроника
Новый экран дисплея STM32 Nucleo от STMicroelectronics использует доступность микроконтроллеров (MCU) STM32G0. Новый экран SPI X-NUCLEO-GFX01M1 поддерживается в новейшем программном обеспечении TouchGFX версии 4.15.0, в котором представлены дополнительные новые функции, включая поддержку недорогих микросхем SPI Flash без отображения памяти.
Проектирование с помощью STM32G0 и TouchGFX позволяет разработчикам ориентироваться на стоимость материалов от 5 долларов, чтобы добавить небольшой графический дисплей в любой проект.Таким образом, простые устройства, такие как таймеры, контроллеры и бытовая техника, могут предложить пользователю опыт, подобный смартфону.
Новый экран X-Nucleo-GFX01M1 поддерживается новым пакетом X-cube-display, который предлагает простой пример «hello world». Щиток содержит 2,2-дюймовый QVGA (320 × 240) SPI-дисплей, 64-мегабитную вспышку SPI NOR и джойстик и готов к использованию с различными платами разработки микроконтроллеров STM32, такими как NUCLEO-G071RB. STM32G071RB — это основной микроконтроллер Arm Cortex-M0 +, который объединяет до 128 кбайт флэш-памяти, 36 кбайт SRAM, обширные коммуникационные интерфейсы, аналоговые периферийные устройства, быстрый ввод / вывод, идентификатор безопасности оборудования и контроллер подачи питания USB Type-C
.Новейшее программное обеспечение TouchGFX основано на частичном буфере кадра TouchGFX Engine, который может уменьшить занимаемое графическим интерфейсом пользователя ОЗУ до 90% и обеспечивает простой пользовательский интерфейс всего лишь с 16-20 КБ внутренней ОЗУ микроконтроллера. Новый алгоритм рендеринга повышает производительность графического интерфейса пользователя, реализуя частичные обновления экрана в оптимизированном порядке, чтобы разрешить дополнительные обновления и избежать визуально отвлекающих эффектов разрыва. Кроме того, новая поддержка SPI Flash без отображения памяти позволяет более сложным графическим интерфейсам использовать дешевое внешнее хранилище для требовательных к памяти графических ресурсов, таких как изображения и шрифты.
Чтобы упростить создание прототипов пользовательского интерфейса, в TouchGFX Designer доступен оптимизированный шаблон приложения для платы и дисплея Nucleo STM32G071.Также можно добавить RTOS в установку, если это необходимо, и использовать TouchGFX Generator для перехода на другое оборудование.
Теперь доступны все элементы, включая пакет X-cube-display и TouchGFX 4.15.0 с примерами кода для запуска G071RB. Продукты X-NUCLEO-GFX01M1 и STM32G0 находятся в массовом производстве и доступны через обычные каналы сбыта ST.
Кроме того, новый виджет графика упрощает отображение последовательных данных с использованием линий, полос, графиков с областями, гистограмм или комбинированных визуализаций.Виджет без проблем работает с любым микроконтроллером STM32, и разработчики могут настраивать такие аспекты, как цвета и макет, с помощью TouchGFX Designer.
Также новинка TouchGFX 4.15.0, полная поддержка STM32H725 «из коробки» позволяет разработчикам запускать графику микропроцессорного класса на микроконтроллерах ST Cortex-M7. STM32H725 с частотой ядра 550 МГц, технологией Chrom-ART Accelerator ™ от ST для более высокой производительности графики, интерфейсом Octal-SPI для высокоскоростного подключения к внешней флэш-памяти и оперативной памяти и контроллером XGA TFT-LCD — это новый графический флагман для STM32. семья.TouchGFX Designer содержит образец исходного кода, а демонстрационное видео доступно здесь.
Женева, 12 октября 2020 г. — STMicroelectronics является пионером в области HMI вещей с новым экраном дисплея STM32 * Nucleo, который использует доступность микроконтроллеров (MCU) STM32G0. Новый экран X-NUCLEO-GFX01M1 SPI поддерживается последней версией программного обеспечения TouchGFX 4.15.0, в котором представлены дополнительные новые функции, включая поддержку недорогих микросхем SPI Flash без отображения памяти.
Проектирование с помощью STM32G0 и TouchGFX позволяет разработчикам ориентироваться на стоимость материалов от 5 долларов, чтобы добавить небольшой графический дисплей в любой проект. Таким образом, простые устройства, такие как таймеры, контроллеры и бытовая техника, могут предложить пользователю опыт, подобный смартфону.
Новый экран X-Nucleo-GFX01M1 поддерживается новым пакетом X-cube-display, который предлагает простой пример «hello world».Щиток содержит 2,2-дюймовый QVGA (320 × 240) SPI-дисплей, 64-мегабитную вспышку SPI NOR и джойстик и готов к использованию с различными платами разработки микроконтроллеров STM32, такими как NUCLEO-G071RB. STM32G071RB — это основной микроконтроллер Arm ® Cortex ® -M0 +, который объединяет до 128 кбайт флэш-памяти, 36 кбайт SRAM, обширные коммуникационные интерфейсы, аналоговые периферийные устройства, быстрый ввод / вывод, аппаратный идентификатор безопасности и USB Type-C ™ Power. Контроллер доставки.
Новейшее программное обеспечение TouchGFX основано на частичном буфере кадра TouchGFX Engine, который может уменьшить занимаемое графическим интерфейсом пользователя ОЗУ до 90% и обеспечивает простой пользовательский интерфейс всего лишь с 16-20 КБ внутренней ОЗУ микроконтроллера.Новый алгоритм рендеринга повышает производительность графического интерфейса пользователя, реализуя частичные обновления экрана в оптимизированном порядке, чтобы разрешить дополнительные обновления и избежать визуально отвлекающих эффектов разрыва. Кроме того, новая поддержка SPI Flash без отображения памяти позволяет более сложным графическим интерфейсам использовать дешевое внешнее хранилище для требовательных к памяти графических ресурсов, таких как изображения и шрифты.
Чтобы упростить создание прототипов пользовательского интерфейса, в TouchGFX Designer доступен оптимизированный шаблон приложения для платы и дисплея Nucleo STM32G071.Также можно добавить RTOS в установку, если это необходимо, и использовать TouchGFX Generator для перехода на другое оборудование.
Теперь доступны все элементы, включая пакет X-cube-display и TouchGFX 4.15.0 с примерами кода для запуска G071RB. Продукты X-NUCLEO-GFX01M1 и STM32G0 находятся в массовом производстве и доступны через обычные каналы сбыта ST.
Кроме того, новый виджет графика упрощает отображение последовательных данных с использованием линий, полос, графиков с областями, гистограмм или комбинированных визуализаций.Виджет без проблем работает с любым микроконтроллером STM32, и разработчики могут настраивать такие аспекты, как цвета и макет, с помощью TouchGFX Designer.
Также новинка TouchGFX 4.15.0, полная поддержка STM32H725 «из коробки» позволяет разработчикам запускать графику микропроцессорного класса на микроконтроллерах ST Cortex-M7. STM32H725 с частотой ядра 550 МГц, технологией Chrom-ART Accelerator ™ от ST для более высокой производительности графики, интерфейсом Octal-SPI для высокоскоростного подключения к внешней флэш-памяти и оперативной памяти и контроллером XGA TFT-LCD — это новый графический флагман для STM32. семья.TouchGFX Designer содержит образец исходного кода, а демонстрационное видео доступно здесь.
Для получения дополнительной информации и бесплатной загрузки TouchGFX посетите http://www.st.com/x-cube-touchgfx.
Вы также можете прочитать наш блог по адресу https://blog.st.com/x-nucleo-gfx01m1/
СвязанныеПродукты становятся богаче за счет улучшенного взаимодействия с пользователем, встраивания новых дисплеев большего размера и замены дисплеев более старых сегментов дисплеями с низким и высоким уровнем цветности.
В этой главе рассматриваются некоторые соображения, которые следует учитывать при выборе правильного дисплея для вашего продукта со встроенным графическим интерфейсом.
Различные типы дисплеев
Как правило, TouchGFX работает на дисплеях любого типа и не зависит от технологий дисплея, интерфейсов, углов обзора, яркости и т. Д.
Выбор подходящей технологии дисплея может быть сложным поскольку ключевые факторы на каждом дисплее различны. Следующая глава посвящена различным технологиям и, надеюсь, поможет вам в правильном направлении.
Каждый вид дисплея состоит из строк и столбцов пикселей, которыми можно управлять по-разному, имея внутренний и / или внешний контроллер дисплея и ОЗУ для кадровых буферов. В некоторых технологиях каждый пиксель необходимо часто обновлять по сравнению с другими технологиями, где в этом нет необходимости, поскольку обновления происходят только тогда, когда что-то изменяется в графическом интерфейсе.
Существует огромное количество различных технологий отображения. Некоторые из наиболее часто используемых технологий отображения описаны ниже.
TFT — это тонкопленочный транзистор, вариант ЖК-дисплеев с активной матрицей. LCD-TFT широко используются во встраиваемых продуктах, поскольку они доступны во многих различных разрешениях, размерах, интерфейсах, ценовых диапазонах и т. Д.
Некоторые варианты TFT-LCD — это панели TN и IPS. Примерами IPS TFT-LCD являются STM32F769 DISCO и STM32H747 DISCO, оба с ЖК-дисплеем MIPI-DSI TFT IPS 800 * 480. Примерами дисплеев TFT-LCD TN являются STM32F746G DISCO и STM32H7B3I-DK.Обе технологии имеют разное качество, но некоторые различия могут заключаться в цветовом представлении и углах обзора, где IPS-панели часто являются лучшими.
Пример слоев LCD-TFT
MIP означает память в пикселях, в которой используется пиксельная технология, которая требует питания / данных только тогда, когда что-то меняется на экране. Дисплеи MIP отличаются низким энергопотреблением и имеют графический интерфейс от низкого до полноцветного.
Дисплеи eInk — это малоцветные дисплеи, идеально подходящие для приложений с низким энергопотреблением, широкими углами обзора и удобочитаемостью. Разработчик TouchGFX SDATAWAY демонстрирует дисплей eInk, на котором запущено приложение TouchGFX на STM32F412, здесь: https://www.touchgfx.com/cases/e-ink/
E-Ink
Дисплей подключен к MCU через различные типы интерфейсов. Интерфейсы дисплея различаются по разным параметрам, и в разделе ниже рассматриваются параметры, связанные с графикой, такие как количество необходимых контактов, максимальная пропускная способность, поддерживающая различные разрешения.
TouchGFX может использовать любой интерфейс дисплея, а микроконтроллеры STM32 предлагают широкий спектр интерфейсов дисплея, подключаемых к Motorola 6800, Intel 8080, SPI, RGB-TFT и MIPI-DSI.
Интерфейс | Кол-во контактов | Целевые разрешения | Макс.пропускная способность | Преимущества | Недостатки |
---|---|---|---|---|---|
SPI | 4 * | До 480 * 272 | 16 МГц | аппаратный интерфейс, быстрее, чем I2C,||
Параллельный 8080/6800 (FMC) | 8/16 * | До 480 * 272 | |||
RGB-TFT (LTDC) | 8/18 / 24 * | До 1280 * 800 | Высокая производительность, низкая стоимость | Большое количество контактов, параллельная связь может вызвать проблемы с ЭМС, может потребоваться более высокая тактовая частота | |
MIPI-DSI (LTDC) | 4 / 10 | До 1280 * 800 | 80 Мбит / с-1.5 Гбит / с | Высокая производительность, малое количество выводов, | Сложные протоколы и драйверы |
LVDS ** | 1366 * 768 | Низкие ЭМС / помехи, высокая скорость | Необходим мост |
Яркость часто измеряется в канделах / м².Подсветка может быть самой энергоемкой частью дисплея. При солнечном свете потребуется около 600 кд / м2. Часто более высокая яркость увеличивает температуру, сводя к минимуму срок службы светодиодов.
При встраивании дисплея в продукт важно предвидеть и знать, какие позиции просмотра может занимать пользователь. На некоторых дисплеях с определенных позиций просмотра может происходить инверсия цвета. Это означает, что установка дисплея в правильное положение, позволяющее пользователю работать с графическим интерфейсом и одновременно видеть правильные цвета, разработанные графическим дизайнером, может быть сложной задачей.
Инверсия цвета может происходить на панелях TN. Добавление пленки SWV может помочь увеличить углы обзора.
Результирующие цвета с разных позиций просмотра
Срок службы определяется как время до тех пор, пока дисплей не достигнет половинной яркости при 25 градусах. Если у вашего продукта большой жизненный цикл, то этот параметр нужно обязательно учитывать.
Плотность пикселей определяет, сколько пикселей отображается на дюйм или квадратный дюйм.Выбор правильной плотности пикселей может зависеть от ожиданий конечного пользователя, среды, потребностей дизайна и т. Д. Если рассматривать это в перспективе, мобильный телефон высокого класса работает с экраном 6,1 дюйма 2340×1080 с плотностью пикселей на квадратный дюйм 178 500, в то время как обычно используемый 5-дюймовый TFT-дисплей с разрешением 800×480 имеет 34,816 пикселей на квадратный дюйм.
Низкая, средняя и высокая плотность пикселей
Некоторые стандартные разрешения, размеры дисплеев и плотности пикселей, измеряемые в пикселях на квадратный дюйм (PPI 2 ):
QVGA 320 * 240 | 2.4 дюйма (27,777 PPI 2 ) | 3,5 дюйма (13061 PPI 2 ) |
WQVGA 480 * 272 | 4,3 дюйма (16,462 PPI 2 ) | 5 дюймов (12,175 PPI 2 ) |
HVGA 480 * 320 | 3,5 дюйма (27,167 PPI 2 ) | |
VGA 640 * 480 | 5,7 дюйма (19,698 PPI 2 ) 901 | 6,4 (15,625 PPI 2 ) |
WVGA 800 * 480 | 4 дюйма (54400 PPI 2 ) | 5 дюймов (34,816 PPI 2 ) | 600218VGA | 7 дюймов (28,746 PPI 2 ) | 10,1 дюймов (13,808 PPI 2 ) |
Для некоторых приложений может быть трудно увидеть разницу, если на дисплей не смотреть очень внимательно .Примеры плотности пикселей: STM32F476DISCO с 16 462 PPI 2 и STM32F769DISCO с 54 400 PPI 2 .
Приведенный выше пример с различной плотностью пикселей может в некоторых случаях влиять на динамический диапазон цветов и сглаживание:
Динамический диапазон цветов — это соотношение между двумя контрастирующими цветами, такими как черный и белый. В приведенном выше примере синий и белый цвета содержат разные уровни белого и синего. Изображение слева имеет более низкую плотность пикселей, а изображение справа имеет больше пикселей, чтобы показать все представленные цвета, создавая более плавный переход между разными цветами и краями.
Если плотность пикселей слишком мала, может появиться эффект ступенек. Использование сглаживания в приложении позволяет сгладить эти края лестницы на изображении. При взгляде на первые два синих круга появляется эффект лестницы, поскольку плотность пикселей не позволяет дисплею отображать достаточно пикселей, чтобы иметь достаточно высокий цветовой диапазон, обеспечивающий достаточно высокое сглаживание.
Сглаживание
При принятии решения, какой дисплей использовать, жизненно важно учитывать среду.Вот несколько вопросов, которые стоит задать себе:
Ответы на эти вопросы дадут вам лучшее представление о том, какую сенсорную технологию выбрать и даже если сенсорный ввод требуется.
TouchGFX работает как на сенсорных, так и на несенсорных дисплеях, а графическим интерфейсом TouchGFX можно управлять с помощью кнопок, рук и голосовых жестов.
На сегодняшний день на рынке доступны различные сенсорные технологии, и некоторые их примеры: резистивные, емкостные (поверхностные, проецируемые), сенсорная SAW, инфракрасная сенсорная. В этом разделе рассматриваются только некоторые из этих технологий:
Это одна из самых популярных сенсорных технологий.Он поставляется с двумя технологиями распознавания:
Большинство плат STM32 DISCO используют емкостное касание, некоторые примеры — STM32H7B3I DISCO, STM32H750 DISCO, STM32F746G DISCO.
Resistive Touch — это простая технология, активируемая механическим давлением, для которой требуется только АЦП или простой сенсорный контроллер.Часто это низкая цена из-за срока погашения. Поверхность более защищена от царапин и разрывов, поэтому ее труднее защитить от вандализма. Он также имеет более низкую читаемость при солнечном свете. Плата STM32F429 DISCO использует резистивное касание, доступное с приложением TouchGFX.
Часто, если GUI управляется кнопками, просто отображает изображения / видео или управляется извне другим устройством, то добавление сенсорного экрана к продукту может даже не иметь значения. Если не добавлять сенсорный слой к дисплею, это снизит цену.
Дисплеи с интерфейсами Motorla 6800, Intel 8080, SPI или MIPI-DSI обычно включают RAM (GRAM), размер которой равен 1 полному буферу кадра. Эти типы дисплеев могут подключаться к MCU через SPI, FMC или DSI-host (LTDC). Вторая RAM (кадровый буфер) требуется внешне по отношению к RAM дисплея, и она может находиться в MCU или во внешней RAM.
Дисплей MIPI-DSI
В некоторых случаях необходимость во внешней RAM (внешней по отношению к MCU) для хранения кадрового буфера не требуется, и, таким образом, используется доступная внутренняя RAM в MCU.Если размер RAM MCU меньше 1 полного буфера кадра, использование функции частичного буфера кадра TouchGFX является вариантом, позволяющим очень мало занимать место в буфере кадра.
Дисплей SPI
Самая распространенная форма пикселя — квадратная, но на некоторых дисплеях используются неквадратные пиксели. Соотношение пикселей — это соотношение между шириной пикселя и высотой пикселя. Соотношение сторон с использованием квадратного пикселя с шириной 100 пикселей и высотой 100 пикселей, следовательно, составляет 1/1.Но неквадратные пиксели приводят к другому соотношению сторон пикселя. Если графический дизайнер не принимает это во внимание, отображаемые растровые изображения могут быть растянуты, как в примере ниже.
Растянутые растровые изображения
Поскольку дисплей является лицом вашего продукта со встроенным графическим пользовательским интерфейсом, добавление закрывающей линзы может улучшить внешний вид. Защитная линза может улучшить дизайн, устойчивость к царапинам, ударопрочность, цвета и т. Д.
мкГи
Модуль графического интерфейса с открытым исходным кодом
для встроенных систем
НОВОСТИ Добавить комментарий Обновить Комментарий Утвердить и ответить
Дата | Событие |
06.08.17 | Сайт переехал на новый хост. Дальнейшие обновления в процессе |
13.9.15 | Форум добавлен для обсуждения 🙂 |
22.3.15 | µGUI теперь доступен на GitHub: https://github.com/achimdoebler/UGUI |
Что такое μGUI
µGUI — это бесплатная графическая библиотека с открытым исходным кодом для встроенных систем. Он не зависит от платформы и может быть легко перенесен практически на любую микроконтроллерную систему.Пока дисплей способен отображать графику, µGUI не ограничивается определенной технологией отображения. Поэтому поддерживаются такие технологии отображения, как ЖКД, TFT, E-Paper, LED или OLED. Весь модуль состоит из двух файлов: ugui.c и ugui.h .
Функции μGUI
Требования к μGUI
μGUI не зависят от платформы, поэтому нет необходимости использовать определенную встроенную систему
.Для использования μGUI необходимы только два требования:
Примеры проектов
Различные примеры проектов можно найти на моем канале YouTube :
http://www.youtube.com/playlist?list=PLn9k3eL_sqV1Y1FwUu0qFC6u7m6rQe9_V
Примеры пользователей
Пример PSoC5 Андреса Наваса
Список дел
В моем списке дел есть следующие функции:
Поддержка
Я потратил много времени на написание µGUI.Если вам нравится этот проект, пожалуйста, поддержите его!
Не стесняйтесь…
Скачать
Последняя версия:
Старые версии:
Примеры проектов
компаний, использующих µGUI
STM32F103ZET6 поставляется с 3.2-дюймовый графический ЖК-дисплей с контроллером ILI9320. Оборудованный ЖК-дисплей способен отображать 252144 цвета при работе в 18-битном режиме. Мы собираемся запустить его в 16-битном режиме, поэтому мы ограничиваем его до 65 тысяч цветов.
Драйвер ЖК-дисплеяоснован на существующем коде, найденном в Интернете, первоначально разработанном для платы STM3210E. Требовались лишь незначительные изменения, такие как назначение правильных штифтов управления.
ПлатаSTM32F103ZET6 была разработана таким образом, чтобы ЖК-дисплей был подключен к гибкому контроллеру статической памяти (FSMC) STM32.FSCM позволяет подключать большинство типов внешней параллельной памяти, такие как ROM, SRAM, NOR Flash, NAND Flash. ЖК-дисплей, управляемый ILI9320, подключается в 16-битном режиме к подстранице FSMC Bank1 4 th и рассматривается как память SRAM, поэтому после настройки управление ЖК-дисплеем становится таким же, как запись в SRAM. Память ЖК-дисплея начинается с адреса 0x6C000000
#define LCD_BASE ((u32) (0x60000000 | 0x0C000000)) #define LCD ((LCD_TypeDef *) LCD_BASE)ЖК-дисплей
управляется с помощью индексного регистра, который указывает на выбранный регистр, и при следующей операции мы можем записать в его память.Для этого используется простая структура:
, что позволяет регистрировать запись с помощью простой процедуры:
voidLCD_WriteReg (u8 LCD_Reg, u16 LCD_RegValue) { // Записываем 16-битный индекс, затем записываем регистр LCD-> LCD_REG = LCD_Reg; LCD-> LCD_RAM = LCD_RegValue; }
Для управления ЖК-дисплеем используется 152 регистра, и большинство из них необходимо инициализировать перед доступом к ЖК-дисплею. Как я уже упоминал, это уже сделано в ЖК-библиотеке, пока не о чем беспокоиться. В прилагаемом проекте вы найдете рабочий пример ЖК-дисплея, который отображает растровое изображение, хранящееся в MCU SRAM.
Нажимая одну из четырех кнопок, вы можете циклически переключаться между другими функциями, такими как рисование простых фигур, отображение текста и рисование синусоидальной волны. Надеюсь, вы найдете это полезным. STM32F103ZET6GLCD
2006 — ГРАФИЧЕСКАЯ ЖКИ СХЕМА Аннотация: Интерфейс микроконтроллера 16F877A с ЖК-экраном с графическим ЖК-дисплеем Бесплатные проекты микроконтроллера 16F877A для графического ЖК-дисплея PIC 16f877A для отображения учебника Интерфейс с графическим ЖК-дисплеем 16f877A в сборе EB043-00-1 16F877A | Оригинал | EB043-30-1 EB043-00-1 74HC4050D ГРАФИЧЕСКАЯ ЖКИ-СХЕМА Интерфейс микроконтроллера 16F877A с жк-дисплеем графический ЖК-экран 16F877A микроконтроллер бесплатные проекты для PIC 16f877A графический ЖК-дисплей для отображения учебника ГРАФИЧЕСКИЙ ЖК-интерфейс 16ф877А сборка EB043-00-1 16F877A | |
2013 — Нет в наличии Резюме: нет текста аннотации | Оригинал | AN4687 | |
1995 — вычитатель полного двоичного разряда sgs-thomson Резюме: ST62 ST62E25 | Оригинал | AN677 / авторизованный вычитатель полного двоичного разряда sgs-thomson ST62 ST62E25 | |
2006 — бесплатные проекты для PIC 16f877A Аннотация: исходный код для PIC 16f877A для взаимодействия с проектами без ЖК-дисплея для PIC 16f877A с использованием c EB043 ГРАФИЧЕСКАЯ СХЕМА ЖК-дисплея free pic 16f877a схема микроконтроллера 16F877A EB043-30-1 EB043-00-1 микроконтроллера 16F877A | Оригинал | EB043-30-1 EB043-00-1 74HC4050D бесплатные проекты для PIC 16f877A исходный код PIC 16f877A для взаимодействия с lcd бесплатные проекты для PIC 16f877A с использованием c EB043 ГРАФИЧЕСКАЯ ЖКИ-СХЕМА бесплатная диаграмма pic 16f877a 16F877A микроконтроллер EB043-30-1 EB043-00-1 микроконтроллера 16F877A | |
1995 — прямоугольный генератор Резюме: ST62 ST62E25 | Оригинал | AN677 / торизованный генератор прямоугольных сигналов ST62 ST62E25 | |
2004 — Lite 5200 Аннотация: графическое представление вида операций в c AM29LV065D AN2551 схема spi flash программатора AN2458 AN2757 MPC5200 MPC5200 схема rtc_demo | Оригинал | AN2757 MPC5200 Lite5200 графическое представление вида операций в c AM29LV065D AN2551 схема программатора spi flash AN2458 AN2757 Схема MPC5200 rtc_demo | |
2006 — МК-GT380B Резюме: mk-gt380t STK-AOB3202405 AGB64LV01-QC-E MK-AOB3202405N STK-GT380 DISPLAY DOBLE MK-GT380 | Оригинал | STK-AOB3202405 STK-GT380 MK-GT380B mk-gt380t STK-AOB3202405 AGB64LV01-QC-E MK-AOB3202405N STK-GT380 ДИСПЛЕЙ ДОБЛЬ MK-GT380 | |
2003 — код Verilog HDL для D Flipflop Аннотация: код Verilog для статического RAM 16v8. Руководство по программированию параллельно с последовательным преобразованием. Verilog CY39100V CY37256V CY3138R62 20V8 16V8 CY3138 | Оригинал | CY3138 CY3138 Windows95 Quantum38K Код Verilog HDL для D Flipflop код Verilog для статической оперативной памяти Руководство по программированию 16v8 параллельное последовательное преобразование Verilog CY39100V CY37256V CY3138R62 20V8 16V8 | |
2009 — ПИП8000 Аннотация: j652 J653 J501 PMBUS | Оригинал | UM10337 PIP8000, PIP8000 UM10337 UM103Юридический j652 J653 J501 PMBUS | |
2008 — AGB64LV01-QC-E Резюме: нет текста аннотации | Оригинал | AGB64LV01-QC-E 1008MC-A1K AGB64LV01-QC-E) AGB64LV01-QC-E | |
2009 — Нет в наличии Резюме: нет текста аннотации | Оригинал | 0309STK-B1K | |
1996 — телефонная будка Motorola с двусторонней радиосвязью Резюме: нет текста аннотации | Оригинал | ||
2000 — БУКВЕННО-ЦИФРОВОЙ ЖК-ДИСПЛЕЙ Аннотация: DSP5680x DSP56F800 LCD буквенно-цифровой полосовой фильтр 100 Гц DSP56F80X голосовое управление с использованием Matlab «Bandpass Filters» | Оригинал | BR1547 / D DSP5680x DSP56F800 ЖК-БУКВЕННО-ЦИФРОВОЙ ДИСПЛЕЙ DSP5680x ЖК-дисплей буквенно-цифровой Полосовой фильтр 100 Гц DSP56F80X голосовое управление с использованием Matlab «Полосовые фильтры» | |
2003 — испытательный стенд с однопортовым плунжером vhdl Аннотация: FSM VHDL 16V8 20V8 CY3130 CY3130R62 CY37256V CY39100V бесплатный код vhdl | Оригинал | CY3130 CY3130 Windows95 Quantum38K однопортовый тестовый стенд RAM VHDL FSM VHDL 16V8 20V8 CY3130R62 CY37256V CY39100V бесплатный код vhdl | |
2008 — Нет в наличии Резюме: нет текста аннотации | Оригинал | 1008МК-А1К | |
2008 — M32C Аннотация: PC7501 | Оригинал | PC7501 M16C / 60 PC7501 REJ06J0048-0100 / Rev M32C | |
1998 — программный код для управления двигателем постоянного тока на языке ассемблера с помощью Аннотация: TMS320F240 MCK240 acpm750 bldc blac двигатель Контроллер скорости двигателя переменного тока УПРАВЛЕНИЕ СКОРОСТЬЮ ДВИГАТЕЛЯ ПОСТОЯННОГО ТОКА УПРАВЛЕНИЕ СКОРОСТЬЮ ДВИГАТЕЛЯ ПОСТОЯННОГО ТОКА С ИСПОЛЬЗОВАНИЕМ Управление скоростью двигателя IGBT с помощью бесщеточного dsp ACPM-750 | Оригинал | MCK240 TMS320F240 TMS320F240 16kслов RS-232 IMMC240 CH-6977 программный код для управления двигателем постоянного тока на языке ассемблера с acpm750 бессенсорный двигатель bldc blac Регулятор скорости двигателя переменного тока УПРАВЛЕНИЕ СКОРОСТЬЮ ДВИГАТЕЛЯ ПОСТОЯННОГО ТОКА С ИСПОЛЬЗОВАНИЕМ IGBT управление скоростью двигателя с помощью dsp ACPM-750 бесщеточный | |
2005 — Нет в наличии Резюме: нет текста аннотации | Оригинал | 32-битный DS-VS-63 | |
2003 — итрон вфд Аннотация: ЖК-дисплей 2×40 10X14 vfd-дисплей 2×40 «Вакуумные флуоресцентные дисплеи» itron GU280x16G-7806 дисплей 2×40 изображение данных 5X7 ЖК-дисплей vfd 5×7 ГРАФИЧЕСКАЯ ЖК-ДИАГРАММА | Оригинал | 280×16 GU280x16G-7806 itron vfd жк-дисплей 2×40 10X14 vfd дисплей 2×40 «Вакуумные люминесцентные дисплеи» итрон GU280x16G-7806 отображать изображение данных 2×40 ЖК-дисплей 5X7 vfd 5×7 ГРАФИЧЕСКАЯ ЖКИ-СХЕМА | |
отн. 511 Аннотация: 876-EA REL 551 876-BA SMS 010 База SMS REL511 | Оригинал | 034-BEN 500-я серия тер76-КА 876-AA 876-BA 876-CA 876-GA 876-DA 876-EA 876-FA rel 511 876-EA REL 551 876-BA СМС 010 SMS База REL511 | |
1998 — MCK 240 Комплект управления движением DEMO Аннотация: управление скоростью двигателя с помощью dsp dc to ac Программный код оценочной платы инвертора для языка ассемблера Управление двигателем постоянного тока с кодировщиком экранирования ACPM-750 Программа на языке ассемблера для управления скоростью постоянного тока TMS320F240 Программный код языка ассемблера Управление двигателем постоянного тока с использованием управления скоростью двигателя постоянного тока IGBT | Оригинал | MCK240 TMS320F240 Инструменты TMS320F240 CH-6977 Комплект управления движением MCK 240 ДЕМО управление скоростью двигателя с помощью dsp От постоянного тока к переменному току Оценочная плата инвертора программный код для управления двигателем постоянного тока на языке ассемблера с ACPM-750 кодировщик экранирования программа на языке ассемблера для управления скоростью постоянного тока Программный код на языке ассемблера Управление двигателем постоянного тока с УПРАВЛЕНИЕ СКОРОСТЬЮ ДВИГАТЕЛЯ ПОСТОЯННОГО ТОКА С ИСПОЛЬЗОВАНИЕМ IGBT | |
1999 — XCS20XL-PQ208 Аннотация: «Двухпортовая оперативная память» для видеоприложений 32×8 XCS20XL multi video | Оригинал | RS232 XCS20XL XCS20XL-PQ208 «Двухпортовая RAM» для видеоприложений 32×8 XCS20XL мульти видео | |
E2925A Резюме: нет текста аннотации | Оригинал | E2970A 95 / NT E2925A 17-21 / F 5965-4726E | |
REL531 Реферат: rel 511 876-KB REL 521 CAP531 rel 531 REL 561 REL551 REL 551 rel 551 1.1 | Оригинал | 056-БЕН 500-я серия termina000 876-AB 876-BB 876-CB 876-GA 876-DB 876-EB 876-FB REL531 rel 511 876-КБ REL 521 CAP531 отн 531 REL 561 REL551 REL 551 отн 551 1.1 | |
1999 — EASY321 Аннотация: MUNICh42X 504K 239k hdlc EASY3255 MUNICh42 ESCC2 infineon SAB 82532 | Оригинал | МУНИЧ42 EASY3255, 95 / NT MUNICh42X EASY321, 1930K EASY532, ru / products / commics / 3308 ЛЕГКО321 504 КБ 239 тыс. HDLC ЛЕГКО3255 ESCC2 Infineon SAB 82532 |