Как программировать цифровой дисплей epd 203
Перейти к содержимому

Как программировать цифровой дисплей epd 203

  • автор:

Я понятия не имею, как управлять дисплеем EPD

Я пытаюсь управлять EPD (ED060SD1) с помощью STM32F429ZGT и получил техническое описание от поставщика дисплея. Но нет конкретного объяснения того, как управлять дисплеем EPD или деталями контакта.

Итак, я хочу знать, что делает этот вывод. и любой намек на то, как запустить этот дисплей.

2 ответа

Микроконтроллеры серии stm32 не поддерживают напрямую дисплеи EPD. Я думаю, вам понадобится промежуточный контроллер EPD, чтобы все заработало.

Ночью вы сможете генерировать только цифровые входы, затем использовать внешний источник высокого напряжения от микросхемы, такой как HV850, а затем понизить его с помощью встроенных стабилитронов. Я использовал этот подход, чтобы сделать микрофлаер на основе пьезодинамика!

HV850 имеет включение/выключение через цифровую линию и требует минимум +4,2 В, максимальное напряжение +/-59 В на альтернативных выходах, что идеально подходит для этой цели. Просто добавьте высокоомный резистор на выходной стороне, чтобы он разряжался, когда панель не работает. Я бы перевел его в режим extclk и запустил на частоте 10 Гц, чтобы снизить энергопотребление.

Как программировать цифровой дисплей epd 203

Здравствуйте, я хочу рассказать о программировании дисплея на контроллере ST7920 с использованием ATtiny2313 контроллера.

Характеристики дисплея

Приблизительная цена: 15$
Размер дисплее вместе с платой: 93.0 (Длина) × 70.0(Ширина) × 13.50(Высота) мм
Размер видимой области: 70×38 мм.

  • Графический
  • Текстовый
  1. Подключение по 8 битной шине
  2. Подключение по 4 битной шине
  3. Подключения по SPI (3 битной шине)
  • Нормальный: потребление 450 мкА, 5 В
  • Спящий режим: потребление 30 мкА, 5 В
  • Работе в текстовом режиме
  • Подключения и программирование по 8 битной шине
  • Подключения и программирование по SPI
  1. Дисплей на контроллере ST7920
  2. 2 подстрочных резистора на 10 кОм.
  3. Для 8 битного режима резистор на 4.7 кОм (или больше)
  4. Контроллер ATtiny2313
  5. Источник питание на 5В.
Схема подключения
Подключение по 8 битной шине данных


Распиновка контактов:
GND — Земля
VCC — +5В
V0 — Настройка контрастности
RS — Определяет режим передачи данных (1 — это данные, 0 — это команда)
RW — Запись или чтения (1 — чтения, 0 — запись)
E — Строб
D0-D7 — Шина данных
PSB — Определяет какой протокол передачи данных будет использоваться ( 1 — 8/4 бит шина, 0 — SPI)
BLA — Анод подсветки (+)
BLK — Катод подсветки (-)

На схеме DB0-DB7 и PB0-PB7 не замкнуты, это 8 битная шина данных.
Реальное соединения таково:
DB0 — PB0
DB1 — PB1
DB2 — PB2
DB3 — PB3
DB4 — PB4
DB5 — PB5
DB6 — PB6
DB7 — PB7

Подключение по SPI


Распиновка контактов:
GND — Земля
VCC — +5В
V0 — Настройка контрастности
RS — (CS) Начало/окончание передачи данных (1 — начало, 0 — окончание)
RW — (SID) Шина данных
E — (SCLK) Строб
PSB — Определяет какой протокол передачи данных будет использоваться ( 1 — 8/4 бит шина, 0 — SPI)
BLA — Анод подсветки (+)
BLK — Катод подсветки (-)

Подстроечные резисторы

RP1 — Регулятор контрастности
RP2 — Регулятор яркости

Описание протоколов программирования дисплея
8 битный режим

И так, с начало я расскажу о том как в общих чертах происходит работа с дисплеем.
Для того что бы работать с дисплеем нам нужно отправлять команды и данные на дисплей.
К командам относится: Включения/выключение дисплея, отображение курсора, перемещение курсора и т.д. К данным относятся например символы которые вы хотите видеть на дисплее.

  • Задержка в 50 мкс.
  • Отправляем команду установки 8 битного режима.
  • Задержка 120 мкс.
  • Отправляем команду включения дисплея ( в ней же указывается, включить ли курсор, и мигать ли курсором)
  • Задержка в 50 мкс.
  • Повторно отправляем функцию установки 8 битного режима
  • Задержка 120 мкс.
  • Отправляем команду отчистить экран
  • Задержка 20 мкс.
  • Устанавливаем ENTRY MODE (эта команда говорит о том в какую сторону сдвигать курсор после написания символа, нам соответственно нужно вправо)

Вот и все, после выполнения этих действий, если вы указали в команде включения дисплея отображать курсор, на экране вы увидите курсор.

  • Устанавливаем низкий уровень E
  • Устанавливаем низкий уровень RS
  • Устанавливаем низкий уровень RW
  • Задержка 1 мкс.
  • Устанавливаем высокий уровень E
  • Отправляем в порт данных байт команды
  • Задержка 1 мкс.
  • Устанавливаем низкий уровень E
  • Задержка 50 мкс.

Для отправки одного байта данных выполняется абсолютно то же самое, только в начале устанавливается высокий
уровень RS.
RS = 0 Команда
RS = 1 Данные

  • Устанавливаем низкий уровень E
  • Устанавливаем высокий уровень RS
  • Устанавливаем низкий уровень RW
  • Задержка 1 мкс.
  • Устанавливаем высокий уровень E
  • Отправляем в порт данных байт команды
  • Задержка 1 мкс.
  • Устанавливаем низкий уровень E
  • Задержка 50 мкс.

