Перейдём теперь к настройке МК или инициализации всех его устройств. Эта процедура намного проще написания программы на C51, однако именно она определяет полное функционирование всего МК. Инициализация осуществляется в среде Simplisty Studio v.4 в специальном режиме конфигурации.
Рис. 2. Общее меню конфигуратора
Рис. 3. Окно Clock Control
Рис.4. Окно Property
В общем меню конфигуратора (рис. 2) в настройке нуждаются только те устройства, которые отмечены "галочками", остальные устройства по умолчанию отключены.
При нажатии соответствующей кнопки в меню справа будет отражаться окно, в котором нужно выбрать те или иные параметры. При нажатии на кнопку Clock Control необходимо выбрать Low Power Oscillator и установить делитель для системной тактовой частоты в единицу SYSCLK/1. При этом значение частоты для SYSCLK установится на 20 МГц (или 20000000 Гц, рис. 3). В настройках для SPI (рис. 4) необходимо разрешить работу SPI (Enabled), установить трёхпроводный режим Master (Master 3-wire mode), установить фазу (Clock Phase) и по-лярность (Clock Polarity), а также выбрать скорость работы, т. е. в нашем случае выбрать коэффициент деления SYSCLK (SPI0CKR) равным единице. В этом случае частота импульсов SCK установится равной 5 МГц. В опциях Interrupts, Supply Monitor и Voltage Regulators необходимо установить запрет (в связи с простотой подробности не показаны). Нажав на кнопку PMU, необходимо выбрать разрешение выхода из sleep-режима по тревожному сигналу от таймера RTC (Enable RTC alarm Wake-up Source), отмеченное синим цветом на рис. 5. Это очень важный момент. Если этого не сделать, то после входа в sleep-режим программа "зависнет". И последнее, что необходимо сделать, - это настроить параметры работы RTC в соответствии с рис. 6. Здесь надо добавить, что при работе счётчика RTC от внутреннего микромощного НЧ-генератора LFOSC0 частотой 16,4 кГц этот счётчик будет считать каждый поступивший импульс не нулевым, а первым битом или, другими словами, содержимое RTC будет увеличиваться на единицу так, как будто к RTC подключён кварцевый резонатор частотой 32 кГц. То есть RTC будет считать в два раза быстрее. Поэтому, выбрав программированное значение тревожного сигнала для RTC (Alarm Programmed Value), равное 10000000, которое соответствует периоду в десять минут (Actual Alarm Period - предпоследняя строчка в окне рис. 6), получим, что этот период на самом деле будет равен пяти минутам. Также необходимо разрешить сам тревожный сигнал от RTC (Enable RTC Alarm) и авто-ресет RTC по alarm (Enable Alarm Auto-reset). Опция авторесет автоматически обнуляет содержимое таймера RTC по достижению максимального значения (пять минут), т. е. RTC не останавливается, а продолжает работу с начала. Кроме того, необходимо разрешить работу RTC (Enable RTC oscillator) и запустить его (RTC Timer Run Control - Start).
Рис. 5. Окно PMU
Рис. 6. Окно RTC
Рис. 7.
Далее необходимо перейти в режим настройки портов (Default Mode PortI/O) На экран выведется корпус МК с портами (рис. 7). Опциями skip (пропуск) необходимо "передвинуть" порты интерфейса SPI (SPI0_ SCK, SPI0_MISO и SPI0_MOSI) в правую часть корпуса, чтобы их легче было соединить с BMP280 так, как это показано на схеме рис. 1. "Пропущенные" порты отмечены красными крестиками. Порты Р0.1, P0.2 и P0.3, подключаемые к ЖКИ, следует настроить как цифровые выходы (Digital Push-Pull Output) со слабым токовым выходом (Low drive). При этой опции потребление тока портом существенно снижено. Для наглядности в правой части рис. 7 показана конфигурация порта 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-QFN20_3.hex, о котором уже упоминалось выше, а в нижней части экрана в специальном окне, отражающем результат трансляции, будет сообщение, показанное в табл. 6.
Таблица 6
Из этого сообщения следует, что программа использует почти всю внутреннюю оперативную память (data=105,1 байт), размер которой 128 байт, внешняя дополнительная оперативная память с косвенной адресацией размером 512 байт не используется (xdata=0), а размер кодовой части программы составляет около 4 кБ (code=4222), т. е. в два раза меньше максимального размера программной памяти для этого МК, равного 8 кБ.
Рис. 8. Чертёж платы
Рис. 9. Расположение элементов на плате
Разводка платы сделана автором с помощью программы SprintLayOut v.6, файл разводки в формате *.lay6 приведён в дополнительных материалах к статье на сайте журнала. Плата изготовлена из фольгированного с двух сторон стеклотекстолита толщиной 1,5 мм. Чертёж платы показан на рис. 8, а расположение элементов в масштабе 2:1 - на рис. 9. Из рисунков можно заключить, что её разводка очень проста, а сама плата миниатюрна, размеры всего 11x14 мм. Здесь следует добавить, что при программировании МК с помощью USB DEBUG адаптера по интерфейсу C2 припаивать разъём ХР3 для его программирования с помощью COM-порта компьютера не обязательно. В этом случае в отверстия контактов общего провода и питания (+3 В) этого разъёма необходимо вставить тонкий лужёный медный провод и пропаять его с двух сторон платы, как это видно на рис. 10. Для оценки масштаба (размеров) платы рядом с ней положена обычная спичка (рис. 11).
Рис. 10.
Рис. 11.
Прибор собран в корпусе размерами 114x35,7x25,8 мм (G535G Gainta). Все стойки, установленные на внутренних поверхностях двух половин корпуса, были удалены, а стойки, предназначенные для свинчивания половин корпуса саморезами, были переклеены в места ближе к боковым стенкам, чтобы они не мешали установке ЖКИ, элемента питания и платы. Для чтения показаний ЖКИ на лицевой половине корпуса было прорезано окно. ЖКИ закреплён на внутренней поверхности этой половины корпуса. К этой поверхности приклеены пластиковые прямоугольные пластины по размеру дисплея, к которым он при клеен полосками, вырезанными из пористой ленты с двусторонним липким слоем. К внутренней поверхности второй половины корпуса такой же лентой приклеены элемент питания и плата. Для доступа воздуха к плате в этой же половине корпуса просверлены шесть отверстий, они хорошо заметны на рис. 12. На лицевую поверхность корпуса наклеены полоски бумаги с напечатанными словами "Давление ШИ888ИИ й символами "мм рт. ст." и "ºО" (рис. 13).
Рис. 12.
Рис. 13.
Для проверки правильности показаний устройства автор использовал достаточно "древний" прибор БМ-2, которому уже более 40 лет и который работает до сих пор (рис. 14). Правда, около 10 лет назад БМ-2 был откалиброван с помощью прецизионного анероида и прецизионного гигрометра. Как следует из сравнения показаний двух приборов, они показывают приблизительно одинаковые давления (754 мм рт. ст.) и обведённое жёлтым овалом место расположения стрелки, показывающей давление БМ-2 (левее риски 755). Что касается температуры, то оба прибора показывают приблизительно одинаковые значения (26 ºС у настоящего прибора) и конец красной полоски подкрашенного спирта (обведённое синим овалом) у градусника БМ-2 (между рисками 26 и 27).
Рис. 14. Проверка правильности показаний устройства
Для проверки показаний прибора при отрицательных температурах он был помещён в морозилку холодильника приблизительно на полчаса, куда был также помещён уличный термометр, так как БМ-2 для этого непригоден, поскольку показывает только положительные значения температуры. Как можно заметить из рис. 15, оба прибора показали практически одинаковые значения температуры: 12 ºС у настоящего прибора и обведённое синим овалом положение стрелки рядом с риской 12 ºС.
Рис. 15. Проверка правильности показаний устройства
Применение МК EFM8SB10 и сопряжённого с ним по интерфейсу SPI MEMS-датчика BMP280, потребляющих доли микроампера в состоянии сна (sleep-режим), совместно с восьмиразрядным семисегментным ЖКИ RDN0007-PAN-#00 позволили сконструировать простой и недорогой прибор, измеряющий атмосферное давление и температуру с обновлением информации раз в пять минут. Сверхнизкое энергопотребление дало возможность непрерывной работы прибора в течение, как минимум, пяти лет при питании от небольшого литиевого элемента CR2477.
Файл для программирования микроконтроллера и чертёж печатной платы находятся здесь.
Автор: А. Кузьминов, г. Москва