Барометр-гигрометр-термометр с батарейным питанием на базе MEMS-датчика BME280, микроконтроллера EFM8SB10F8 и ЖКИ-модуля H1313. Часть 2

Автор: Алексей Кузьминов (г. Москва)

Материал опубликован в журнале СОВРЕМЕННАЯ ЭЛЕКТРОНИКА № 8/2022
Это вторая часть статьи о барометре-гигрометре-термометре на базе MEMS-датчика BME280 (компании Bosch Sensortec), нового микропотребляющего 51-совместимого микроконтроллера (МК) EFM8SB10F8 (Silicon Laboratories) и ЖКИ-модуля H1313 на базе контроллера HT1616 (Holtek). В этой части рассмотрены программирование и конструктивные особенности прибора.
1-я часть статьи закончилась на рассмотрении проблемы с потерей содержимого регистра с адресом 0xF7. Решение проблемы можно осуществить двумя способами. Первый способ – после выполнения подпрограммы записи адреса 0xF7 сразу же прочитать содержимое SPI0DAT (это и будет содержимое адреса 0xF7), а затем уже осуществить чтение подпрограммой чтения, в результате чего получим содержимое адреса 0xF8, и далее прочитать остальные байты стандартным образом.

Второй способ состоит в том, что вначале следует записать (подпрограммой записи) не адрес 0xF7, а адрес на единицу меньше, т.е. адрес 0xF6, а затем уже прочитать все 9 байт. Оба способа, как выяснилось, работают, однако второй, по мнению автора, более предпочтителен, поскольку он позволяет воспользоваться стандартными подпрограммами чтения и записи по SPI. Ниже приведён фрагмент основной программы, где показано, как это сделать. 
Во-первых, вначале следует установить совмещение (объединение) 4-байтного числа (uint32_t dw) с массивом из 4 однобайтных чисел (uint8_t b[3]) с 4 элементами: b[0], b[1], b[2] и b[3]. Это совмещение требуется, чтобы, с одной стороны, иметь возможность работы с 4-байтным числом (например, ADC_P) для расчётов давления по формулам, приведённым в справочном листке (с учётом калибровочных коэффициентов), с другой – производить однобайтное чтение по интерфейсу SPI (он, как известно, однобайтный). Такое совмещение приводит к тому, что массив из 4 однобайтных чисел b[3] и одно 4-байтное число dw перераспределяют одно и то же место в памяти. Другими словами, массив b[3] строго определяет число dw, и наоборот, dw строго определяет массив b[3]. Это совмещение приведено ниже.
union {
uint8_t  b[3];
uint32_t dw;
}ret;
Ниже приведён фрагмент основной программы, в котором осуществляется чтение начиная с адреса 0xF6 (BME280_REG_PRESS_MSB – 1), т.е. на единицу меньше адреса старшего байта давления (в начале программы установлена директива #define BME280_REG_PRESS_MSB 0xF7). Самый старший элемент массива (ret.b[3]) не используется, поэтому он должен быть обнулён.
ret.b[3] = 0x00;
outspi(BME280_REG_PRESS_MSB - 1); //адрес 0xF6
ret.b[2] = inspi(); //содержимое 0xF7.
ret.b[1] = inspi(); //содержимое 0xF8.
ret.b[0] = inspi(); //содержимое 0xF9.
adc_P = (ret.dw >> 4) & 0xFFFFF;
.
.
.
Таким образом, прочитав все три байта, можно получить правильные показания АЦП (ADC_P) из числа ret.dw. Остальные 6 байт для температуры и влажности читаются аналогично.
Кстати, в справочном листке BME280 в качестве примера приведена последовательность (по времени) многократного чтения по SPI (SPI multiple byte read), как раз начиная с регистра с адресом 0xF6 (figure 13 из datasheet). 
С учётом вышесказанного на рис. 1 приведён этот рисунок со скорректированными адресами.

Рис. 1. Последовательность многократного чтения по SPI (адреса скорректированы)


Теперь по поводу вывода информации на ЖКИ. Подобный ЖКИ ранее применялся в стационарных телефонных (и кассовых) аппаратах, приставках для АОН и других устройствах. Выпускался он в огромных количествах. Названий у этого ЖКИ также очень много: КО-4B, КО-4В2, HT1611, HT1613, НТ1616 и др. О его программировании подробно написано в справочном листке на контроллер, например, HT1616C (Timer with Dialer Interface, компании Holtek). Хотя выпуск этого ЖКИ давно прекращён, его легко купить (например, на Авито и др. подобных ему сайтах). Кроме того, можно также легко купить б/у приставку для АОН (не дороже 100–300 руб.) и изъять из неё этот ЖКИ. В ЖКИ встроены часы, которые могут показывать время (часы, минуты и секунды) при определённом состоянии управляющего сигнала HK (см. рис. 1 первой части статьи), однако этот режим в приборе не используется (но такая возможность сохранена). Программируется этот ЖКИ достаточно просто, однако, на взгляд автора, имеются две проблемы, вызывающие некоторые затруднения в программировании на C51 вывода информации на этот дисплей. Первая проблема: как программно вывести байт через какой-либо порт МК, вторая – каким образом получить десятичные цифры для вывода на ЖКИ, например, 16-разрядного числа.
Вначале о 1-й проблеме. Она может быть решена двумя способами. Первый способ – использовать аппаратный SPI и подпрограмму вывода по SPI для BME280, рассмотренную ранее. Но в этом случае в связи с разными скоростями обмена для BME280 (5 Мбод) и ЖКИ (максимум 0,5 Мбод, т.е. на порядок меньше), а также разными настройками (в частности, полярности и фазы), придётся каждый раз при выводе информации на ЖКИ и BME280 изменять эти настройки, что очень неудобно.
Второй способ – вывести байт в ЖКИ «вручную», т.е. программным способом. Каким образом это можно сделать достаточно просто? Как ни странно, но на ассемблере такой вывод не вызывает затруднений. Если имеется байт, и его требуется вывести последовательно через какой-либо порт, например P0.1, то такая процедура хорошо известна: байт сдвигается влево через бит переноса C, в котором появляется старший бит байта, т.е. 7-й бит. Далее порту P0.1 присваивается значение бита переноса C, и для записи в периферийное устройство (ЖКИ) он стробируется импульсом CLK через какой-либо второй порт, например, P0.2. Для передачи следующего бита байт сдвигается влево ещё раз, в C попадает уже 6-й бит, и эта процедура повторяется 7 раз, пока не выведется весь байт. Но в C51 нет такого понятия, как бит переноса C. Как здесь быть? К счастью, в C51 имеется «лазейка», которая позволяет вывести байт подобным образом. Здесь необходимо напомнить, что в области памяти МК EFM8SB10 есть 16 байт с побитовой адресацией (нам хватит и одного). Эта область памяти именуется как bdata. Адресация каждого бита байта из области bdata происходит точно так же, как это принято для портов МК. Например, для бит DI и CLK, выводимых с портов P0.1 и P0.2 соответственно, эта адресация приведена ниже.
sbit DI = P0^1;
sbit CLK = P0^2;

Если назначить какой-либо байт, например, BYTEIO из области bdata, и конкретный бит BITIO, как, например, 7-й бит BITEIO, то такое назначение на C51 будет выглядеть так: 
bdata uint8_t BYTEIO;
sbit BITIO=BYTEIO^7;

Если теперь присвоить выводимому через порт P0.1 биту DI значение BITIO, простробировать каждый выводимый бит сигналом CLK (изменяя его значение с лог.0 на лог.1 и обратно с задержкой 10 мкс) и сдвигать байт BYTEIO циклически влево на 1 бит командой _crol_(BYTEIO,1), то для вывода всего байта получим следующую достаточно простую процедуру (т.е. подпрограмму «ручного» вывода байта):
void OUTBLCD(uint8_t OUTB){//Вывод байта в ЖКИ
uint8_t j;
BYTEIO=OUTB;
for (j=0;j<8;j++){
DI=BITIO;
CLK=1;
DEL10US();
CLK=0;
DEL10US();
BYTEIO=_crol_(BYTEIO,1);
}
}
Теперь о том, как получить десятичные цифры для вывода 16-разрядного числа. 
Пусть имеется 16-разрядное число, например, давление P, которое в результате расчётов по формулам для BME280 равно 751 мм рт. ст. В МК это число представлено в двоичном виде, что в 16-ричном виде соответствует числу 0x02ef. Как получить цифры «7», «5» и «1» из этого числа и как их вывести на ЖКИ? Эта задача решается также достаточно просто.
Для этого в области памяти программ (code) необходимо завести массив M[12], состоящий из 12 элементов, коды которых соответствуют кодам выводимых цифр (эти коды приведены в справочном листке (datasheet) на контроллер):
code uint8_t M[12]=
{//”0”  “1”  “2”  “3”  “4”  “5”  “6”  “7”  “8”  “9” blank “-”
0x0a,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x00,0x0f};
Если внимательно приглядеться к этому массиву, то можно обнаружить, что код того или иного элемента массива соответствует его номеру в массиве, или, другими словами, его индексу (например, i, в массиве M[i]). Например, код цифры «0» (0x0a) содержится в 0-м элементе массива, код числа «5» (0x05) – в 5-м элементе и т.п. Таким образом, если требуется вывести, например, цифру «5», то, задав индекс i = 5, получим М[5], что соответствует выводимой «пятёрке».

Для того чтобы из выводимого числа получить цифры для вывода на ЖКИ, можно воспользоваться оператором sprintf [параметры], используемым для «печати» информации. Этот оператор работает так же, как и оператор printf [параметры], используемый для распечатки данных на мониторе компьютера, выводимых через интерфейс RS-232 (COM-порт). В отличие от оператора printf, который посылает данные на COM-порт компьютера, оператор sprintf помещает эти данные в специальный буфер (массив) в памяти МК. Этот буфер указывается в параметрах sprintf.      
В качестве примера рассмотрим вывод на ЖКИ идентификационного номера (ID) BME280, который равен 60h (58h в BMP280). Пусть считанный из BME280 идентификационный номер расположен в однобайтовой переменной CHID. Заведём два массива: 1-й (buf[5]) – для вывода пяти байт в ЖКИ (что соответствует выводу всех десяти знакомест, каждое из которых состоит из полубайта или тетрады), 2-й (bufTP[7]) – для получения чисел для давления (3 цифры), влажности (2 цифры) и температуры (2 цифры), т.е. всего 7 цифр. Для ID требуется только 2 цифры, так что можно воспользоваться этим же массивом (bufTP[7]). 
Вначале обнуляем массив buf. Затем «печатаем» CHID-оператором sprintf в формате двух 16-ричных цифр в bufTP. После этого необходимо избавиться от «тройки» в старшем полубайте каждой цифры, так как оператор sprintf выводит цифры в коде ASCII, в котором каждая цифра состоит из двух полубайт: в старшем полубайте выводится «3», а в младшем – сама цифра. Например, цифра «5» кодируется как 0x35, «0» – как 0x30 и т.п. Для этого все элементы массива bufTP логически умножаем на 0x0f, т.е. обнуляем старший полубайт. Далее с помощью оператора циклического сдвига влево (_crol_ )на 4 двоичных разряда формируем два полубайта последнего (5-го) байта массива buf (buf[4]), в которых и содержится идентификационный номер. И наконец, выводим все 5 байт в ЖКИ вышеприведённой подпрограммой OUTBLCD(). Код на C51 представлен ниже.

//------------------------------------------
uint8_t CHID,i,buf[5],bufTP[7];
//------------------------------------------
for (i=0;i<5;i++){//Обнуляем buf
buf[i]= 0x00;
}
sprintf (bufTP,”%-2x”,CHID);//Печатаем ID
for (i=0;i<2;i++){
bufTP[i] &= 0x0f; //Убираем “3“
}
buf[4]= _crol_(M[bufTP[0]],4)+M[bufTP[1]];//Формируем 5-й байт 
for (i=0;i<5;i++){
OUTBLCD(buf[i]);  //Выводим 5 байт в ЖКИ
}
В результате в правой части ЖКИ появится идентификационный номер BME280 «60» (или «58» для BMP280).
Для того чтобы «напечатать» 3 цифры давления (press), 2 цифры влажности (hum) и 2 цифры температуры (temp), необходимо использовать оператор sprintf следующего формата:
sprintf (bufTP,”%3u%2u%2u”,press,hum,temp);
Кроме того, если температура отрицательная, то перед числом температуры необходимо поставить знак минус (код 0x0f) – это последний (12-й) элемент массива M[12], если положительная, то пробел (код 0x00) – предпоследний (11-й) элемент массива M[12].
Как видно из вышеизложенного, вывод информации в ЖКИ достаточно прост, в связи с чем занимает небольшую память программ (code) и оперативную память данных (data) – см. далее.
Перейдём теперь к процедуре инициализации всех устройств МК. Эта процедура намного проще написания программы на C51, однако именно она определяет полное функционирование всего МК. Инициализация осуществляется в среде Simplisity Studio v.4 в специальном режиме конфигурации. 
В общем меню конфигуратора (рис. 2) в настройке нуждаются только те устройства, которые отмечены «галками» (остальные устройства по умолчанию отключены).

Рис. 2. Общее меню конфигуратора


При нажатии соответствующей кнопки в меню справа будет отражаться окно, в котором нужно выбрать те или иные параметры. При нажатии кнопки Clock Control необходимо выбрать Low Power Oscillator и установить делитель для системной тактовой частоты в единицу SYSCLK/1. При этом значение частоты для SYSCLK установится на 20 МГц (или 20 000 000 Гц, рис. 3а). В настройках для SPI (рис. 3б) необходимо разрешить работу SPI (Enabled), установить 3-проводный режим Master (Master 3-wire mode), установить фазу (Clock Phase) и полярность (Clock Polarity), а также выбрать скорость работы, т.е. в данном случае выбрать коэффициент деления SYSCLK (SPI0CKR) равным единице. В этом случае частота импульсов SCK установится равной 5 МГц, т.е. в 2 раза меньше максимальной частоты импульсов SCK для BME280 и МК EFM8SB10 (10 МГц), т.е. с 2-кратным запасом. В опциях Interrupts, Supply Monitor и Voltage Regulators необходимо установить запрет (disable), а в опции PCA – запрет работы Watchdog Timer’у (в связи с простотой подробности не показаны). Нажав кнопку PMU, необходимо выбрать разрешение выхода из sleep-режима по тревожному сигналу от таймера RTC (Enable RTC alarm Wake-up Source), отмеченное синим цветом на рис. 3в. Это очень важный момент. Если этого не сделать, то после входа в sleep-режим программа «зависнет». И последнее, что необходимо сделать, – это настроить параметры работы RTC в соответствии с рис. 3г. Здесь надо добавить, что при работе счётчика RTC от внутреннего микромощного НЧ-генератора LFOSC0 частотой около 16 кГц этот счётчик будет считать каждый поступивший импульс не нулевым, а 1-м битом, или, другими словами, содержимое RTC будет увеличиваться на единицу так, как будто к RTC подключён кварцевый резонатор частотой 32 кГц. То есть RTC будет считать в 2 раза быстрее. Поэтому, выбрав программированное значение тревожного сигнала для RTC (Alarm Programmed Value), равное 10 000 000, которое соответствует периоду в 10 минут (Actual Alarm Period – предпоследняя строчка в окне рис. 3г), получим, что этот период на самом деле будет равен 5 минутам. Также необходимо разрешить сам тревожный сигнал от RTC (Enable RTC Alarm) и авто-ресет RTC по Alarm’у (Enable Alarm Auto-reset). Опция авто-ресет автоматически сбрасывает (обнуляет) содержимое таймера RTC по достижению максимального значения (5 минут), т.е. RTC после обнуления не останавливается, а продолжает работу сначала. Кроме того, необходимо разрешить работу RTC (Enable RTC oscillator) и запустить его (RTC Timer Run Control – Start). 

Рис. 3. Конфигурирование устройств МК а – выбор системной тактовой частоты (SYSCLK), б – выбор режима работы SPI, в – настройка PMU, г – настройка RTC, д – настройка портов МК (DefaultMode PortI/O)


Далее необходимо перейти в режим настройки портов (Default Mode PortI/O). На экран выведется корпус МК с портами (рис. 3д). Опциями skip (пропуск) необходимо «передвинуть» порты интерфейса SPI (SPI0_SCK, SPI0_MISO и SPI0_MOSI) в правую часть корпуса, чтобы их легче было соединить с BME280 – так, как это показано на принципиальной схеме  устройства из 1-й части статьи (и на разводке – см. далее рис. 4а). «Пропущенные» порты отмечены красными крестиками. Порты Р0.1, P0.2 и P0.3, подключаемые к ЖКИ, настроить как цифровые выходы (Digital Push-Pull Output) со слабым токовым выходом (Low drive). При этой опции потребление тока портом существенно снижено. Для наглядности в правой части рис. 3д показана конфигурация порта P0.2, отмеченного на корпусе (слева сверху) чёрным прямоугольником. Порты SPI P0.7(SPI0_SCK), P1.1
(SPI0_MOSI) и порт P1.2 (11-й вывод, CSB) также настроить как Digital Push-Pull Output, a порт P1.0 (SPI0_MISO) – как цифровой вход (Digital OpenDrain I/O), т.е. выход с открытым стоком (и со слаботоковой подтяжкой – Pull-ups Enabled).
После того как произведена настройка (конфигурация) всех устройств МК, необходимо нажать кнопку с двойной дискетой в левой верхней строке меню всего экрана, чтобы записать эту конфигурацию на диск.
При этом на C51 сгенерируется текст программы инициализации устройств InitDevice.c (чтобы написать её вручную, да ещё без ошибок, а это несколько страниц текста на C51, уйдёт не один день), к которой будет обращение из основной программы в самом начале её работы. После этого основную программу необходимо оттранслировать, выбрав в меню экрана опцию Project и в открывшемся окне – подопцию Build Project. После трансляции создастся файл EFM8SB10F8G-A-QFN24.hex, о котором уже упоминалось в начале этого раздела статьи, а в нижней части экрана в специальном окне, отражающем результат трансляции, будет следующее сообщение:
Program Size: data=116.1 xdata=0 const=0 code=5066
LX51 RUN COMPLETE.  0 WARNING(S),  0 ERROR(S)
Finished building target: EFM8SB10F8G-A-QFN24.omf
Из этого сообщения следует, что программа использует практически всю внутреннюю оперативную память (data = 116,1 байт), размер которой 128 байт, внешняя дополнительная оперативная память с непрямой адресацией размером 512 байт не используется (xdata = 0), а размер кодовой части программы составляет около 5 кБ (code = 5066), т.е. укладывается в максимальный размер программной памяти для этого МК, равный 8 кБ.
И последнее, что следует добавить по поводу программных средств. В Интернете можно найти массу приборов с датчиками BME280 и BMP280, которые показывают давление P, влажность H и температуру T с точностью до десятых и даже до сотых долей соответствующих физических величин, т.е. до 0,01 мм рт. ст., 0,01% и 0,01°C соответственно. Такую точность измерения действительно обеспечивает 20-разрядный АЦП, встроенный в BME280. Однако погрешность измерения самих датчиков P, H и T (встроенных в BME280) составляет до 2 (а то и более) целых единиц соответствующих физических величин (± 2 мм рт. ст., ± 2–3% и ± 2°C), не говоря уже о десятых и тем более сотых долях. Это автор обнаружил, наблюдая за показаниями двух идентичных приборов, стоящих рядом. В связи с этим на экран ЖКИ программой выводятся именно целые числа, показывающие давление, влажность и температуру. Такое положение вещей позволяет отказаться от использования библиотеки с плавающей запятой, «отъедающей» более 3 кБ памяти МК, для расчётов P, H и T с точностью до 0,01 единиц соответствующей физической величины, поскольку такая точность является бессмысленной.

Разводка плат устройства и их внешний вид

Разводка основной платы устройства сделана автором с помощью программы SprintLayOut v.6, файл разводки в формате *.lay6 приведён в дополнительных материалах к статье на сайте журнала. Из рисунков разведённой платы и её внешнего вида (рис. 4) можно заключить, что её разводка очень проста, а сама плата миниатюрна (размер всего 16×18 мм). Здесь следует добавить, что при программировании МК с помощью USB DEBUG адаптера по интерфейсу C2 припаивать разъём для его программирования с помощью COM-порта компьютера (X2, см. схему подключения батарейки CR2477 из 1-й части статьи) необязательно. Как можно заметить из рис. 4в, на плате этого разъёма нет, хотя отверстия для его установки просверлены. Для оценки масштаба (размера) платы рядом с ней положена обычная спичка (рис. 4г).

Рис. 4. Разводка и общий вид платы устройства а, в – вид со стороны расположения компонентов, б, г – вид с обратной стороны

Плата стабилизатора 1,5 В (рис. 5) – сверхминиатюрна (7×9 мм). Её файл разводки также приведён в дополнительных материалах к статье на сайте журнала. 

Рис. 5. Разводка и общий вид платы стабилизатора 1,5 В а, в – вид со стороны расположения компонентов, б, г – вид с обратной стороны

Конструкция прибора

Прибор расположен в корпусе размером 84×58×24 мм (ЧАББ), состоящим из двух половин (рис. 6). В одной из них, более глубокой, установлены все компоненты прибора. В этой половине корпуса прорезано окно для ЖКИ. Плата ЖКИ приклеена к внутренней поверхности этой половины корпуса пористой лентой с двусторонним липким слоем. В первом варианте (рис. 6а) основная плата со вставленным модулем BME280 приклеена к пластмассовой пластине пористой лентой с двусторонним липким слоем, а пластина, в свою очередь, приклеена к плате ЖКИ такой же лентой. Две мизинчиковые литиевые батарейки FR03 установлены в батарейных отсеках, один из которых приклеен к плате ЖКИ, а второй – к внутренней части этой половины корпуса такой же лентой. Во втором варианте (рис. 6б) основная плата со вставленным модулем BMP280 аналогично приклеена к плате ЖКИ. К этой же плате приклеена литиевая батарейка CR2477 с приваренными контактами. Плата стабилизатора 1,5 В приклеена к боковой поверхности корпуса (рис. 6б, слева снизу). На лицевой поверхности прибора (рис. 6в) сверху приклеена полоска бумаги с напечатанными словами: «Давление Влажность Температура», а снизу – полоска с символами «мм рт. ст. __% __°C», расположенными приблизительно под числами, показывающими давление, влажность и температуру соответственно. Если в приборе используется модуль BMP280, то влажность, естественно, не показывается (рис. 6г).

Рис. 6. Конструкция прибора а – с модулем BME280 и двумя батарейками AAA FR03, б – с модулем BMP280, батарейкой CR2477 и стабилизатором 1,5 В, в – общий вид прибора с BME280 в сборе, г – показание прибора с BMP280

Задняя половина корпуса (крышка) прикручивается к передней 4 саморезами. Для доступа воздуха к внутренней части прибора в крышке сверху и снизу просверлено по 3 отверстия (по горизонтали) диаметром 4 мм и расстоянием между ними 3 мм. Отверстия расположены в правой части крышки на уровне расположения модулей с BME280 или BMP280 (если смотреть на рис. 6а и рис. 6б) таким образом, чтобы эти модули обдувались конвективным потоком воздуха наиболее эффективно. 
Наибольший ток потребляет ЖКИ – 3 мкА. МК и BME280 в режиме сна потребляют 0,5 мкА и 0,1 мкА соответственно. Стабилизатор STLQ015M15R (DA1, см. схему подключения батарейки CR2477 из 1-й части статьи) потребляет ток не более 1 мкА (при максимальном выходном токе 150 мА). Если не учитывать потребление тока МК и BME280 в активном режиме, который длится не более 1 мс, что по сравнению с 5 минутами составляет около 0,00033%, и принять, что максимальное потребление тока прибора составляет 5 мкА в час, то за 10 лет это составит около 440 мА (0,44 А). Ёмкость батареек FR03 и CR2477 составляет 1 А·ч, т.е. в 2 раза больше. Однако срок службы батареек не превышает 10 лет (например, на батарейке FR03 написано, что срок её службы – до 2032 г.). Срок службы батарейки CR2477 также не превышает 10 лет. Отсюда следует, что прибор может непрерывно работать до 10 (а то и более) лет.

Результаты работы прибора

Для проверки правильности показаний устройства автор использовал достаточно «древний» прибор БМ 2, которому уже более 40 лет и который работает до сих пор (рис. 7). Правда, около 10 лет назад этот БМ 2 был откалиброван с помощью прецизионного анероида и прецизионного гигрометра. Как следует из сравнения показаний двух приборов, они показывают приблизительно одинаковое давление (746 мм рт. ст.) и обведённое синим кружком место расположения стрелки, показывающей давление БМ 2 (правее риски 745). Показания же влажности несколько различаются: стрелка, показывающая влажность у БМ 2 (жёлтый кружок), расположена правее риски в 50%, а настоящий прибор показывает влажность 48%. Что касается температуры, то оба прибора показывают близкие значения (23°C у настоящего прибора) и конец красной полоски подкрашенного спирта у градусника БМ 2 (зелёный кружок – около риски 24°C). 

Рис. 7. Сравнение показаний устройства с показаниями прибора БM 2


Для проверки показания прибора при отрицательных температурах он был помещён в морозилку холодильника примерно на час. Туда же был помещён уличный термометр (прибор БМ 2 для этого непригоден, так как показывает только положительную температуру). Как следует из сравнения показаний двух приборов (рис. 8), уличный термометр показал температуру около –13°C (конец стрелки, обведённый синим овалом, расположен около риски –13°C), а настоящий прибор –12°C. Другими словами, оба прибора показали близкие значения температуры. Какой прибор показывает точнее, неясно, так как насколько показания уличного термометра такого типа соответствуют действительности (его погрешность), неизвестно. 

Рис. 8. Показания прибора при отрицательных температурах Заключение

Заключение 

Применение МК EFM8SB10 и сопряжённого с ним по интерфейсу SPI MEMS-датчика BMЕ280, потребляющих доли мкА в состоянии сна (sleep-режим), совместно с 10-разрядным 7-сегментным ЖКИ H1313 позволили сконструировать простой и недорогой прибор, измеряющий атмосферное давление, влажность и температуру с обновлением информации раз в 5 минут. Сверхнизкое энергопотребление дало возможность непрерывной работы прибора в течение как минимум 10 лет при питании от двух мизинчиковых литиевых батареек FR03 или небольшой литиевой батарейки CR2477 таблеточного типа. Использование sleep-режима в микропотребляющем МК EFM8SB10 может найти применение и в других приложениях (автономных приборах), где требуется либо измерять какие-либо физические параметры в достаточно медленно протекающих процессах, либо вообще длительное время производить какие-либо действия через достаточно большие и строго фиксированные промежутки времени. При этом для питания подобных устройств вполне возможно использование компактных батареек небольшой ёмкости, способных обеспечить непрерывную работу таких устройств в течение нескольких лет.



Поделиться:



Комментарии

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