Давайте рассмотрим код отправки команды
Для начала установим константы что бы было удобнее:

Функция отправки команды:

Функция отправки данных:

В коде был использован макрос LCD8_MACRO_DELAY, вот его код

Теперь рассмотрим команды инициализации дисплея в текстовом, 8 битном режиме:

  • Если установлено 1 то устанавливаем 8 бит передачу данных
  • Если установлено 0 то устанавливается 4 бита передача данных
  • Если установлено 1 то устанавливается набор расширенных команд
  • Если установлено 0 то устанавливается набор базовых команд
  • Если установлено 1 то дисплей включен
  • Если установлено 0 то дисплей выключен
  • Если установлено 1 то курсор включен
  • Если установлено 0 то курсор выключен
  • Если установлено 1 то курсор будет мигать
  • Если установлено 0 то курсор не будет мигать
  • Если I/D = 1 то курсор сдвигается вправо
  • Если I/D = 0 то курсор сдвигается влево

На основе этих четырех команд можно написать функцию инициализации дисплея:

После выполнения инициализации на экране вы должны увидеть мигающий курсор.

Режим SPI
  • SID это контакт передачи данных, на дисплее он же RW
  • SCLK – это линия строб, на дисплее он же E
  • CS – это начала/окончания передачи данных, на дисплее он же RS
  • Устанавливаем высокий уровень CS
  • Передаем 4 единицы подряд
  • Передаем 1 бит RW – чтения или запись
  • Передаем 1 бит RS – Команда или данные
  • Передаем 0
  • Передаем 4 бита старшей половины байта данных
  • Передаем 4 нуля
  • Передаем 4 бита младшей половины байта данных
  • Передаем 4 нуля подряд
  • Устанавливаем низкий уровень CS

На этом передача одного байта завершена.

  • Задержка 1 мкс.
  • Устанавливаем высокий уровень SCLK
  • Задержка 1 мкс.
  • Устанавливаем низкий уровень SCLK
  • Задержка 1 мкс.

Рассмотрим функцию передачи команды/данных в режиме SPI, но сперва объявим константы:

А теперь сама функция:

Текстовый режим

Теперь после того как вы научились инициализировать дисплей вы можете выводить любые символы на экран, например вывести букву A:

И на дисплее вы увидите букву A.

И так, теперь о том как устроенно адресное пространство в текстовом режиме:
Экран делится на 8 столбцов и 4 строки, в каждый столбец вы можете записать по 2 обычных символа или 1 иероглиф.
Адресное пространство находится от 0 до 31.

0 1 2 3 4 5 6 7
16 17 18 19 20 21 22 23
8 9 10 11 12 13 14 15
24 25 26 27 28 29 30 31

Как видите первая строчка это адреса от 0 до 7
Вторая же строчка от 16 до 23
Третья строчка от 8 до 15
То есть если вы напишете 16 букв подряд с адреса 0, то они будут в первой строчке,
но если вы напишите 17 символов, то последний символ будет не на второй строчке, а на третей!

Графический режим

И напоследок, для тех кто хочет использовать графический режим, есть такая статья: LCD 12864 на контроллере ST7920. Параллельный режим (8 бит)

Как программировать цифровой дисплей epd 203

Такие экраны можно купить на AliExpress и Ebay, хотя цены на сегодняшний день пока кусаются (200313, около $10). Удобнее всего работать с индикатором, который снабжен платой-переходником с гибкого шлейфа на стандартный коннектор с шагом штырьков 2.54 мм, иначе придется делать для него переходную плату.

Модуль дисплея E-Ink 2.9″ (296×128 точек) снабжен встроенным контроллером, обменивающимся данными с внешним миром через интерфейс SPI, с поддержкой частичного обновления. Достоинства экрана очевидны для определенных областей использования — сверхнизкое энергопотребление, широкие углы обзора, сохранение картинки даже при полном отключении питания. Однако у этих индикаторов имеется существенное ограничение — медленное обновление изображения, особенно когда оно обновляется целиком (полное обновление картинки может занимать от 2 секунд и более).

• Нет подсветки, изображение сохраняется на экране длительное время, даже когда питание не поступает.
• Очень малое потребление энергии. Питание в основном необходимо только для обновления изображения.
• Интерфейс SPI для подключения к широкому спектру аппаратных устройств, таких как например Raspberry Pi, платы Arduino, Nucleo, Discavery, BBB и т. п.
• Встроенный транслятор логических уровней, совместимый 3.3V/5V MCU.
• Есть рабочие примеры кода и руководства по использованию (для Raspberry Pi, Jetson Nano, Arduino, STM32).

[Параметры]

• Напряжение питания: 3.3V/5V
• 3-проводный или 4-проводный SPI
• Внешние размеры: 89.5 x 38 мм
• Размер графической области экрана: 66.89 x 29.05 мм
• Размер точки: 0.138 x 0.138 мм
• Разрешающая способность: 296 x 128 точек
• Цвета экрана: черный и белый
• 2 уровня серого (монохром)
• Время частичного обновления изображения: 0.3 сек
• Время полного обновления экрана: 2 сек
• Потребление энергии 26.4 мВт (типовое значение)
• Потребление в режиме приостановки (standby) < 0.017 мВт
• Угол обзора > 170°

Waveshare e-Paper в основном поставляются в двух вариантах: с «сырым» коннектором на гибком кабеле (так называемая RAW panel), и с более удобным для подключения модулем адапера (Module/HAT version).

e Paper 2 9inch RAW e Paper 2 9inch HAT

На адаптере Module/HAT собрана схема драйвера, и этот вариант экрана сразу готов к подключению к микроконтроллеру.

