Планировщик для микроконтроллера
Вопреки расхожему мнению, применение планировщиков/диспетчеров позволяет значительно ускорить разработку приложений, затратив при этом совсем немного памяти. А, как известно, время разработчика дороже последней. Средний диспетчер занимает около 1 кБ flash. Это совсем немного, учитывая те возможности, которые он предоставляет.
Сделать свои программы более организованными мне, простому любителю, хотелось достаточно давно. Я опробовал на реальных устройствах несколько готовых простых планировщиков, но они меня не устроили. Поэтому я взял один из них за основу и переделал под свои нужды В этой статье я расскажу о том, что и почему я изменил, а также продемонстрирую несколько примеров его использования.
Медианный фильтр
Nigel Jones "Median filtering"
Если ваше инженерное образование похоже на мое, тогда вы наверняка много знаете о различных типах линейных фильтров, основная задача которых, пропустить сигнал в одном диапазоне частот и задержать сигналы в остальных диапазонах. Эти фильтры, конечно, незаменимы для многих типов шумов. Однако в реальном мире встраиваемых систем требуется немного времени, чтобы понять, что классические линейные фильтры бесполезны против импульсного шума (burst noise, popcorn noise).
Импульсные шумы обычно возникает от псевдо случайных событий. Например, рядом с вашим устройством может переключаться двухполосный радиоприемник или может произойти какой-нибудь статический разряд. Всякий раз когда это происходит, входной сигнал может временно искажаться.
Например, в результате аналогово-цифрового преобразования мы получаем такой ряд значений: 385, 389, 912, 388, 387. Значение 912 предположительно аномальное и его нужно отклонить. Если вы попробуете использовать классический линейный фильтр, то заметите, что значение 912 будет оказывать значительное влияние на выходной результат. Лучшим решением в этом случае будет использование медианного фильтра.
Простой цифровой фильтр на микроконтроллере
Во многих цифровых устройствах для преобразования аналоговых сигналов используется АЦП. Часто аналоговые сигналы содержат нежелательный высокочастотный шум.
Чтобы "очистить" сигнал от этих шумов применяются аналоговые RC фильтры низких частот, которые устанавливаются после источника сигнала. Такой подход не всегда идеален и практичен.
В качестве альтернативы, можно "очистить" зашумленный сигнал с помощью цифрового эквивалента аналогового RC фильтра нижних частот. По сути, программа этого цифрового фильтра состоит всего из двух строчек на Си.
Библиотека для перевода двоичных чисел в двоично-десятичные числа и символы
Иногда при программировании микроконтроллеров требуется выводить на дисплей или терминал какие-то числовые данные. Это могут быть показания АЦП, значение внутренних часов, коды ошибок, состояния автомата и т.п. Процедура вывода числа состоит из следующих шагов, нужно преобразовать двоичное число в двоично-десятичное, перевести двоично-десятичное число в символьное представление и после этого передать полученный результат какой-то функции вывода. Для выполнения этой задачи я написал небольшую библиотеку.
Быстрое вычисление квадратного корня на Си
При программировании микроконтроллеров разработчики иногда сталкиваются с проблемой вычисления квадратного корня. Например, данная операция требуется при выполнении быстрого преобразования Фурье или вычислении среднеквадратического значения сигнала.
В стандартной библиотеке Си – math.h, есть функция для вычисления квадратного корня sqrt(), которой при желании можно воспользоваться. Она работает с числами типа float, обеспечивает высокую точность результата, но требует для своей работы длительного времени. Для микроконтроллера AVR это порядка 3000 циклов тактовой частоты (проверено в компиляторе IAR на разных уровнях оптимизации).
Если к точности вычисления корня не предъявляются высокие требования, можно воспользоваться упрощенным алгоритмом, занимающим меньше места в памяти и выполняющим вычисления в несколько раз быстрее.
Планировщик
Библиотека для опроса матричной клавиатуры 4x4 и 3х4
Особенности модуля:
- простая интеграция с готовым проектом
Знакомство с замкнутой системой управления
Многие встраиваемые системы реального времени применяются для управления объектами. Такие системы обычно используют обратную связь для получения информации о состоянии объекта.