Современная электроника №9/2022

ИНЖЕНЕРНЫЕ РЕШЕНИЯ 33 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 9 2022 включённые (#include <…>) в основную программу, и «лазить» по этимфайлам, чтобы понять работу основной про- граммы, – дело очень неприятное, дол- гое и неблагодарное. В основном при программировании E-ink дисплея имеются две проблемы. Первая – это инициализация дисплея. В примерах программ такая инициали- зация заключается в выводе в дисплей порядка 30–35 команд и данных, опре- деляющих разрешение дисплея, уста- новку счётчиков строк и столбцов на начало, различные моменты установки напряжений DC-DC-конвертора, темпе- ратурные параметры и т.п., и особой сложности (инициализация) не пред- ставляет. Для решения этой проблемы нужно просто очень внимательно, без ошибок переписать (из примеров) все эти команды и данные, передаваемые вслед за командами, в свою программу, и всё будет работать. Иное дело – вывод информации в дисплей. Здесь имеется два варианта. Но прежде чем описывать эти два вари- анта, сделаем некоторое отступление относительно того, что и как требует- ся вывести в E-ink дисплей. Исходя из разрешения дисплея 200 × 200 пикселов для отображения 3 параметров: давления, температуры и влажности – имеет смысл расположить показания этихпараметровна дисплее в триряда. Впервомряду –показания дав- ления, во втором – температуры, в тре- тьем – влажности. Если, например, дав- ление равно 751 мм рт. ст., температура 25°C, а влажность 45%, то в первом ряду должно быть число «751» и два симво- ла, отражающихразмерность давления, например, «мм Hg» (достаточно часто используемая), поскольку символы «мм рт. ст.» занимают много места. Дру- гими словами, по горизонтали должно располагаться 5 символов. Такоеже коли- чество символов должно располагаться во второми третьемряду. Например, для температурыэтобудет знак («+» или «–»), показания, например, «25», символы«°» и «C», а для влажности–показания, напри- мер, «45», размерность, «%», икакой-либо символ, отражающий самопонятие влаж- ности, например, капля с делениями, как часто егообозначают. Причём, посколь- ку перечисленных символов для влажно- сти всего 4, перед показаниями должен присутствовать символ пробела, чтобы общее количество символов было 5, как для давления и температуры. Дисплей в программном смысле представляет собой строки и столб- цы. Каждая строка имеет ширину ров- но 8 пикселов, которым соответству- ет 8 бит или 1 байт. Таким образом, в дисплей по вертикали поместится ровно 25 строк (25 × 8 = 200), начиная с нулевой и кончая 24-й. Кроме того, в дисплее имеется ровно 200 столбцов, начиная с нулевого и кончая 199-м. Если показания располагаются в 3 ряда, зна- чит, каждый символ должен состоять из 8 строк (8 × 3 = 24), и для заполнения все- го дисплея должна присутствовать ещё одна пустая строка, чтобы общее коли- чество строк было 25. Таким образом, каждый символ по вертикали должен занимать 8 × 8 = 64 пикселя. Посколь- ку по горизонтали имеется 200 столб- цов, а символов 5, то, разделив 200 на 5, получим 40. Но между символами, чтобы они не сливались, должны быть предусмотрены пробелы хотя бы в 3 пикселя. Если ширина символа будет, например, 37, то по горизонтали 5 сим- волов займут 5 × 37 = 185 пикселов, и останется ещё 15 пробельных столбцов, что составляет по 3 пробела на символ. Таким образом, один символ должен занимать поле в 64 × 37 пикселов или 8 однобайтных строк по 37 столбцов, и для его вывода в дисплей понадобится 8 × 37 = 296 байт. О том, как сформи- ровать эти 296 байт, будет рассказано далее. Вывод информации в дисплей осуществляется по строкам и столбцам. Теперь, возвращаясь к прерванной последовательности изложения, мож- но уже пояснить, что это за два вари- анта вывода. В первом варианте специальными командами, посылаемыми в дисплей, можно сформировать 3 окна высотой по 8 строк ишириной 200 столбцов. При этом нужно указать номер начальной и конечной строки окна и номер началь- ного и конечного столбца. Например, для первого ряда это может быть 0-я и 7-я строки, или, пропустив одну про- бельную строку сверху, 1-я и 8-я стро- ки. А номера начального и конечно- го столбцов указать как 0-й и 199-й. В дисплее организованы счётчики строк и столбцов. При выводе символа в окно счётчики строк и столбцов могут инкрементироваться (увеличиваться на единицу) или декрементироваться (уменьшаться). Это зависит от коман- ды, посылаемой в дисплей. Для просто- ты объяснения предположим, что они инкрементируются. Пусть начальные и конечные значения счётчиков строк и столбцов равны 1 и 8 и 0 и 199 соот- ветственно. Тогда при выводе символа (296 байт) происходит следующее. При выводе восьми байт (с 0-го по 7-й из 296) в 0-й столбец счётчик строк инкремен- тируется, но после вывода 7-го байта (в строку номер 8) счётчик строк авто- матически устанавливается на 1-ю стро- ку, а счётчик столбцов инкрементиру- ется, т.е. устанавливается с 0-го на 1-й столбец. Это позволяет не следить за счётчиками, в связи с чем все 296 байт каждого символа, если их выводить под- ряд, выведутся туда, куда нужно. Анало- гично можно сформировать 2-е окно для 2-го ряда и 3-е окно для 3-го ряда символов, и таким же способом выве- сти всю необходимую информацию в дисплей. Кстати, такойже способ выво- да применяется при выводе информа- ции в OLED-дисплей. На первый взгляд кажется, что вывод информации в E-ink дисплей достаточно простой. Но здесь кроется один неприятный момент, или своеобразная ловушка (по времени). Дело в том, что, после того как инфор- мация записана в памяти контроллера, для того чтобы, она попала на экран дис- плея, необходимо дать команду, кото- рую в программах называют “update” (обновить) или “refresh” (освежить). В русском языке есть понятие «осве- жить в памяти». На самом деле такой «рефреш» при переносе изображения из записанного в памяти контролле- ра на экран дисплея занимает несколь- ко секунд, в отличие от OLED-дисплея, у которого информация на экране появ- ляется сразу же после записи в память контроллера. Например, «рефреш» для каждого подобного окна занима- ет около 5 секунд, а для всех 3 окон – более 15 секунд. Кроме того, при таком оконном выводе требуется предва- рительно ещё очистить весь дисплей, т.е. заполнить всю его память (а это 25 × 200 = 5000 байт) числами ffh, и в конце дать ещё одну команду «рефреш». Причём, как ни странно, очистка экра- на занимает около 3 секунд. В результате подобный оконный вывод займёт около 22 секунд (это было проверено секундо- мером). Естественно, при таком окон- ном выводе дисплей работает по полной программе и потребляет значительный ток в течение 22 секунд. Даже при обнов- лении показаний давления, темпера- туры и влажности один раз в 10 минут всё равно 22 секунды– непозволитель- но долго. Здесь уже никакой батарей- ки не хватит, или её придется достаточ- но часто менять. В связи с этим автор задался вопросом: а нельзя ли вывести всю информацию на экран дисплея за

RkJQdWJsaXNoZXIy MTQ4NjUy