Кроме монохромных вариантов экрана есть еще трехцветные (e-Paper (B) и e-Paper (C)), у которых очень большое время обновления (15 секунд!), и которые не поддерживают частичное обновлеие экрана (partial refresh). Трехцветные экранчики имеют довольно бледные цвета. Очевидно, что эти экраны пригодны в основном только для приложений типа статичных меток товара, которые редко обновляются.

Разновидности экранов e-Paper 2.9inch приведены в таблице ниже, показаны только их отличия.

Тип экрана Отображаемые цвета Время full refresh, сек Поддержка partial refresh
2.9inch e-Paper черный, белый 2 есть
2.9inch e-Paper (B) красный, черный, белый 15
2.9inch e-Paper (C) желтый, черный, белый 15
2.9inch e-Paper (D) черный, белый 2 есть

Остальные параметры всех этих вариантов индикаторов совпадают:

Параметр Значение
Градаций яркости 2
Разрешающая способность, точек 296 x 128
Размер изображения, мм 66.89 x 29.05
Внешний размер, мм 79.0 x 36.7
Интерфейс подключения SPI

Важные замечания по применению:

1. Не стоит чрезмерно увлекаться частичным обновлением экрана (partial refresh, занимает по времени 0.3 секунды) для тех вариантов экранов e-Paper, которые это поддерживают. Вы не можете применять partial refresh постоянно. После нескольких partial refresh обязательно надо делать полное обновление экрана (full refresh, занимает по времени 2 секунды), иначе e-Paper будет необратимо поврежден.

2. Экран e-Paper нельзя долго держать под питанием, Вы должны перевести индикатор в режим сна или выключить его, когда обновление не требуется. В противном случае, когда e-Paper работает с высоким напряжением длительное время, он повреждается, и исправить повреждение невозможно.

3. Рекомендуется обновлять изображение e-Paper один раз за 24 часа, или как минимум не реже одного раза за 10 дней (за более подробной информацией обращайтесь к даташиту). В противном случае старая картинка может «впечататься», и её нельзя будет очистить.

4. Экран e-Paper игнорирует данные, которые были отправлены ему в режиме сна, поэтому для правильного обновления картинки экран нужно инициализировать заново.

5. Можно подстроить цвет бордюра экрана через регистр 0x3C. В некоторых демонстрационных примерах можно настроить регистры Border Waveform Control или VCOM AND DATA INERTVAL SETTING.

6. e-Paper нельзя обновлять под прямым солнечным светом (на экране отсутствует фильтр, поглощающий ультрафиолет). Шаги по обновлению должны быть выполнены в помещении.

7. Диапазон рабочих температур 0 .. 50°C.

Имя сигнала Напр. Описание
VCC Напряжение питания 3.3V/5V
GND Земля, минус питания и общий провод всех сигналов
DIN I SPI MOSI, вход последовательных данных
CLK I SPI SCK, вход тактов
CS I Вход выборки SPI, активный уровень лог. 0
DC I Вход для выбора Data/Command (лог. 1 для данных, лог. 0 для команды)
RST I Внешний сброс, активный уровень лог. 0
BUSY O Выход состояния занятости контроллера, активный уровень лог. 1

Примечание: в столбце «Напр.» указано направление работы сигнала у индикатора. I обозначает вход (Input), O выход (Output).

Интерфейс и протокол отличается от традиционного SPI только тем, что отсутствует обратный сигнал данных от контроллера (подчиненное устройство SPI, slave) к управляющему процессору (главное устройство SPI, master), поскольку от экрана требуется только отображение картинки (направление данных master -> slave).

Сигналы интерфейса в режиме 4-Wire SPI:

E Ink SPI signals

Последовательный интерфейс с индикатором e-Paper может работать в 2 режимах: 3-wire SPI и 4-wire SPI. Отличие между этими режимами в том, что в режиме 3-wire SPI сигнал DC (данные/команда) отсутствует, и данные передаются не 8-ю, а 9 битами. Старший бит D8 несет информацию о том, команда передается или данные. Подробнее см. даташит на индикатор (например, 2.9inch_e-Paper_Datasheet.pdf, он доступен на сайте waveshare.com, или см. архив [6]).

Обмен данных через SPI требует соблюдения определенных интервалов времени, с соответствующей комбинацией перехода уровней данных и тактов (фаза CPHA и полярность CPOL тактового сигнала).

CPOL определяет логический уровень сигнала тактов в неактивном состоянии. Когда CPOL = 0, неактивное состояние принимается за лог. 0.

CPHA определяет, когда slave-устройство считывает данные — на первом перепаде тактового сигнала, или на втором перепаде. Когда CPHA = 0, данные считываются на первом перепаде тактов.

Существуют 4 режима обмена данными по шине SPI. Обычно используется режим SPI0, когда CPHA = 0, CPOL = 0. Как можно увидеть на картинке выше, передача данных начинается на первом спаде уровня SCLK, и 8 бит данных передаются по каждому тактовому положительному перепаду (от 0 к 1) SCLK. С экраном также используется режим SPI0, и данные передаются бит за битом, старший бит (MSB) идет первым.

Имеются и другие экраны с разными размерами, разрешающей способностью, цветами и интерфейсами подключения (см. селектор на страничке [1]).

[Принцип работы]

Отображение картинки основано на технологии E-paper (Microencapsulated Electrophoretic Display, MED). Среди маленьких шариков в прозрачном масле подвешиваются заряженные цветные пигменты, и они перемещаются в зависимости от приложенного электрического заряда. Цветовые компоненты экрана E-paper хорошо отражают окружающий свет, и поэтому не требуется задняя подсветка.

Примечание: далее в описании и именах файлов часто используется сокращение EPD, что означает E-Paper Display.

