Мы занимаемся поставками электронных компонентов. Чтобы делать нашу работу хорошо, недостаточно просто уметь привозить и продавать электронные компоненты — ещё важно уметь демонстрировать их преимущества. Именно поэтому мы не только пишем обзорные статьи, но и создаем руководства по применению разных «железок» и разрабатываем небольшие демонстрационные проекты.
Об истории создания одного из таких демонстрационных проектов я и расскажу — буду последовательно описывать процесс создания прототипа устройства, оснащенного ёмкостным сенсорным экраном, и предназначенного для измерения относительной влажности и температуры.
Особенный интерес представляет подход к написанию встроенного ПО — софт полностью написан в онлайн IDE от mbed. То есть программа для микроконтроллера была создана на единственной вкладке гугл-хрома и одинаково работает на отладочных платах от разных производителей.
Содержание цикла публикаций:
- Обзор использованных программных и аппаратных решений.
- Начало работы с графическим контроллером FT800. Использование готовых mbed-библиотек для периферийных устройств.
- Подключение датчика HYT-271. Создание и публикация в mbed собственной библиотеки для периферийных устройств.
- Разработка приложения: Структура программы, работа с сенсорным экраном.
- Разработка приложения: Вывод изображений на дисплей, проблемы русификации.
- Печать деталей корпуса. Анализ ошибок проектирования и другие выводы.
Первая часть под катом.
Итак, устройство состоит из трех основных компонентов:
- цифровой датчик относительной влажности HYT-271 от компании IST
- TFT-дисплей от Riverdi со встроенным графическим контроллером FT801 от FTDI
- отладочная плата с микроконтроллером на базе ARM Cortex и поддержкой mbed
Главными героями пьесы являются дисплей Riverdi и датчик IST, так как проект призван демонстрировать именно их возможности. А вот в качестве управляющего узла может использоваться любая отладочная плата, на которой реализованы и выведены нужные интерфейсы — SPI под TFT-дисплей и I2C под датчик. В моём случае, когда очень хочется поиграться с mbed, к требованиям к микроконтроллерной платформе добавляется её поддержка в mbed IDE.
В качестве базовой платформы выбрана плата SLSTK3400A от Silicon Labs с контроллером серии EFM32 Gecko на борту. На первом фото она в центре. Однако, моя цель — это создание в mbed такой программы, которая бы работала и на других mbed-овских отладочных платах. Поэтому в качестве управляющего модуля на каждом этапе разработки будут попеременно включаться разные отладки от SiLabs, Atmel и Wiznet.
Теперь рассмотрим компоненты более подробно.
Цифровой датчик относительной влажности HYT-271 от IST
Датчикам серии HYT уже была посвящена статья на Хабре, сегодня я приведу менее детальное описание.
HYT-271 — цифровой датчик относительной влажности с I2C-интерфейсом, который выпускается швейцарской компанией IST. Как и большинство современных датчиков относительной влажности, он имеет емкостный чувствительный элемент и оснащен дополнительным датчиком температуры. Последний необходим в первую очередь для автоматической термокомпенсации результатов измерения влажности, однако, он одновременно является и самостоятельным чувствительным элементом, с которого можно получить данные о температуре окружающей среды.
Относительная влажность | Температура | |
Диапазон измерений | от 0 до 100 % RH | от -40 до +125 °C |
Точность (максимальная погрешность) | ± 1.8 % RH (в диапазоне 0… 80 % RH) | ± 0.2 °C (в диапазоне 0… 60 °C) |
Время отклика | HYT 271 < 4 сек | HYT 271 < 5 сек |
Повторяемость | ± 0.2 % RH | ± 0.1 °C |
Гистерезис | < ± 1 % RH | |
Долговременный дрейф характеристик | < ± 0.5 % RH / год | < ± 0.05 °C / год |
Напряжение питания | 2,7 – 5,5 В |
Ключевые преимущества датчика HYT-271 — высокая точность измерения влажности и оооочень быстрый отклик. Такие характеристики востребованы в управлении такими технологическими процессами, как сушка, испарение и перегонка — это широчайший класс задач от изготовления макарон до контроля затвердения бетонных конструкций.
Высококлассные датчики также необходимы в устройствах для измерения остаточной влажности, или, например, в климат-контроле помещений, где хранятся чувствительные к влаге материалы вроде дерева или зерна. Среди целевых приложений также инкубаторы, медицинская техника и другие ответственные задачи, среди которых нет домашней метеостанции!!!
Цена датчиков такого класса в РФ — от 40 до 100 долларов. Мы предлагаем HYT-271 поштучно со склада за 37 евро, а для оптовых закупок цена, естественно, снижается. Например, при заказе 50 датчиков цена составит около 30 евро за датчик. Ну и скидки бывают, обращайтесь.
Интегральные датчики с цифровым интерфейсом имеют заводскую калибровку, поэтому для работы обычно достаточно подключить датчик к управляющему контроллеру (в нашем случае по интерфейсу I2C) и освоить протокол обмена данными. Протокол обмена данными описывает формат управляющих команд и посылок с данными. К программной реализации процедуры опроса датчика HYT-271 мы обратимся в одной из следующих статей.
Сенсорный TFT-дисплей Riverdi и графический контроллер FT801
Riverdi — это польский производитель TFT-модулей, то есть TFT-дисплеев со встроенным графическими контроллерами.
Дисплеи различаются между собой размером, параметрами матрицы, наличием емкостного или резистивного сенсорного экрана и дополнительными опциями вроде крепежной рамки. Большинство современных дисплеев Riverdi оснащены графическими контроллерами от FTDI — микросхемами FT80x и FT81x, которые выполняют команды отрисовки графических примитивов, обрабатывают данные с канала сенсорного ввода и аудиоканала. Иначе говоря, микросхемы FTDI выполняют роль графического сопроцессора, на который с главного микроконтроллера перекладываются все сложные ресурсоёмкие задачи. Программа, которая «крутится» на управляющем микроконтроллере, использует библиотеки от FTDI и с их помощью формирует простые команды управления графическим модулем. Для коммуникации между центральным контроллером и микросхемой FT80x / FT81x используется последовательный интерфейс I2C или SPI.
Порядок управления графическим контроллером и особенности программных средств разработки от FTDI мы также рассмотрим в следующих статьях.
С ассортиментом TFT-модулей можно ознакомиться на сайте производителя и на нашем сайте. На дисплеи с диагональю 2.83", 5" и 7" как раз специальные цены действуют.
Для демонстрационного проекта используется TFT-модуль RVT43ULFNWC00 серии uxTouch. Он имеет диагональ 4.3'', ёмкостный сенсорный экран и встроенный графический контроллер FT801.
Дисплеи uxTouch — это самые симпатичные из существующих модулей Riverdi. Они выполнены в декоративной рамке, покрыты защитным стеклом и не имеют внешних монтажных креплений и отверстий. Для установки дисплея в корпус предусмотрена клейкая поверхность, которая расположена на задней стороне декоративной рамке по всему периметру дисплея. Выглядит всё это действительно здорово — когда крутишь модуль в руках, привыкшие к ipad руки и глаза не чувствуют никакого подвоха.
Отладочная плата и mbed
Для опроса датчика и отображения данных на TFT-дисплее, при наличии микросхемы FT801, от управляющего микроконтроллера не требуется высокой производительности. Чаще всего хватает даже 8-разрядного кристалла, в этом собственно и фишка использования графического контроллера от FTDI.
Однако, в угоду своему желанию познакомиться с mbed, я всё-таки использую платформу ARM Cortex-M — в качестве основной рабочей платы беру SLSTK3400A, а в качестве альтернатив ATSAMD21-XPRO от Atmel и WIZwiki-W7500P от Wiznet. Помимо необходимых интерфейсов I2C и SPI, целевые контроллеры имеют довольно приличный объем памяти — не менее 64 Кб Flash. Это бонус позволит реализовать не только красивое отображение полученной с датчика информации, но и, например, хранение изображений.
На отладочных платах нам не понадобится большинство доступных периферийных устройств. Цепи измерения энергопотребления от SiLabs, аппаратный Ethernet от Wiznet, а также бесконечные контроллеры, сенсорные и механические кнопки, светодиоды и ЖКИ — всё идет лесом. Обращаем внимание только на наличие встроенного USB-отладчика и выводов необходимых цифровых сигналов.
Теперь об mbed.
Mbed — это программная платформа для разработки IoT-устройств на базе микроконтроллеров с ядром ARM Cortex-M. Платформа разрабатывается самой компанией ARM и производителями микроконтроллеров. Я не буду касаться многих входящих в состав mbed инструментов (облачных сервисов, инструментов шифрования, mbed OS и т.д.). Рассматриваться будут только онлайн IDE, «базовая» библиотека mbed и драйверы для сопряжения отладочной платы с другими устройствами.
Библиотеки mbed предоставляют уровень абстракции, на котором программа пишется не под конкретный контроллер STM32 / Atmel / NXP, а сразу под любую платформу, которая поддерживается в mbed. Поддержка платформы обозначает, что mbed-вызовы корректно обращаются ко всему HAL целевого микроконтроллера, что mbed понимает топологию отладочной платы, и что отладочная плата опознается на ПК как внешний диск и прошивается простым копированием бинарного файла на этот диск.
О том, как зарегистрироваться на developer.mbed.org, скомпилирвать и запустить демо-программу, уже написаны подробные инструкции. Вот, например, руководство по миганию светодиодом моего авторства.
Посему сразу перейдем к заготовке будущего проекта — простой программе для вывода на последовательный порт счетчика секунд.
#include "mbed.h"
Serial pc(USBTX, USBRX);
Ticker timeKeeping;
volatile uint64_t seconds = 0;
void secondsCallback(void) {
pc.printf("Number of seconds: %xrn", seconds);
seconds ++;
}
int main() {
timeKeeping.attach(&secondsCallback, 1.0f);
while(1) {}
}
Создаем проект, состоящий из файла main.cpp и пакета библиотек mbed, компилируем программу, получаем автоматически скачанный бинарный файл и копируем его на плату SLSTK3400A, которая определяется компьютером как внешний диск.
Теперь, запустив Terminal, мы получаем с контроллера искомые данные.
Для того чтобы сгенерировать прошивку для плат от Atmel и Wiznet, достаточно сменить целевую платформу,
После этого вновь скомпилировать проект и скопировать полученный файл на соответствующий диск — XPLAINED или MBED (да, корейцы отличились в придумывании имен).
На маке программа сразу заработала на всех трех платах, а на Windows понадобилась установка mbed-овского драйвера COM-порта. Без него по последовательному интерфейсу хотела общаться только плата от SiLabs. Впрочем, это штатная ситуация, хорошо описанная самой компанией ARM.
Здесь пора заметить один из главных минусов mbed: printf — это по факту единственное доступное средство отладки. Кроме того что вам недоступна отладка с breakpoint-ами и доступом к регистрам микроконтроллера, у mbed существуют и другие очевидные ограничения. Например, универсальные драйверы периферии по определению не могут поддерживать все особенности периферии каждого контроллера, то есть в mbed могут отсутствовать библиотеки для необычных модулей или поддержка каких-то нестандартных режимов работы периферийных устройств вашего микроконтроллера. А это могут быть именно те режимы и модули, из-за которых вы и выбрали свой клисталл.
Ещё, конечно, mbed — не лучший инструмент для создания сложных приложений, связанных с планированием задач и многопоточностью (хотя я не в курсе что умеет новая mbed OS 5). Ну и в конце концов, список поддерживаемых аппаратных платформ пока далеко не полон.
Чтобы полюбить mbed, нужно хорошо понимать круг задач, для которых он предназначен (спасибо, капитан). На мой взгляд, платформа mbed наилучшим образом подходит:
а) для прототипирования и быстрого освоения новых компонентов,
б) для знакомства с программированием микроконтроллеров.
Ключевыми свойствами mbed являются универсальность, доступность и простота использования программных библиотек, а также возможность экспорта написанного в mbed софта во «взрослые» IDE.
При прототипировании становится возможен сценарий «быстро запустил рабочее решение из коробки -> экспортировал программу в привычную IDE и довел до ума», а для освоения программирования микроконтроллеров упрощается переход от мигания светодиодом на arduino к более серьезным вещам.
Ещё один плюс mbed — интеграция в компилятор системы контроля версий, а также сама идея простого обмена программными модулями. Считается, что разработчики встраиваемых систем пользуются системами контроля версий довольно неохотно. Mbed — отличный повод наконец-таки прочувствовать преимущества использования контроля версий, если раньше руки не доходили. Что же касается публикации собственных наработок и использования чужих библиотек и проектов, то с учетом железонезависимости mbed-программ идея opensource для embedded выглядит гораздо более привлекательно, чем обычно.
Возвращаясь к моему проекту, сразу скажу что итоговая программа, изначально написанная под микроконтроллер SiLabs, абсолютно корректно работает на платах от Atmel и Wiznet. По идее всё должно получиться и на других доступных микроконтроллерных платформах, полный список которых доступен на developer.mbed.org/platforms/.
Также имеет смысл заглянуть в список поддерживаемых компонентов developer.mbed.org/components/. Для всех перечисленных дисплеев, сервоприводов, датчиков, беспроводных контроллеров и других модулей доступны библиотека и пример её использования. Для моего TFT-модуля Riverdi (точнее для контроллеров серии FT800) такая библиотека уже была создана одним из пользователей, а вот драйвер для датчика HYT был написан в ходе разработки этого проекта.
Процесс разработки приложения будет последовательно описан в следующих статьях, а видео с работающей сборкой я могу показать уже сейчас.
Заключение
В заключении традиционно благодарю читателя за внимание и напоминаю, что вопросы по применению продукции, о которой мы пишем на хабре, можно также задавать на email, указанный в моем профиле.
Автор: ЭФО