Применение дисплея DES E-ink в барометре-термометре-гигрометре с гистограммой изменения давления за неделю

Материал опубликован в журнале СОВРЕМЕННАЯ ЭЛЕКТРОНИКА № 1/2023

В статье приведено описание аппаратной (схемы, разводка плат) и программной реализации барометра-термометра-гигрометра на базе МЭМС-датчика BME280, микроконтроллера (МК) EFM8SB20F16 и DES E-ink-дисплея GDEW029M06 (2,9 дюйма, разрешение 128×296 пикселов) с питанием от литиевой батарейки ER14505 (3,6 В, 2,7 А⋅ч, размер AA), обеспечивающей непрерывную работу прибора в течение как минимум 10 лет. Помимо цифровых значений давления, температуры и влажности, отражающихся на дисплее раз в 10 минут, на нём построена гистограмма суточного изменения давления за 8 дней. Рассказано о конструкции и результатах работы прибора. 

Введение

Пару лет назад (в конце 2020 года) компания Good Display начала производство матриц по технологии собственной разработки DES – Display Electronic Slurry (slurry – жидкая глина, суспензия, взвесь). Преимущества дисплеев на базе матрицы DES (по данным Good Display):
  • расширенный рабочий температурный диапазон;
  • наличие УФ-фильтра;
  • более высокий контраст;
  • более низкая цена.
Что касается расширенного температурного диапазона и низкой цены, то некоторые (хотя далеко не все) современные стандартные E-ink-дисплеи также уже работают в широком температурном диапазоне, да и цена их существенно снизилась. А вот что касается контрастности изображения, то здесь действительно DES-дисплеи не имеют равных. Это объясняется следующей причиной. Если посмотреть через лупу на обычный E-ink-дисплей, то можно обнаружить, что он состоит из своеобразных сот, расположенных под небольшим углом, и каждый его пиксел является как бы конгломератом из нескольких таких сот и поэтому не имеет четких границ (рис. 1а). У DES-дисплея каждый пиксел представляет собой квадрат с чёткими границами (рис. 1б), за счёт чего и достигается очень высокий контраст.

Рис. 1. Сравнение матриц двух типов E-ink дисплеев: а) Micro-cup (микро-чашка) pixel display; б) DES pixel display

Одним из представителей таких DES-дисплеев является 2,9-дюймовый дисплей GDEW029M06 размером 79×36,7×1,22 мм с разрешением 128×296 пикселов, оснащённый встроенным контроллером UC8151. Помимо очень высокой контрастности, сохраняемой даже при отрицательных температурах (по сравнению, например, с дисплеем, описанном в [1]), этот дисплей отличается сниженным до двух секунд временем обновления изображения (до 5 секунд в [1]). Этот дисплей и был выбран в данной разработке.

Дальнейшее изложение построено следующим образом. Вначале приведены принципиальные схемы устройства и кратко описаны его программные средства (в основном касающиеся вывода информации из МК в дисплей), далее показана разводка платы прибора. Затем рассмотрены конструкция прибора и результаты его работы.

Принципиальные схемы

В схеме (рис. 2) объединены сразу 3 устройства: микропотребляющий (с током потребления не более 1 мкА) стабилизатор STLQ015M30R (DA1) с выходным напряжением 3 В, МК EFM8SB20F16-QFN24 (DD1) и устройство для прямого подключения дисплея: DC/DC-конвертор на базе транзистора SI1308EDL (VT1), диодов PMEG3010 (VD1–VD3), катушки индуктивности SH3018 (L1), конденсаторов (C6–C17), резисторов R3, R4 и разъёма FPC24/0.5mm (X2), к которому подключается шлейф дисплея. В [1] эти три устройства были на трёх отдельных платах. 

Рис. 2. Принципиальная схема платы прибора

Конденсаторы C4 и C5 положены для штатной работы стабилизатора DA1, конденсаторы C2 и C3 – для штатной работы МК DD1. RC-цепочка R1R2C1 предназначена как для штатной работы МК при включении питания (она затягивает низкое состояние сигнала RST, требующееся по штату работы, на время заряда конденсатора C1), так и в режиме программирования по интерфейсу C2 с помощью сигналов RST и C2D (резистор R2 даёт возможность легко управлять сигналом RST от этого интерфейса). Эти два сигнала (RST и C2D) и «земля» выведены на штыревой разъём X3; к нему ответным гнездом подключается кабель сопряжения с USB DEBUG адаптером, который, в свою очередь, сопрягается с компьютером по интерфейсу USB (схему сопряжения можно найти в [2]). Питание на плату подаётся с углового штыревого разъёма WB-02R (X1). К нему ответным гнездом PHR-02 (X1' на рис. 3) подключается двухпроводный кабель от батарейки ER14505-LD/PHR-02P (BAT1 на рис. 3), которым она оборудована. К штыревому разъёму PBS-06 (X4) ответным гнездом PLS-06R (X4' на рис. 3) подключается модуль с BME280.