[Примеры]

Компания waveshare.com предоставляет примеры работы с индикатором для различных популярных платформ: Arduino UNO, Jetson Nano, Raspberry Pi и STM32.

Пример работает с экраном Waveshare UNO PLUS (плата совместима с официальной Arduino UNO R3).

Подключение к Arduino UNO:

Индикатор e-Paper/e-Ink Arduino
VCC 5V
GND GND
DIN D11
CLK D13
CS D10
DC D9
RST D8
BUSY D7

Загрузите архив [2], распакуйте. Пример для Arduino находится в каталоге Arduino. Откройте тот проект, который соответствует типу экрана. Например, если это 1.54inch e-Paper Module, откройте и запустите проект epd1in54.ino из папки epd1in54. Выберите корректную плату (Board) и COM-порт подключения, затем скомпилируйте проект и загрузите его в плату Arduino UNO.

Из-за того, что у микроконтроллера Arduino малый объем RAM, функция рисования не поддерживается, можно только вывести картинку, данные которой находятся в памяти программ FLASH. Как альтернативу вместе с Arduino Вы можете использовать дополнительную RAM и слот Micro SD на специальной плате E-Paper Shield [3].

Если у Вас HAT-версия экрана, наподобие 2.13inch e-Paper HAT, то можно напрямую соединить его с 40PIN GPIO коннектором Raspberry Pi. Или можно подключить экран к Pi через кабель 8PIN.

Подключение к Raspberry Pi:

Индикатор e-Paper/e-Ink
Rasberry Pi
BCM2835 Плата
VCC 3.3V 3.3V
GND GND GND
DIN MOSI 19
CLK SCLK 23
CS CE0 24
DC 25 22
RST 17 11
BUSY 24 18

Процесс по шагам:

1. Откройте терминал, введите команду конфигурации:

Выберите Interfacing Options -> SPI -> Yes, чтобы разрешить интерфейс SPI.

E Ink RasberryPI open SPI config

Перезагрузите Raspberry Pi:

2. Установка библиотек BCM2835.

Для дополнительной информации см. [4].

3. Установка библиотек wiringPi.

Для Raspberry Pi 4 нужно выполнить обновление:

Если установка прошла успешно, то будет выведена информация по версии 2.52 gpio.

4. Установка библиотек Python.

5. Загрузка примеров. Откройте терминал и выполните команду, чтобы загрузить демонстрационный код:

6. Запуск примеров.

Код C. Найдите файл main.c, раскомментируйте определение типов e-Paper, затем скомпилируйте и запустите код.

Код Python. Можно напрямую запустить код, xxx в примере запуска ниже заменяется названием дисплея e-Paper. Например, если надо запустить код для 1.54inch e-Paper Module, то xxx надо заменить на epd_1in54.

Пример для Jetson Nano использует программную реализацию SPI, поэтому его скорость вывода картинки работает немного медленнее.

Подключение к Jetson Nano:

Индикатор e-Paper/e-Ink
Jetson Nano Developer Kit
BCM2835 Плата
VCC 3.3V 3.3V
GND GND GND
DIN 10 (SPI0_MOSI) 19
CLK 11 (SPI0_SCK) 23
CS 8 (SPI0_CS0) 24
DC 25 22
RST 17 11
BUSY 24 18

Процесс по шагам:

1. Установка библиотек GPIO. Введите в терминале следующие команды:

Здесь your_user_name это имя пользователя в системе Jetson, например waveshare.

2. Установка библиотек I2C.

3. Установка библиотек PIL.

4. Загрузка примеров.

5. Запуск примеров.

Код C. Найдите файл main.c, раскомментируйте используемый экран e-Paper, затем скомпилируйте и запустите код.

Код Python. Можно напрямую запустить код, xxx в примере запуска ниже заменяется названием дисплея e-Paper. Например, если надо запустить код для 1.54inch e-Paper Module, то xxx надо заменить на epd_1in54.

Примеры тестировались и проверялись на отладочной плате Wavshare Open103Z (процессор STM32F13ZET6). Для другой платы и процессора от Вас потребуются некоторые усилия для портирования кода.

Подключение к STM32F103ZET6:

Индикатор e-Paper/e-Ink STM32F103ZET6
VCC 3.3V
GND GND
DIN PA7
CLK PA5
CS PA3
DC PA2
RST PA1
BUSY PA3

Перейдите в каталог примеров STM32, откройте проект в среде разработки Keil5. Выберите плату и программатор, скомпилируйте и загрузите код.

[Описание кода]

Разработчики waveshare.com поддерживают 4 популярные аппаратные платформы: Arduino UNO, Jetson UNO, Raspberry Pi, and STM32. Здесь приведено общее описание для всех экранов e-Paper, однако описание некоторых функций может не подойти к Вашему экрану e-Paper.

Каждый проект делится на функции аппаратного интерфейса, драйвера EPD и код приложения. Используются языки программирования C, C++ и python:

• Arduino UNO:C++
• Jetson Nano: C и python
• Raspberry Pi: C и python
• STM32: C

Примечание: коды драйвера EPD для Jetson Nano, Raspberry Pi и STM32 совместимые. Таким образом, эта часть кода одинаковая для этих платформ, а коды интерфейса отличаются.

[Интерфейс аппаратуры]

Код интерфейса находится в файлах DEV_Config.c и DEV_Config.h.

STM32. Файлы драйвера интерфейса находятся в каталоге STM32\STM32-F103ZET6\User\Config.

Используемые типы данных:

Функции инициализации и деинициализации модуля экрана:

