В статье описаны основные особенности модуля конфигурируемой пользовательской логики (CCL) в новых сериях микроконтроллеров AVR, а также приведены примеры его использования
Современные тенденции, направленные на постоянное уменьшение габаритов встраиваемых решений, побуждают производителей интегрировать в микроконтроллеры все большее количество модулей и узлов, которые ранее располагались вовне. Многие из этих модулей представляют собой независимую от ядра периферию (Core Independent Peripheral, CIP) и выполняют свои задачи без участия или контроля со стороны центрального процессора.
Примерами Core Independent Peripheral являются интегрированные внутрь микроконтроллеров модули PTC (Peripheral Touch Controller), ZСD (zero-cross detector) или CCL (Configurable Custom Logic). Последний, в частности, был добавлен в новые микроконтроллеры компании Microchip: tinyAVR серии 0 и 1, megaAVR серии 0, а также AVR-DA, AVR-DB и AVR-DD. Предлагаемые серии микроконтроллеров могут быть использованы в широком спектре приложений, начиная от устройств Интернета вещей (IoT) (контроль датчиков, управление сервоприводами и так далее), и заканчивая автомобильными системами с функцией сенсорного управления в режиме реального времени.
CCL в микроконтроллерах AVR
Модуль конфигурируемой логики CCL представляет собой периферийное устройство, которое позволяет создавать логические функции в микроконтроллерах без необходимости использования внешних логических компонентов. Сам по себе модуль CCL не является инновационным решением: он уже использовался в серии 32-битных микроконтроллеров SAM L21, а также в контроллерах линейки ATxmega, однако в новых сериях 8-битных контроллеров AVR он, можно сказать, обрел вторую жизнь.
![]() |
||
Рисунок 1. | Функциональная схема модуля CCL. |
Модуль CCL (Рисунок 1) дает разработчику доступ к следующему функционалу:
- Логические операции AND, NAND, OR, NOR, XOR, XNOR, NOT;
- Составные логические операции;
- Последовательные логические операции: D Latch (по уровню), D flip-flop (по фронту), JK-, RS-триггеры;
- Возможность синхронизации и фильтрации сигналов;
- И многое другое.
CCL включает в себя несколько модулей комбинационной логики (LUT), количество которых зависит от модели микроконтроллера, а также узлы реализации последовательных логических операций (Sequential).
Каждый модуль LUT, в свою очередь, содержит:
- Входной коммутатор,
- Таблицу истинности (Truth Table),
- Отключаемый узел фильтрации и синхронизации (Filter/Synch),
- Отключаемый детектор фронта (Edge Detector).
С входным коммутатором все более-менее понятно: он позволяет подключить вход LUT к линиям GPIO, шине Events или периферийным устройствам – аналоговому компаратору, таймеру и так далее. Остальные же составляющие LUT заслуживают более детального рассмотрения.
Таблица истинности и комбинационная логика
Модуль комбинационной логики (LUT) позволяет пользователю составлять логические функции при помощи таблицы истинности (Truth Table, Таблица 1).
Таблица 1. | Таблица истинности LUT с тремя входными операндами |
||||||||||||||||||||||||||||||||||||
|
Для описания логической функции необходимо ввести параметр, представляющий собой 8-битное число, в котором каждый бит описывает значение логической функции для входной комбинации из трех операндов. Значения операндов являются адресом, указывающим место бита в числе. Пример описания простых логических функций приведен в Таблице 2.
Таблица 2. | Пример описания логических функций в таблице истинности LUT |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
При окончательном построении каждое значение TRUTH [x] будет объединено с соседним при помощи оператора ИЛИ (OR), образуя тем самым законченное логическое выражение (Рисунок 2).
![]() |
||
Рисунок 2. | Объединение значений TRUTH[x] для образования логического выражения. |
Стоит отметить, что операнд может быть «замаскирован» (привязан к низкому уровню). При маскировании таблица истинности принимает упрощенный вид (Таблицы 3, 4).
Таблица 3. | Пример таблицы истинности при маскировании IN[0] |
|||||||||||||||
|
Понимание того, как необходимо проставить значения в таблице истинности для получения требуемого логического выражения, является ключом к правильной настройке CCL-модуля.
Таблица 4. | Пример таблицы истинности при маскировании IN[0] и IN [1] |
||||||
|
Соединение нескольких LUT
В тех случаях, когда трех входных операндов оказывается недостаточно, а микроконтроллер имеет на борту несколько LUT, разработчик может прибегнуть к их связыванию для получения возможности составления более сложных логических выражений. Так, при связывании двух LUT количество входных операндов увеличивается до 5. При связывании следует учесть, что возможно только последовательное соединение модулей, то есть выход LUTn может связываться только с входом LUTn + 1, а последний LUT может связываться только с первым LUT (Рисунок 3).
![]() |
||
Рисунок 3. | Последовательное соединение модулей LUT. |
Двухступенчатый синхронизатор, фильтр и детектор фронта
Выход таблицы истинности является комбинаторной функцией входных операндов, что может вызвать короткие сбои в работе алгоритма при изменении их значения. В большинстве случаев эти сбои не вызывают каких-либо проблем, но, если выход LUT настроен, например, на запуск таймера, сбой может вызвать его нежелательный запуск и нарушить работу периферии. Для подавления сбоев используются специальные компоненты, такие как двухступенчатый синхронизатор, фильтр и детектор фронта.
Двухступенчатый синхронизатор
![]() |
||
Рисунок 4. | Отключаемый узел фильтрации и синхронизации (Filter/Synch). |
Двухступенчатый синхронизатор в совокупности с фильтром образуют отключаемый узел фильтрации и синхронизации (Filter/Synch) (Рисунок 4). При использовании данного узла выходной сигнал таблицы истинности синхронизируется с тактовым сигналом микроконтроллера и задерживается на величину до двух тактов при синхронизации без фильтрации и до четырех тактов при синхронизации с фильтрацией. Сбои, возникающие в LUT на протяжении этих тактов, будут отсеяны (Рисунок 5).
![]() |
||
Рисунок 5. | Тайминг двухступенчатого синхронизатора в узле фильтрации и синхронизации. |
Фильтр
Для повышения вероятности отсеивания сбоев синхронизатор может быть использован вкупе с настраиваемым фильтром. При включении фильтра выходной сигнал LUT будет задержан на четыре такта, и сигнал короче двух тактов будет отфильтрован (Рисунок 6). Однако в тех случаях, когда выходной сигнал LUT имеет высокое состояние в течение нескольких тактов, работа системы может быть нарушена, так как часть полезного сигнала будет отфильтрована. Фильтр следует использовать только тогда, когда не имеет особого значения, будет ли задержан или укорочен выходной сигнал. Перед включением фильтра рекомендуется проанализировать самый короткий действительный сигнал LUT в текущей конфигурации.
![]() |
||
Рисунок 6. | Тайминг фильтра в узле фильтрации и синхронизации. |
Детектор фронта
![]() |
||
Рисунок 7. | Детектор фронта. |
Детектор фронта (Edge Detector) позволяет выделить фронт сигнала и, например, запустить процесс генерации импульса при обнаружении нарастающего фронта на входе (Рисунок 7). Примером использования детектора фронта может являться отправка импульса с помощью системы событий для запуска другого периферийного устройства, например, таймера при обнаружении фронта сигнала от LUT (Рисунок 8).
![]() |
||
Рисунок 8. | Тайминг детектора фронта. |
Практическое использование CCL
Настройка модуля CCL в микроконтроллерах AVR может производиться как посредством записи значений таблицы истинности в регистры памяти, так и при помощи специальных программных пакетов, позволяющих настраивать CCL через графический интерфейс. Такими пакетами в частности являются MPLAB Code Configurator и Atmel Start.
MPLAB Code Configurator (MCC) – это бесплатный графический плагин для инициализации системы, который также предоставляет драйверы для работы с компонентами. MCC может использоваться через IDE MPLAB Xpress (облегченная онлайн-среда разработки от Microchip) или установлен в качестве плагина в MPLAB X IDE (полнофункциональная интегрированная среда разработки). MPLAB Code Configurator подходит для настройки широкого спектра периферийных устройств и поддерживает работу с микроконтроллерами AVR и PIC (Рисунок 9).
![]() |
||
Рисунок 9. | Пример работы в MPLAB Code Configurator. |
Atmel START – бесплатный онлайн-инструмент для графического конфигурирования микроконтроллеров для встраиваемых приложений на базе AVR и SAM (Рисунок 10).
![]() |
||
Рисунок 10. | Пример работы в Atmel START. |
Преимуществом Atmel START является простой интерфейс и возможность работы онлайн практически с любого устройства без необходимости установки дополнительного ПО. Среда Atmel START среда отлично подойдет для демонстрации примеров CCL, поэтому остановимся на ней.
Создание проекта и реализация простых функций
Создадим новый проект в Atmel START и выберем микроконтроллер, который поддерживает CCL (Рисунок 11).
![]() |
||
Рисунок 11. | Выбор микроконтроллера в Atmel START. |
![]() |
||
Рисунок 12. | Добавление нового модуля в проект Atmel START. |
Далее добавим в проект модуль CCL; для этого нажмем кнопку «Add software component» и введем в поиск CCL, после чего добавим в проект драйвер «Digital Glue Logic» (Рисунки 12, 13).
![]() |
||
Рисунок 13. | Добавление «Digital Glue Logic» в проект Atmel START. |
Проект готов к работе, перейдем в раздел CCL (Рисунок 14).
![]() |
||
Рисунок 14. | Раздел CCL проекта Atmel START. |
Для реализации простых логических функций в Atmel Start пользователю достаточно выбрать нужную функцию в соответствующей графе и подключить к выбранному блоку LUT доступные входы и выходы (Рисунок 15). При выборе функции выполняется автоматическое построение таблицы истинности в зависимости от количества подключенных входов (количества операндов).
![]() |
||
Рисунок 15. | Выбор и подключение простой логической функции в Atmel START. |
В тех случаях, когда стандартных функций оказывается недостаточно, пользователь может создать собственный блок при помощи логического выражения или посредством редактирования таблицы истинности (Рисунок 16).
![]() |
||
Рисунок 16. | Составление собственного логического выражения в Atmel START. |
Работа с последовательной логикой
Построение элементов последовательной логики также не вызывает особых проблем. Для организации таких элементов необходимо использование нескольких LUT. В Atmel START присутствует специальная графа, позволяющая выбрать один из стандартных элементов последовательной логики (Рисунок 17).
![]() |
||
Рисунок 17. | Реализация RS-триггера в Atmel START. |
Подключение к входам триггера R и S происходит через блоки LUT. Если мы не хотим добавлять в схему каких-либо других логических элементов, достаточно для каждого LUT в таблице истинности указать 0 на выходе при значении 0 на входе и 1 на выходе при 1 на входе.
Реализация защиты от дребезга и использование АЦП
Модуль CCL в Atmel START позволяет работать не только со стандартными входами/выходами, но и системой событий, RTC и UART, SPI, АЦП и другими блоками. Примером использования сторонних блоков может служить инициирование преобразования АЦП при нажатии на кнопку. Однако использование кнопки без какой-либо формы фильтрации во многих случаях приведет к непредсказуемому поведению АЦП, поскольку сигнал может несколько раз переключаться между высоким и низким состоянием. Если приложение чувствительно к дребезгу, необходимо реализовать защиту в его аппаратной или программной части.
![]() |
||
Рисунок 18. | Настройки системы событий в Atmel START. |
Защита от дребезга может осуществляться путем фильтрации сигнала с помощью блока Filter/Synch CCL (Рисунок 18), после чего отфильтрованный сигнал будет использоваться для запуска преобразования АЦП. Сигналы направляются через систему событий (Рисунок 19), и когда результат преобразования готов, он передается через модуль USART. Пример рассматриваемого проекта доступен по ссылке [3].
![]() |
||
Рисунок 19. | Настройка CCL в Atmel START. |
Заключение
Использование модуля конфигурируемой пользовательской логики (CCL) позволяет упростить процесс разработки встраиваемых приложений за счет исключения необходимости использования внешних компонентов, а также расширить возможности их настройки (в том числе в полевых условиях) без внесения изменений в аппаратную часть.
CCL является отличным подспорьем для быстрого создания прототипов и готовых решений, а современные программные инструменты от компании Microchip, такие как Atmel START и MPLAB Code Configurator еще больше упрощают процесс работы, позволяя создавать рабочие приложения всего за несколько минут, в том числе без необходимости установки какого-либо программного обеспечения.
Литература
- Александр Белов. Новые микроконтроллеры AVR от Microchip – преемники Mega.
- Николай Артемов. Знакомство с новыми микроконтроллерами SMART ARM компании Atmel.
- Getting Started with Core Independent Peripherals on AVR® Microcontrollers
- Interfacing Quadrature Encoder using CCL with TCA and TCB
- Manchester Encoder Using USART and CCL on ATtiny817