Дисплей МЭЛТ МТ–16S2H и кириллица

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем AlexU, 17 янв 2016.

  1. AlexU

    AlexU Гуру

    Тема касается отображения кириллицы на дисплеях МЭЛТ МТ–16S2H (Почему именно этот дисплей -- потому что был в комплекте "Матрешка Z").

    При использовании библиотеки LiquidCrystal из "комплекта" Arduino IDE с отображением кириллицы есть некоторые проблемы -- если в программе задать строку типа "абвгд", то дисплей отобразит "кракозябры". Первое время это как-то не доставляло проблем, но вот сошлись звёзды:
    1. понадобилось подключать дисплей и при этом задействовать минимум пинов Arduino;
    2. надоело копаться в таблице символов из документации на дисплей МЭЛТ, что бы заставить отображать кириллицу.
    Результат -- первая версия библиотеки LiquidCrystal3WI (хотя до библиотеки ещё наврно не доросла).

    Что касается первого пункта, DrProg уже создавал тему, в которой описывалось как подключить дисплей с использованием сдвигового регистра 74HC595 через интерфейс SPI. Но то-ли руки кривые, то-ли луна не в той фазе была, но как-то не задалось. Но сама идея использовать сдвиговый регистр оказалось интересной.

    Итак несколько слов о LiquidCrystal3WI.
    3WI -- 3 Wire Interface -- трёх проводной интерфейс. Так же используется сдвиговый регистр 74HC595, но нет привязки к определённым пинам Arduino, т.е. можно использовать 3 любых пина, которые, грубо говоря, поддерживают 'digitalWrite'. Для Arduino UNO -- это любые сигнальные пины.
    По-умолчанию используется вторая кодовая таблица дисплея, которая соответствует кодировке CP-1251.
    Есть поддержка кодировки UTF-8 (только кириллица).

    Несколько слов о применении:
    1. необходимо знать в какой кодировке кириллические символы сохраняются в бинарнике. Скорее всего кодировка совпадает с кодировкой исходных файлов (*.c, *.cpp). Для случая OC Linux Ubuntu, Arduino IDE версии 1.6.5 по-умолчанию используется кодировка UTF-8. В ОС Windows по-умолчанию может использоваться кодировка CP-1251;
    2. если кодировка CP-1251, то никаких особенностей нет;
    3. если используется UTF-8, то для вывода строки нужно использовать функцию printUTF8;
    4. добавлена функция включения/выключения подсветки дисплея -- setBacklight(bool) -- параметр true/false -- включить/выключить.

    Порядок подключения.
    Сдвиговый регистр к Arduino подключается стандартным способом.
    Дисплей подключается следующим образом:
    выводы дисплея 11 .. 14 (DB4 .. DB7) -> выводы регистра 1 .. 4 (Q1 .. Q4);
    вывод дисплея 6 (E) -> вывод регистра 7 (Q7);
    вывод дисплея 4 (RS) -> вывод регистра 5 (Q5).
    управление подсветкой дисплея осуществляется с помощью вывода регистра 15 (Q0) -- при вызове фунции setBacklight(true) на выходе Q0 устанавливается высокий уровень, при вызове setBacklight(false) -- низкий. Далее все зависит от типа ключа, который управляет непосредственно подсветкой.
    остальные выводы дисплея подключаются стандартным способом.

    PS: Данная библиотека -- переработка библиотеки LiquidCrystal из комплекта среды Arduino IDE. Досконально в этой библиотеке не разбирался, т.е. сделал copy/paste и заменил участки кода отвечающие за отправку данных на дисплей. Поэтому, если вдруг какие функции не будут работать, сильно не пинайте -- по возможности буду исправлять.
     

    Вложения:

    Tomasina нравится это.
  2. AlexU

    AlexU Гуру

    Проверочный скетч:
    Код (C++):
    #include <LiquidCrystal3WI.h>

    // 8 пин Arduino ---> DataPin - 14 (DS) вывод регистра
    // 9 пин ---> ClockPin - 11 (SH_CP) вывод регистра
    // 10 пин ---> LatchPin - 12 (ST_CP) вывод регистра
    LiquidCrystal3WI lcd(8, 9, 10);

    void setup()
    {

      lcd.begin(16, 2);

      const char *STR = "Привет МИР!";
      lcd.setCursor(0, 0);
      lcd.printUTF8(STR);

      const char *str = "Матрёшка Z";
      lcd.setCursor(0, 1);
      lcd.printUTF8(str);

    }

    bool bl = true;

    void loop()
    {
      // мигаем подсветкой дисплея
      lcd.setBacklight(bl);
      delay(1000);
      bl = !bl;
    }
     
    и прикрепил схему подключения (Fritzing). Правда пришлось расширение файла поменять с 'fzz' на 'zip' -- не разрешалось добавить файл.
     

    Вложения:

  3. AlexU

    AlexU Гуру

    Т.к. на этом форуме некоторые пользователи используют Arduino IDE, привожу короткую инструкцию по установке библиотеки в среду:
    1. качаем zip-архив и запоминаем куда скачали;
    2. в Arduino IDE запускаем мастер добавления библиотеки: instal_lib1.jpg
    3. после установки проверяем, что библиотека доступна:
    instal_lib2.jpg
     
  4. Tomasina

    Tomasina Сушитель лампочек Модератор

    есть предложение изменить функцию включения подсветки на "умную" - если она подключена через пин, поддерживающий ШИМ, то можно будет регулировать ее яркость.
    Cинтаксис: setBacklight(value); при этом "0" или "false" будет по-прежнему ее отключать.
    Далее простым ветвлением смотрим используемую плату и, если пин поддерживает PWM, то регулируем яркость, если не поддерживает, то тупо включаем как digitalWrite(pin, HIGH);
     
  5. AlexU

    AlexU Гуру

    Дело в том, что данная библиотека не предполагает прямого подключения дисплея к Arduino. Посредником используется сдвиговый регистр. Реализовать ШИМ на выводе сдвигового регистра теоретически можно, но боюсь это "съест" все ресурсы контроллера Arduino.
     
  6. Ае999

    Ае999 Нуб

    Предлагаю ознакомится с проектом https://github.com/mk90/LiquidCrystalRus
    В нем русифицирован вывод на LCD дисплей в виде готовой библиотеки
     
    rico нравится это.
  7. AlexU

    AlexU Гуру

    rico нравится это.