Эти функции используются перед работой с экраном e-Paper (DEV_Module_Init) и после работы с ним (DEV_Module_Exit). Если на Вашей плате дисплея напечатана версия Rev2.1, модуль войдет в режим сверхнизкого потребления мощности (low-ultra mode) после вызова DEV_Module_Exit(). Тесты показали, что ток потребления в этом режиме практически нулевой.

Функции чтения/записи через GPIO (программная реализация SPI):

Функция записи через аппаратный SPI:

[Драйвер EPD]

Для Raspberry Pi и Jetson Nano драйвер epd сохранен в каталоге RaspberryPi&JetsonNano\c\lib\e-Paper. Для STM32 драйвер epd находится в каталоге STM32\STM32-F103ZET6\User\e-Paper.

Декларация функций находится в соответствующем (типу индикатора) файле заголовка (с расширением *.h). Буквы XXX в имени функции должны быть заменены на обозначение типа индикатора. Например, если это индикатор 4.2inch e-Paper, то XXX нужно заменить на 4IN2.

Инициализация. Эта функция должна использоваться для инициализации или вывода из режима сна экрана E-Paper.

Очистка. Эта функция используется для заполнения экрана белым цветом:

Передача образа экрана и отображение.

Имеются следующие исключения:

Вход режим сна.

Имейте в виду, что для пробуждения индикатора следует выполнять аппаратный сброс индикатора, или использовать функцию инициализации.

[Функции приложения]

Рисование. Предоставляются базовые функции рисования, их можно найти в каталоге RaspberryPi&JetsonNano\c\lib\GUI (для Raspbian Pi & Jetson Nano) и в каталоге STM32\STM32-F103ZET6\User\GUI (для STM32):

Шрифты. Шрифты находятся в каталогах RaspberryPi&JetsonNano\c\lib\Fonts (для Raspbian Pi & Jetson Nano) и STM32\STM32-F103ZET6\User\Fonts (для STM32).

[Как использовать]

1. Создание буфера картинки. Создайте новый буфер образа экрана (image buffer) с помощью функции Paint_NewImage. В параметрах функции указывается ширина, высота, поворот изображения и его цвет.

image: указатель на место в памяти, где находится буфер.
Width: ширина экрана картинки.
Height: высота картинки.
Rotate: на сколько градусов повернуть изображение.
Color: первичный цвет картинки.

2. Выбор буфера. Выберите буфер экрана с помощью функции Paint_SelectImage. Можно создать несколько буферов изображения, и затем выбирать нужный буфер для каждого изображения. В параметре функции находится указатель на начало предварительно созданного буфера.

3. Поворот. Установите ориентацию дисплея функцией Paint_SetRotate.

В параметре Rotate можно указать 4 варианта поворота картинки ROTATE_0, ROTATE_90, ROTATE_180, ROTATE_270, что соответствует 0, 90, 180 и 270 градусам. Обычно эта функция используется для изменения угла вывода изображения, после вызова Paint_SelectImage().

На картинке ниже демонстрируется начало координат X, Y и направление их увеличения для разных вариантов параметра Rotate.

E Ink Paint SetRotate variants

4. Зеркалирование. Зеркалирование вывода производится с помощью функции Paint_SetMirroring. В параметре mirror указывается 4 варианта зеркалирования MIRROR_NONE, MIRROR_HORIZONTAL, MIRROR_VERTICAL, MIRROR_ORIGIN.

5. Рисование точки. Точка в буфере рисуется с помощью функции Paint_DrawPoint.

Параметрами Xpoint, Ypoint указывается координата точки, параметр Color задает цвет. Параметр Dot_Pixel задает размер точки, доступно 8 вариантов:

Параметр Dot_Style задает стиль точки:

6. Рисование линии. Для этой цели используется функция Paint_DrawLine.

Параметры Xstart, Ystart, Xend, Yend задают координаты начала и конца линии. Параметр Line_width задает ширину линии (один из 8 вариантов, см. описание функции Paint_DrawPoint). Параметр Line_Style задает тип линии:

7. Прямоугольник.

Параметры Xstart, Ystart, Xend, Yend задают координаты начала и конца линии, параметр Color задает цвет. Параметр Line_width задает ширину линии (один из 8 вариантов, см. описание функции Paint_DrawPoint). Параметр Draw_Fill задает заливку прямоугольника:

8. Окружность, круг.

Параметры X_Center, Y_Center задают координаты центра, параметр Radius задает радиус, параметр Color задает цвет. Параметр Line_width задает ширину линии (один из 8 вариантов, см. описание функции Paint_DrawPoint). Параметр Draw_Fill задает заливку прямоугольника, так же как в функции Paint_DrawRectangle.

9. Символ текста. Вывод одиночного символа текста в 8-битной кодировке ASCII выполняется функцией Paint_DrawChar.

Параметры Xstart, Ystart задают положение верхнего левого угла выводимого символа. Параметр Ascii_Char задает код символа, параметр Font указывает на начало шрифта в памяти. Параметры Color_Foreground и Color_Background задают соответственно цвет чернил и цвет фона символа.

Всего в библиотеке есть 5 готовых шрифтов:

Имя Размер символа (x*y)
font8 5*8
font12 7*12
font16 11*16
font20 14*20
font24 17*24

10. Строка ASCII. Строка текста рисуется относительно левой верхней позиции (параметры Xstart, Ystart).

Параметр pString указывает на строку текста. Остальные параметры такие же, как у функции Paint_DrawChar.

Строка китайского текста может быть выведена помощью функции Paint_DrawString_CN. Осуществляется вывод китайских символов, основанных на шрифтах ON GB2312 (есть 2 китайских шрифта: font12CN 11*21 ascii, 16*21 Chinese, font24CN:24*41 ascii, 32*41 Chinese).

11. Число.

