Современная электроника №8/2022
ИНЖЕНЕРНЫЕ РЕШЕНИЯ 44 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 8 2022 те каждой цифры, так как оператор 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) в настройке нуждаются только те устройства, которые отмечены «гал- ками» (остальные устройства по умол- чанию отключены). При нажатии соответствующей кнопки в меню справа будет отражать- ся окно, в котором нужно выбрать те или иные параметры. При нажатии кнопки 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 от внутреннего микромощ- Рис. 2. Общее меню конфигуратора
RkJQdWJsaXNoZXIy MTQ4NjUy