Рис. 3. Дополнительные компоненты прибора

Как видно из рис. 2, схема платы не отличается особой сложностью, поэтому она легко разводится и имеет размер всего 22×26 мм (см. далее).

Программные средства

Программа для МК в уже готовом загрузочном формате (файл EFM8SB20F16G-A-QFN24_4.hex) приведена в дополнительных материалах к статье на сайте журнала. Её можно запрограммировать в МК вышеприведённым способом с помощью USB-DEBUG адаптера. Однако для тех, кто хочет самостоятельно написать свою программу, автор хотел бы поделиться некоторыми её моментами, в основном связанными с изменёнными по сравнению с [1] портами МК и выводом информации на дисплей.

Конфигурация портов для SPI0 и SPI1 (рис. 4а) соответствует МК DD1 на схеме рис. 2. Для обоих SPI сигналы SCK и MOSI настраиваются как цифровые выходы, а сигналы MISO – как цифровые входы. Порты P0.1 (CSB), P0.5 (RES), P0.6 (D/C) и P0.7(CSD) настраиваются как цифровые выходы, а порт P0.4 (BUSY) – как цифровой вход.

Рис. 4. Конфигурация портов МК (а) и настройка RTC (б)

Таймер RTC настраивается в соответствии с рис. 4б, что даёт погрешность по времени около ±1 минута в сутки.   

В программе установлены следующие назначения портов для соответствующих сигналов. 

sbit CSB = P0^1; // - для BME
sbit CSD = P0^7; // - для EPD
sbit D_C = P0^6; // - для EPD
sbit RSTD = P0^5;// - для EPD
sbit BUSY = P0^4;// - для EPD

Остальные настройки аналогичны сделанным в [1].

Теперь по поводу вывода информации в дисплей. Этот вывод условно можно разделить на три типа.

Первый тип – вывод цифровых значений и их размерностей для давления, температуры и влажности. Эта информация выводится в две строки. В первой (верхней) строке выводится давление и его размерность. Например, «751 мм рт. ст.». Во второй (нижней) строке выводятся температура (со знаком) и влажность с их размерностями. Например, «+25°C  43% “капля”», где «капля» – рисунок капли с делениями. Все символы двух строк расположены строго один над другим и выводятся так же, как это описано в [1], поэтому, чтобы не повторяться, объяснение подобного вывода не приводится. Для символов выбран шрифт Onyx жирный размером 61, где каждый символ выводится в поле 22×64 пиксела, причём реальные высота и ширина символа не превышают 60 и 22 пиксела соответственно. Это позволяет выводить символы без горизонтальных пробелов с расстоянием между ними по вертикали в 4 пиксела.

Второй тип вывода – это своеобразная «картинка», в которой отражаются вертикальные координаты гистограммы с минимальными (710) и максимальными (780) значениями давления в мм рт. ст. Эти значения были выбраны в связи с тем, что по данным многолетних наблюдений минимальное давление в Москве (709 мм рт. ст.) было зафиксировано 25 ноября 1973 года, а максимальное (782 мм рт. ст.) – 14 декабря 1944 года. Реальный диапазон давлений, который показывал прибор, существенно у́же: от 725 до 774 мм рт. ст. Для получения «картинки»  использована хорошо известная программа LCD Font Maker V3.92. В этой программе подобная картинка была буквально нарисована, а для цифровых значений использован тот же шрифт Onyx жирный, но меньшего размера. Далее специальной опцией поворота эта картинка была повёрнута на 90° (рис. 5а). После этого опцией настройки формата вывода (сиреневая стрелка, рис. 5а) был выбран формат слева направо и сверху вниз (рис. 5б), а опцией кодировки картинки (красная стрелка рис. 5а) получены её коды (рис. 5в). Далее, нажав кнопку “Export” (красная стрелка, рис. 5в) и назвав нужный файл, можно получить все коды картинки, которые затем уже вставить в программу в виде массива. Если этот массив выводить подряд, то за счёт встроенного в контроллер дисплея инкрементирования и декрементирования счётчиков строк и столбцов все пикселы картинки выведутся туда, куда нужно. Размер картинки 128×25 пикселов, т.е. она строго вписывается в дисплей по вертикали (128), а расстояния между делениями в пикселах (10) как раз соответствуют 10 мм рт. ст., т.е. каждый пиксел соответствует 1 мм рт. ст. 

Рис. 5. Получение кодовой последовательности «картинки»: a) «картинка»; б) формат вывода кодов; в) получение файла с кодами

Третий тип вывода – это вывод гистограммы, столбцы которой представляют собой значения давления, снятые равно в полночь, за сегодняшний день и за всю предыдущую неделю. Эти значения давления сформированы в виде массива с восемью элементами (AP[8]). Поскольку измерение параметров производится раз в 10 минут, то в час происходит 6 измерений, а в сутки – 144, что нетрудно подсчитать. В полночь, когда произведены все 144 измерения, эти значения просто переписываются одно в другое, т.е. сегодняшнее давление переписывается во вчерашнее, вчерашнее – в позавчерашнее и т.п. до конца недели. В программе это выглядит следующим образом:

AP[7]=AP[6];
AP[6]=AP[5];
AP[5]=AP[4];
AP[4]=AP[3];
AP[3]=AP[2];
AP[2]=AP[1];
AP[1]=AP[0];

Здесь никаких особенных трудностей, на взгляд автора, не возникает.

Построение самих столбцов гистограммы давления также не отличается особой сложностью. 

Идея заключается в следующем. 

В программном смысле каждый столбец дисплея шириной в 1 пиксел представляет собой 16-байтный массив (MP[16]), поскольку по вертикали дисплей имеет разрешение 128 (128/8 = 16), а вывод осуществляется побайтно. 
Пусть, например, измеренное давление равно 753 мм рт. ст. Во-первых, от этого давления необходимо отнять минимальное его значение (710 – см. рис. 5а), чтобы столбец строго вписывался в картинку: 753 – 710 = 43. Далее, поскольку столбец выводится побайтно, необходимо выяснить, сколько целых байт содержится в числе 43. Для этого 43 надо просто нацело разделить на 8: 43/8 = 5, т.е. в данном случае получим 5 нижних байт столбца, которые должны быть нулевыми, чтобы столбец выводился чёрными пикселами. А остаток от деления (в данном случае это 3) определяет, что 3 младших бита верхнего байта столбца должны также быть нулевыми, чтобы они также выводились чёрными пикселами (байт в столбец дисплея выводится сверху вниз старшим битом вперёд). Как сформировать байт, у которого количество младших бит в точности соответствует остатку (в данном случае – 3)? Один из вариантов – взять число 0xff и сдвинуть его влево на число остатка (т.е. в данном случае на 3). Здесь необходимо напомнить, что при сдвиге байта влево освободившиеся от сдвига правые (младшие) биты устанавливаются в ноль. Таким образом, если давление равно 753, то столбец состоит из 5 полных нулевых байт и трёх младших нулевых бит 6-го (верхнего) байта. Для того чтобы этот столбец шириной в 1 пиксел вывелся на своё место, соответствующее картинке, необходимо также вывести верхние и нижние пробелы (равные 0xff). 

Теперь по поводу ширины столбцов гистограммы. Здесь имеет смысл сегодняшний столбец сделать потолще, чтобы он выделялся на фоне остальных, которые сделать тоньше. Ширина сегодняшнего столбца была выбрана равной 6 пикселам, ширина остальных – 3 пиксела, ширина пробелов между столбцами – 3 пиксела.

Подпрограмма вывода столбца, соответствующего давлению (P) и ширине в пикселах (N), с необходимым количеством верхних и нижних пробелов приведена ниже. С учётом вышесказанного, на взгляд автора, понять её достаточно просто.

//---------------------   
void OUTSTOLB(uint8_t N, uint16_t P)
{
uint8_t xdata MP[16],i,CP,OSTP,BYTEOST,k,b;
CP=(P-710)/8;//целая часть
OSTP=(P-710)%8;//остаток
        if (OSTP != 0)
        {
        b=1;
        BYTEOST=0xff << OSTP;//сдвиг 0xff влево на OSTP бит 
        }
        else
        b=0;
     for (i=0; i<(12-CP-b);i++)
     { MP[i]=0xff;//верхние пробелы
       }
     if (b != 0) // есть остаток 
     MP[11-CP]=BYTEOST;// биты остатка
     for (i=12-CP; i<12;i++)
     {  MP[i]=0x00; //черные пикселы
     }
     MP[12]=0x7f; //P=710
     MP[13]=MP[14]=MP[15]=0xff; //нижние пробелы
     for (k=0;k<N;k++)
      {  for (i=0;i<16;i++)
        { EPD_WRITE_DAT(MP[i]);// вывод столбца
        }
      }
}
//---------------------   

Обращение к этой подпрограмме, если, например, требуется вывести сегодняшний столбец, равный давлению (press) и имеющий ширину в 6 пикселов, очень простое:

OUTSTOLB(6, press);

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

Program Size: data=118.1 xdata=38 const=0 code=9621
LX51 RUN COMPLETE.  0 WARNING(S),  0 ERROR(S)
Finished building target: EFM8SB20F16G-A-QFN24_4.omf