В параметре Number указывается выводимое число. Остальные параметры те же самые, что и функции Paint_DrawString_EN.

12. Время.

В параметре pTime задается указатель на выводимое время. Остальные параметры те же самые, что и функции Paint_DrawString_EN.

13. Растровая картинка. В параметре image_buffer указывается начальный адрес буфера в памяти, где расположены данные выводимая картинка.

14. Вывод файла BMP. Linux-платформы наподобие Jetson Nano и Raspberry Pi поддерживают непосредственную обработку и вывод картинок в файлах формата BMP.

В параметре path указывается полное имя файла картинки, параметры Xstart, Ystart задают положение верхнего левого угла отображаемой картинки.

[Тестирование функций]

Примеры кода, реализующего вывод на экран, можно найти в каталоге RaspberryPi&JetsonNano\c\examples. Следует модифицировать определения в модуле main.c, чтобы можно было работать с различными типами индикаторов e-Paper.

Например, если Вы хотите проверить вывод на индикатор 7.5inch E-paper, нужно раскомментировать строку:

Затем скомпилируйте и запустите код:

Аналогичный пример кода для STM32 находится в каталоге STM32\STM32-F103ZET6\User\Examples. Откройте в Keil проект STM32\STM32-F103ZET6\MDK-ARM\epd-demo.uvprojx, измените определения в файле main.c для выбора нужно типа индикатора. Далее расскомментируйте нужную строку теста, скомпилируйте и запустите код.

Коды примеров работают на основе python2.7 и python3. Если интерпретатор Python правильно установлен, и разрешены все зависимости для используемых библиотек, то запускать проекты Python намного проще, чем код на C/C++.

Код функций находится в каталоге RaspberryPi&JetsonNano\python\lib\waveshare_epd:

[Функции epdconfig.py]

Инициализация. В epdconfig.py находятся функции инициализации и завершения:

Эти функции используются перед работой с экраном e-Paper (module_init) и после работы с ним (module_exit). Если на Вашей плате дисплея напечатана версия Rev2.1, модуль войдет в режим сверхнизкого потребления мощности (low-ultra mode) после вызова DEV_Module_Exit(). Тесты показали, что ток потребления в этом режиме практически нулевой.

GPIO Read/Write. Программная реализация SPI находится в функциях:

SPI. Аппаратный SPI:

[Описание кода функций epdxxx.py]

В имени файла кода символами xxx обозначен тип используемого индикатора e-Paper.

Инициализация. Для начала работы с индикатором и для вывода его из режима сна используются следующие функции.

Обновление может использовать низкоуровневые функции lut_full_update или lut_partial_update.

Очистка. Для очистки экрана (заполнения его цветом фона) используют функции:

Работа с буфером. Преобразование картинки в массив данных экрана:

Кадр. Передача одного кадра картинки и его отображение:

Есть несколько исключений:

Сон. Вход в режим пониженного потребления осуществляется функцией:

[Тесты epd_xxx_test.py]

Код тестов находится в каталоге RaspberryPi&JetsonNano\python\examples.

Если на системе установлен python2, то запуск теста осуществляется командой наподобие:

Если установлен python3, то команда должна выглядеть так:

Примечание: для запуска теста на другом индикаторе замените имя файла epd_7inch5_test.py на другое.

Ориентация. Чтобы повернуть вывод на экран, можно использовать функцию транспонирования:

Поддерживаются константы поворота ROTATE_90, ROTATE_180, ROTATE_270, соответствующие 90, 180 и 270 градусам.

Ниже на картинке показано начало координат X, Y и направление их роста в зависимости от выбранной ориентации вывода.

E Ink transpose Rotate variants

Поскольку у микроконтроллера Arduino слишком мало памяти RAM для отображения динамического изображения, то без добавления внешней памяти поддерживается только вывод статичной растровой картинки. В этом случае рекомендуется использовать специальную плату расширения памяти E-Paper Shield [3].

Advantech EPD-023 Manuals

Download Advantech EPD-023 Industrial Monitor PDF User Guides and Manuals: Found (2) Manuals for Advantech EPD-023 Device Model (Operation & User’s Manual)

  • Product ID: #1826446
  • Category: Monitor
  • File Path: advantech/epd-023_1826446.pdf
  • Pages: 50
  • Product ID: #1483764
  • Category: Industrial Monitor
  • File Path: advantech/epd-023_1483764.pdf
  • Pages: 116

Related for Advantech EPD-023 Manuals, Service Instructions:

