Третий тип вывода - это вывод гистограммы, столбцы которой представляют собой значения давления, снятые ровно в полночь, за сегодняшний день и за всю предыдущую неделю. Эти значения давления сформированы в виде массива с восемью элементами (AP[8]). Поскольку измерение параметров производится раз в десять минут, то в час происходит шесть измерений, а в сутки - 144, что нетрудно подсчитать. В полночь, когда произведены все 144 измерения, эти значения просто переписываются одно в другое, т. е. сегодняшнее давление переписывается во вчерашнее, вчерашнее - в позавчерашнее и т. д. до конца недели. Как это выглядит в программе, показано в табл. 2.
Таблица 2
АР[7]=АР[6]; |
АР[6]=АР[5]; |
АР[5]=АР[4]; |
АР[4]=АР[3]; |
АР[3]=АР[2]; |
АР[2]=АР[1]; |
АР[1]=АР[0]; |
Здесь никаких особенных трудностей, на взгляд автора, не возникает. Построение самих столбцов гистограммы давления также не отличается особой сложностью. Идея заключается в следующем. В программном смысле каждый столбец гистограммы дисплея шириной в один пиксел представляет собой 16-байтный массив (MP[16]), поскольку по вертикали дисплей имеет разрешение 128 (128/8 = 16), а вывод осуществляется побайтно. Чтобы вывести столбец шириной в один пиксел, необходимо выяснить его высоту в зависимости от значения давления. Для этого из значения давления (P) нужно вычесть минимальное его значение: P-720. Далее, поскольку каждый мм рт. ст. занимает два пиксела, нужно узнать, сколько целых байт (CP) занимает один столбец. Для этого значение (P-720) нужно умножить на два и разделить на восемь: CP = ((P- 720)x2)/8 или, сократив на два, получим CP = (P-720)/4. Аналогично можно получить и остаток OSTP = (P-720)%4 (знак % означает, что при делении на четыре результат будет равен остатку). Теперь необходимо сформировать выводимый массив MP[16], состоящий из 16 байт, поскольку разрешение дисплея по вертикали равно 128 пикселам или 16 однобайтным строкам.
Вначале выводим в нулевой элемент массива MP[0] число 0x3f: MP[0] = 0x3f, т. е. число, у которого два старших бита нулевые (0011 11112), что соответствует минимальному давлению 720 мм рт. ст., поскольку 1 мм рт. ст. занимает два пиксела. Эти два бита соответствуют двум верхним чёрным пикселам байта, которые строго располагаются на уровне нижней риски картинки рядом с числом 720 (см. рис. 4).
Далее выводим в массив целое число (CP) нулевых байт (т. е. байт с чёрными пикселами), уместившихся в столбец.
Теперь, если остаток нулевой, выводим в следующий элемент массива пробел (0xff), в противном случае выводим байт, который равен числу 0xff, сдвинутому влево на удвоенный остаток 2*OSTP), поскольку каждый мм рт. ст. занимает два пиксела. Здесь необходимо напомнить, что при сдвиге байта влево освободившиеся от сдвига правые (младшие) биты устанавливаются в ноль. Это нижние пикселы чёрного цвета байта самой верхней части столбца.
После этого выводим в массив оставшиеся (до 16 байт) пробелы (0xff).
Далее, в зависимости от ширины столбца (N), выводим (уже в дисплей) сформированный 16-байтный массив столько раз, какова ширина столбца в пикселах.
Несмотря на такое пространное объяснение, подпрограмма довольно незатейлива, и, с учётом вышесказанного, понять её довольно просто. Эта подпрограмма вывода столбца, соответствующего давлению (P) и ширине в пикселах (N), с необходимым числом верхних и нижних пробелов, приведена в табл. 3.
Таблица 3
Теперь по поводу ширины столбцов гистограммы. Здесь имеет смысл сегодняшний столбец сделать пошире, чтобы он выделялся на фоне остальных, которые сделать уже. Ширина сегодняшнего столбца была выбрана равной 17 пикселам, ширина остальных - семь пикселов, ширина пробелов между столбцами - три пиксела.
Обращение к этой подпрограмме, если, например, требуется вывести сегодняшний столбец гистограммы, равный давлению (press) и имеющий ширину в 17 пикселов, и остальные семь столбцов шириной семь пикселов, с учётом пробелов в три пиксела между ними, очень простое (табл. 4).
Таблица 4
После трансляции всей программы в среде Simplisity Studio v.4 на экран в специальном окне, отражающем результат трансляции, выведется сообщение (табл. 5).
Таблица 5
Из этого сообщения можно заключить, что в программе использована почти вся внутренняя оперативная память с прямой адресацией объёмом 128 байт (data=118.1), а внешняя оперативная память с косвенной адресацией объёмом 2 кБ почти не использована (xdata=36). Кодовая часть программы использует чуть более половины всей программной памяти объёмом 16 кБ или 16384 байта (code=8582). Остаток программной памяти равен: 16384 -- 8582 = 7802 а 7,6 кБ. Кроме того, при трансляции применена так называемая small-модель, в которой данные располагаются в области памяти с прямой адресацией (data). В этом случае, во-первых, существенно экономится программная память, а, во-вторых, программа работает несколько быстрее.
Как видно из рис. 1, схема не отличается особой сложностью, поэтому платалегко разводится и имеет размеры всего 22x26 мм. Плата разведена с помощью программы SprintLayOut v.6. Файл разводки в формате *.lay6 приведён в дополнительных материалах к статье на сайте журнала. Чертёж платы, изготовленной из фольгированного с двух сторон стеклотекстолита толщиной 1,5 мм, показан на рис. 7, а расположение элементов в масштабе 2:1 - на рис. 8. Фотографии собранной платы приведены на рис. 9 и рис. 10. Несмотря на несколько усложнённую схему по сравнению со схемой в [1] (использование МК EFM8SB20F16 в корпусе QFN24 размерами 4x4 мм против МК EFM8SB10F8 в корпусе QFN20 размерами 3x3 мм, замена выводного конденсатора 4,7 мкФ на конденсатор для поверхностного монтажа той же ёмкости, добавление стабилизатора STLQ015M30R и кварцевого резонатора ZM1610), размеры платы стали немного меньше - 22x26 мм против 22x27 в [1].
Рис. 7. Чертёж платы устройства
Рис. 8. Расположение элементов на плате устройства
Рис. 9. Плата в сборе
Рис. 10. Плата в сборе
Чёрными точками на рис. 8 отмечены переходные отверстия с одной стороны платы на другую. В эти отверстия (их шесть) следует вставить тонкий лужёный медный провод и пропаять его с двух сторон платы. Через остальные переходные отверстия проходят штыри разъёмов, их также следует пропаять с двух сторон платы. Эта процедура позволяет не использовать металлизацию отверстий, технология которой в домашних условиях весьма проблематична.
Прибор сконструирован в корпусе "20-22" размерами 90x58x23 мм с защёлкивающейся крышкой (рис. 11), в котором для дисплея прорезано окно по размеру видимой части его экрана. Для доступа воздуха к внутреннему пространству прибора в крышке сверху и сни-зу просверлено по пять отверстий диаметром 4 мм. Сам дисплей приклеен к текстолитовой пластине толщиной 2 мм тонким скотчем с двусторонним липким слоем, а пластина, в свою очередь, приклеена к внутренней поверхности корпуса пористой лентой с двусторонним липким слоем. Шлейф дисплея перегнут через вырез в пластине и вставлен в разъём платы, которая приклеена к пластине такой же пористой лентой.
Рис. 11. Прибор в корпусе
Модуль BME280 (он сиреневого цвета на рис. 11) своим ответным гнездовым разъёмом надет на штыревой разъём платы прибора. Гальванический элемент приклеен тонким скотчем с двусторонним липким слоем к пластине и боковой стенке корпуса. Как только разъём кабеля от элемента вставлен в соответствующую ответную часть на плате, прибор сразу начинает работать, и остаётся только защёлкнуть крышку. Это необходимо сделать ровно в полночь. Перезапустить программу ("Reset") можно, если замкнуть на пару секунд между собой два крайних контакта (1 и 3) разъёма, предназначенного для программирования МК (XR1 на рис. 1), а затем разомкнуть их. Это также следует сделать ровно в полночь.
Рис. 12. Показания прибора
Рис. 13. Показания прибора
Показания прибора (рис. 12) сняты после того, как он проработал восемь дней. В середине этого периода в Москве наблюдалось аномально высокое давление, доходящее до 770 мм рт. ст., которое постепенно снижалось, что можно определить по гистограмме. Как можно убедиться из рис. 13, контрастность изображения DES E-ink-дисплея ничуть не снижается при отрицательных температурах, что является большим преимуществом перед обычным E-ink-дисплеем, у которого изображение в этих условиях существенно тускнеет. Применение DES E-ink-дисплея GDEW029M06 совместно с МЭМС-датчиком BME280, МК EFM8SB20F16, литиевым элементом ER14505 и микропотребляющимстабилизатором STLQ015M30R позволили сконструировать прибор, который, помимо цифровых значений атмосферного давления, температуры и влажности, выводит на дисплей гистограмму давления за последние восемь дней. Это позволяет в некоторой степени осуществлять прогноз давления на следующий день, что часто бывает жизненно необходимо для метеозависимых людей. Прибор работает в течение 10 лет без замены элемента питания и, как следствие, не требует никакого обслуживания. Это является большим преимуществом по сравнению с похожими приборами (с OLED-дисплеями или дисплеями с ЖКИ), в которых приходится часто менять элементы, т. е. постоянно нуждающимися в обслуживании.
Файл для программирования микроконтроллера и чертёж печатной платы находятся здесь.
Литература
1.Кузьминов А. Применение DES E-ink-дисплея в барометре-термометре-гиг-рометре с питанием от литиевого элемента CR2477. - Радио, 2023, № 1, с. 41-46.
2.Кузьминов А. Ю. Связь между компьютером и микроконтроллером. Современные аппаратные и программные средства. - М.: Издательство "Перо", 2018.
3.Кузьминов А. Барометр-термометр с питанием от литиевого элемента CR2477. - Радио, 2022, № 8, с. 40-42; № 9, с. 40-44.
Автор: А. Кузьминов, г. Москва