Из этого сообщения можно заключить, что в программе использована почти вся внутренняя оперативная память с прямой адресацией объёмом 128 байт (data = 118,1), а внешняя оперативная память с косвенной адресацией объёмом 2 кбайт почти не использована (xdata = 38). Кодовая часть программы использует чуть более половины всей программной памяти объёмом 16 кбайт или 16 384 байта (code = 9621). Остаток программной памяти составляет: 16 384 – 9621 = 6763 байт ≈ 6,6 кбайт. Кроме того, при трансляции применена так называемая small-модель, в которой данные располагаются в области памяти с прямой адресацией (data). В этом случае, во-первых, существенно экономится программная память, а во-вторых, программа работает несколько быстрее.  

Разводка платы, конструкция прибора и результаты его работы

Разводка платы сделана автором с помощью программы SprintLayOut v.6. Файл разводки в формате *.lay6 приведён в дополнительных материалах к статье на сайте журнала. Из рисунка разведённой платы можно заключить, что разводка очень проста, а сама плата (рис. 6) небольшого размера (22×26 мм).

Рис. 6. Разводка платы прибора: а) вид со стороны расположения компонентов; б) вид с обратной стороны

Прибор расположен в корпусе «20–22» размером 90×58×23 мм с защёлкивающейся крышкой (рис. 7), в котором для дисплея прорезано окно по размеру видимой части его экрана. Для доступа воздуха к внутреннему пространству прибора в крышке сверху и снизу сделано по 5 отверстий диаметром 4 мм. Сам дисплей приклеен к текстолитовой пластине толщиной 2 мм тонким скотчем с двусторонним липким слоем, а пластина, в свою очередь, приклеена к внутренней поверхности корпуса пористой лентой с двусторонним липким слоем. Шлейф дисплея перегнут через вырез в пластине и вставлен в разъём платы, которая приклеена к пластине такой же пористой лентой. Этой же лентой к пластине и боковой стенке корпуса приклеена батарейка. Как только разъём кабеля от батарейки вставлен в соответствующий разъем платы, прибор сразу начинает работать, и остаётся только защёлкнуть крышку. Это необходимо сделать ровно в полночь.

Рис. 7. Общий вид прибора в открытом корпусе (без крышки)

Показание прибора (рис. 8) снято после того, как он проработал 8 дней (с 30.11.22 по 07.12.22).

Рис. 8. Общий вид прибора, проработавшего неделю

В начале этого периода в Москве наблюдалось аномально высокое давление, доходящее до 774 мм рт. ст., которое постепенно снижалось, что можно определить по гистограмме. Прибор был включён за 2 минуты до полуночи (в 23:58), и каждый день в районе полночи фиксировалось время, когда в гистограмме появлялось новая полоска. Как показал эксперимент, это время менялось с 23:57:10 до 23:59:05, т.е. абсолютная погрешность по времени составила приблизительно ±1 минуту, хотя в руководстве по использованию МК (EFM8SB2 Reference Manual) указано, что погрешность работы внутреннего генератора RTC составляет ±20%. Погрешность (±1 минута) можно существенно снизить, если использовать внешний часовой кварцевый резонатор частотой 32 768 Гц, подключённый к выводам 8 и 9 МК (XTAL3 и XTAL4, рис. 2, рис. 4а). Однако поскольку погрешность по времени меняется как в положительную, так и в отрицательную сторону от случая к случаю, автор посчитал, что подключение кварцевого резонатора совсем не обязательно.     

Как можно убедиться из рис. 9, контрастность изображения DES E-ink дисплея ничуть не снижается при отрицательных температурах, что является большим преимуществом перед обычным E-ink дисплеем, у которого изображение в этих условиях существенно тускнеет ([1]).  

Заключение

Применение DES E-ink дисплея GDEW029M06 совместно с МЭМС-датчиком BME280, МК EFM8SB20F16, литиевой батарейкой ER14505 и микропотребляющим стабилизатором STLQ015M30R позволили сконструировать прибор, который, помимо цифровых значений атмосферного давления, температуры и влажности, выводит на дисплей гистограмму давления за последние 8 дней. Это позволяет в некоторой степени осуществлять прогноз давления на следующий день, что часто бывает жизненно необходимо для метеозависимых людей. То, что прибор в течение 10 лет работает без замены батарейки и, как следствие, не требует никакого обслуживания, является большим преимуществом по сравнению с похожими приборами (с OLED-дисплеями или дисплеями с ЖКИ), в которых приходится часто менять батарейки, т.е. постоянно нуждающихся в обслуживании.

Литература

  1. Кузьминов А. Модернизированный барометр-гигрометр-термометр с батарейным питанием на базе микроконтроллера EFM8SB20F16 и E-ink дисплея // Современная электроника. 2022. № 9.
  2. Кузьминов А.Ю. Связь между компьютером и микроконтроллером. Современные аппаратные и программные средства. М.: Перо, 2018.



Поделиться:



Комментарии

Текст сообщения*
Защита от автоматических сообщений