Device: FPM-30CT, 22 Nov 2022 (#9839T8)

Device: FPM-212 Series, 01 Feb 2023 (#42MA92)

Device: FPM-3191G, 20 Sep 2022 (#7125AH)

Device: IDS-3215 Series, 08 Oct 2022 (#1F4D13)

Device: EPD-023, 10 Feb 2023 (#5Y3UY4)

Device: TPC-1260, 01 Jan 2023 (#648E46)

FG-NET

1243 The rack-mounted version: a 4U space is necessary in a 19” electrical equipment box. The wall-mounted version: fix on the wall, taking care not to damage the mo-therboard. We recommend fixing to a height ranging between 1.50m and 1.80m to allow a comfortable height to see the touch-screen display. O .

XM7W7

IT Istruzioni per installazione EN Installation manual FR Instructions pour l’installation DE Installationsanweisung ES Instrucciones para instalación CN 安装手册 XM7W7 — XM708 INDUSTRIAL MONITOR .

Подключение дисплея E-Paper к Arduino Uno

Технология E-paper (electronic paper) известна под названием «электронная бумага» или «электронные чернила». Основная цель создания дисплеев E-Paper – это имитация обычной бумаги, то есть с такого дисплея текст читать практически так же удобно, как и с листа обычной бумаги.

Внешний вид подключения дисплея E-Paper к Arduino Uno

Дисплеи E-paper появились в начале 2000-х годов и даже получили на некоторое время широкое распространение в электронных «читалках». Им пророчили большое будущее и в качестве экранов для смартфонов, но, к сожалению, в этой нише им не удалось выдержать конкуренции с используемыми сейчас дисплеями, в основном, из-за большой инерционности изображения на них. Но, тем не менее, дисплеи E-paper продолжают выпускаться и заняли свою узкую нишу в ряде применений. Поэтому в данной статье мы рассмотрим подключение дисплея E-Paper с диагональю 1,54 дюйма к плате Arduino Uno.

Кроме платы Arduino дисплеи E-paper можно подключать и к другим микроконтроллерным платам, например, Raspberry Pi, STM32, jetson. В данной статье мы рассмотрим печать символов и изображений на экране дисплея E-paper, проанализируем энергопотребление подобного дисплея и рассмотрим преимущества и недостатки подобных дисплеев.

Необходимые компоненты

  1. Плата Arduino Uno (купить на AliExpress).
  2. 1.54-Inch E-Paper Display (дисплей E-Paper с диагональю 1,54 дюйма) (купить на AliExpress).

Основные принципы работы дисплея E-Paper 1,54′

Внешний вид дисплея E-Paper с диагональю 1,54 дюйма

Модуль дисплея типа «электронные чернила» (e-Ink Paper) с диагональю 1,54 дюйма от компании Waveshare работает по протоколу SPI, имеем разрешение 200×200 пикселов и содержит встроенный модуль контроллера. Подобные дисплеи отличаются крайне низким энергопотреблением поскольку они не содержат панели фоновой подсветки и не требуют непрерывной подачи энергии для отображения информации на экране – энергия в них тратится только при смене изображения на экране. Также они отличаются широкими углами обзора и хорошей «читаемостью» на солнце, что делают их очень удобными в ряде случаев. В нашем проекте мы будем использовать подобный дисплей стоимостью около 15$.

Основные особенности дисплеев E-Paper

  • отсутствие фоновой подсветки, длительное отображение информации на экране дисплея без подачи на него энергии;
  • очень низкое потребление энергии, энергия расходуется только при смене изображения на экране дисплея;
  • интерфейс SPI, который обеспечивает простое подключение дисплея к таким платам как Raspberry Pi/Arduino/Nucleo и т.п.;
  • встроенный преобразователь напряжения, возможность работать с уровнями напряжения 3.3V/5V;
  • поставляется вместе с руководством и ресурсами для разработки (есть примеры программ для Raspberry Pi/Jetson Nano/Arduino/STM32).

Технические характеристики дисплея E-Paper 1,54′

  • рабочее напряжение: 3.3V/5V;
  • интерфейсы: 3-х проводный SPI, 4-х проводный SPI;
  • размеры модуля дисплея: 48mm × 33mm;
  • размеры экрана дисплея: 27.6mm × 27.6mm;
  • размер точки дисплея: 0.138 × 0.138;
  • разрешение: 200 × 200 пикселов;
  • цвет дисплея: черный, белый;
  • число уровней серого цвета: 2;
  • время частичного обновления экрана: 0.3 с;
  • время полного обновления экрана: 2 с;
  • мощность, необходимая для обновления экрана: 26,4 мВт;
  • потребляемая мощность в режиме ожидания: <0,017 мВт;
  • угол обзора: >170°.

Протокол связи дисплея E-Paper

E-Paper осуществляет взаимосвязь с другими устройствами на по протоколу SPI, но протокол SPI, используемый им, немного отличается от стандартного SPI протокола. Используемый в дисплее SPI протокол необходим только для передачи данных, которые используются для формирования изображения на экране дисплея, поэтому линия передачи данных от ведомого (slave) к ведущему (master) устройству не нужна, в отличие от стандартного SPI протокола. В следующей таблице представлено описание контактов (распиновка) дисплея E-Paper.

Контакт Описание
VCC 3.3V/5V
GND земля
DIN SPI MOSI pin (передача данных)
CLK SPI SCK pin (линия синхронизации)
CS SPI chip selection, low active (выбор чипа)
DC выбор режима команд/данных (high — данные, low — команды)
RST External reset, low active (внешний сброс)
BUSY Busy status output, high active

Протокол SPI в дисплее E-Paper имеет следующие особенности:

(a) Когда на контакте CS низкий уровень (low) – чип готов к работе, а когда на CS высокий уровень (high) – чип отключен (disabled).

(b) Контакт DC управляет переключением между режимами передачи команд/данных. Когда на DC 0 – включен режим команд, а когда на DC 1 – включен режим данных.

(c) Контакт (линия) синхронизации протокола SPI в данном случае имеет обозначение SCLK.

(d) Контакт (линия) передачи данных от ведущего к ведомому протокола SPI в данном случае имеет обозначение DIN.

Тайминги (временные моменты) передачи данных в протоколе SPI в данном случае определяются с помощью параметров CPHA и CPOL.

1 – в холостом (незанятом) состоянии (idle state) CPOL показывает уровень линии синхронизации данных. Когда CPOL равен 0, то на линии низкий уровень (low). С другой стороны, CPOL оказывает незначительное влияние на передачу данных.

2 – Когда CPHL = 0 данные собираются (забираются) на первом тактовом фронте линии синхронизации (serial synchronous clock), когда CPHL = 1 данные собираются на втором тактовом фронте линии синхронизации.

(e) Существует 4 доступные настройки протокола SPI. Широкое применение находит способ SPI0 с параметрами CPHL = 0 и CPOL = 0. Передача данных начинается на первом спадающем фронте линии SCLK как показано на диаграмме ниже, 8 бит данных объединяются в один временной цикл. Данные передаются побитно, сначала наиболее значащие биты (MSB).

Тайминги передачи данных протокола SPI в дисплее E-Paper

Схема проекта

Схема подключения дисплея E-Paper к плате Arduino Uno представлена на следующем рисунке.

Схема подключения дисплея E-Paper к плате Arduino Uno

Дисплей E-Paper имеет разрешение 200×200 пикселов, поэтому пропускной способности протокола SPI вполне хватит для передачи данных на этот дисплей. Дисплей E-Paper поддерживает питающее напряжение 3.3V, поэтому он подключен к контакту 3.3V платы Arduino Uno. Остальные контакты дисплея толерантны (могут работать) с напряжением 5V. Контакт GND дисплея подключен к контакту GND платы Arduino Uno. Контакт DIN дисплея подключен к цифровому контакту 11 платы, контакт CLK – к контакту 13 платы, CS – к контакту 10, DC – к контакту 9, контакт RST – к контакту 8, контакт BUSY – к контакту 7. Полная схема соединений между дисплеем E-Paper и платой Arduino Uno представлена в следующей таблице.

Дисплей E-Paper Плата Arduino Uno
3.3V 3.3V
GND GND
DIN D11
CLK D13
CS D10
DC D9
RST D8
BUSY D7

Собранная конструкция проекта показана на следующем рисунке.

Внешний вид собранной конструкции проекта

Объяснение программы для Arduino

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

В данном проекте мы будем выводить на экран дисплея E-Paper картинку и надпись CircuitDigest. Скачать код программы для данного проекта и необходимые библиотеки вы можете по следующей ссылке. В проекте мы будем использовать библиотеку SPI.h для связи по протоколу SPI и библиотеку imagedata.h для вывода изображений на экран дисплея E-Paper.

Далее в программе мы будем использовать функцию Serial.println для вывода надписи “welcome to” на первой строке дисплея. Для дисплея E-Paper нам доступны всего два цвета – черный и белый. Для задания цвета и размера выводимого на дисплей сообщения мы будем использовать функцию Paint.DrawString . Затем на следующей строчке дисплея мы выведем надпись “Circuit Digest”.

Затем мы отобразим на экране дисплея картинку, для этого сформируем для картинки шестнадцатеричный (HEX ) код. Это можно сделать, например, с помощью конвертера Image2cpp. В качестве картинки, выводимой на экран дисплея, мы будем использовать лого сайта CircuitDigest (ссылка на него приведена в конце статьи). Шестнадцатеричный код (hex code) этой картинки необходимо записать в библиотеку imagedata.cpp.

На следующей картинке показан результат работы нашего проекта – на экран дисплея выведена одна строка текста и картинка (лого сайта CircuitDigest). Но даже вывод одного такого изображения отнял очень много памяти у платы Arduino Uno. Поэтому для полноценной работы с дисплеями E-Paper желательно использовать микроконтроллерные платы с большим объемом памяти, например, ESP8266, ESP32, STM32, Raspberry Pi. У дисплея E-Paper есть такая особенность как возможность обновления изображения части экрана, не обновляя при этом содержимое всего экрана дисплея. Обновление всего экрана дисплея занимает около 2 секунд и на это затрачивается достаточно много энергии. А обновление части экрана и происходит быстрее, и требует значительно меньшего количества энергии.

Тестирование работы дисплея E-Paper

Энергопотребление дисплея E-Paper

Мы измерили энергопотребление дисплея E-Paper с помощью USB измерителя тока (USB current meter). Когда происходит обновление экрана дисплея на это затрачивается достаточно много тока (приблизительно 7-9 mA), а когда дисплей не обновляется он потребляет совсем мало так (0.02 mA). Таким образом, дисплеи E-Paper можно использовать в устройствах, получающих питание от батареек.

Измерения тока дисплея E-Paper показаны на следующих картинках (во время процесса обновления экрана и после его завершения). Но здесь следует учитывать тот факт, что мы измерили немного большее значение тока чем потребляет непосредственно сам дисплей, поскольку в данном случае мы измерили его энергопотребление совместно с платой Arduino Uno.

Тестирование энергопотребления дисплея E-Paper

Преимущества дисплеев E-Paper

Дисплеи E-Paper (электронная бумага) не излучают свет, а отражают его. В этом плане они не похожи на традиционные ЖК или OLED-дисплеи. Они больше похожи на обычные чернила на бумаге. Данная особенность делает дисплеи E-Paper очень удобными для чтения и они обладают отличной читаемостью даже под прямыми солнечными лучами. Еще одна замечательная особенность подобных дисплеев заключается в том, что они могут хранить статичный текст и изображения в течение нескольких месяцев без потребления электричества. Дисплеи E-Paper могут отображать текст и изображения, даже когда они выключены (!), что делает их идеальными для применения в маломощных проектах.

Недостатки дисплеев E-Paper

Стоимость дисплеев E-paper значительно выше чем у других типов дисплеев. Другим существенным недостатков данных дисплеев является большое время, необходимое для обновления информации на экране дисплея – около 2-3 секунд. Таким образом, они хорошо подходят для отображения статичных изображений и текста и очень плохо – для отображения меняющихся изображений (анимации). Поэтому они и находят применение только, в основном, в различных “читалках” и почти никогда не применяются в проектах, требующих отображения видео.

Исходный код программы (скетча)

В данном проекте мы использовали дисплей E-Paper с диагональю 1,54 дюйма версии V2. Следует помнить о том, что коды программ для различных версий данного дисплея отличаются. Например, здесь мы использовали библиотеку apd1in54_V2.h, а библиотека epd1in54.h в нашем случае работать уже не будет – она подходит только для первой версии дисплея.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *