суббота, 7 апреля 2018 г.

Пара слов о текстовых LCD дисплеях

LCD HD44780
Последнее время я довольно часто использую текстовый LCD дисплей в своих проектах. При этом всю информацию приходится выводить на английском, в принципе меня это не особо беспокоит. Одно время искал библиотеки типа LiquidCrystal_I2C_RUS (думаю, как и многие), но так ничего и не нашел. И недавно возникло у меня желание разобраться в работе дисплея, как в нем выводятся символы и, может быть, написать свою библиотеку для дисплеев с I2C интерфейсом, поддерживающую кириллицу.


Начал я с изучения даташита на чип HD44780, который лежит в основе большинства знакогенерирующих дисплеев. Читаю, что в него входит:
  • два 8-битных регистра: регистр инструкций (IR) и регистр данных (DR);
  • 8-битная линия данных. Обмен данными возможен по 8- и 4-битному интерфейсу;
  • память DDRAM - Display Data RAM - содержит 8-битные коды символов и определяет отображаемые на дисплее данные;
  • память CGRAM - Character Generator RAM - содержит изменяемые пользователем символы (шаблоны символов). Может хранить 8 символов размером 5*8 или 4 символа 5*10;
  • память CGROM - Character Generator ROM - содержит шаблоны символов, которые могут быть выведены на дисплей. Объем памяти CGROM позволяет хранить 208 символов размером 5*8 и 32 символа 5*10.

Содержимое CGROM - это по сути шрифт дисплея. И ключевым здесь является то, что данная память не перезаписываемая, ее содержимое закладывается заводом изготовителем. Чипы HD44780 выпускаются в двух модификациях: с поддержкой японского и европейского шрифтов, что отражено в обозначении чипов (например, HCD44780UA00 - Japanese standard font и HCD44780UA02 - European standard font). В даташите можно увидеть, что европейский шрифт содержит кириллические символы. Таким образом, если вам принципиальна возможность вывода русского текста, то ищите дисплей с его поддержкой. Без этого никакие библиотеки не помогут. Разумеется, мало кто знает об этих тонкостях при покупке.

Я закупаю детали на Aliexpress и что-то мне не попадались там текстовые дисплеи с поддержкой русского. Такие дисплеи можно найти в отечественных интернет-магазинах, но и ценник на них другой.

В общем, мой дисплей содержит японский набор символов и идею вывода русского текста пришлось оставить. Есть, конечно, способы: по максимуму использовать латинские символы вместо русских, недостающие выводить с помощью 8 пользовательских шаблонов из CGRAM, причем изменять их по мере необходимости, отказаться от строчных букв, формулировать текст так, чтобы обходиться имеющимися буквами. Этого хватит, чтобы вывести, например, "ДABЛEHИE: " (буквы Д, Л, И описываем в CGRAM) или "TEMПEPATYPA: " (П в CGRAM) и т.п. Но мне такой способ не подходит, так что пока не разживусь дисплеем с русским шрифтом, придется выводить текст на английском.

2 комментария:

  1. https://github.com/vannhack/Arduino/tree/master/libraries/LiquidCrystalRus_I2C
    вот тут есть интересная библиотека

    ОтветитьУдалить
    Ответы
    1. Это то, о чем я и писал: подмена русских букв английскими, использование 8 пользовательских символов для вывода недостающих... Это не решение проблемы, а костыль, который может сгодиться в редких случаях.

      Удалить