РадиоЛоцман - Все об электронике

Конфигурируемая логика в AVR микроконтроллерах

В статье описаны основные особенности модуля конфигурируемой пользовательской логики (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 он, можно сказать, обрел вторую жизнь.

Функциональная схема модуля CCL.
Рисунок 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 с тремя
входными операндами
IN[2] IN[1] IN[0] OUT
0 0 0 TRUTH[0]
0 0 1 TRUTH[1]
0 1 0 TRUTH[2]
0 1 1 TRUTH[3]
1 0 0 TRUTH[4]
1 0 1 TRUTH[5]
1 1 0 TRUTH[6]
1 1 1 TRUTH[7]

Для описания логической функции необходимо ввести параметр, представляющий собой 8-битное число, в котором каждый бит описывает значение логической функции для входной комбинации из трех операндов. Значения операндов являются адресом, указывающим место бита в числе. Пример описания простых логических функций приведен в Таблице 2.

Таблица 2. Пример описания логических функций в таблице
истинности LUT
IN[] TRUTH AND NAND OR NOR XOR XNOR NOT
000 TRUTH[0] 0 1 0 1 0 1 1
001 TRUTH[1] 0 1 1 0 1 0 x
010 TRUTH[2] 0 1 1 0 1 0 x
011 TRUTH[3] 0 1 1 0 0 1 x
100 TRUTH[4] 0 1 1 0 1 0 x
101 TRUTH[5] 0 1 1 0 0 1 x
110 TRUTH[6] 0 1 1 0 0 1 x
111 TRUTH[7] 1 0 1 0 1 0 0
    0x80 0x7F 0xFE 0x01 0x96 0x69 0x01

При окончательном построении каждое значение TRUTH [x] будет объединено с соседним при помощи оператора ИЛИ (OR), образуя тем самым законченное логическое выражение (Рисунок 2).

Объединение значений TRUTH[x] для образования логического выражения.
Рисунок 2. Объединение значений TRUTH[x] для образования
логического выражения.

Стоит отметить, что операнд может быть «замаскирован» (привязан к низкому уровню). При маскировании таблица истинности принимает упрощенный вид (Таблицы 3, 4).

Таблица 3. Пример таблицы истинности
при маскировании IN[0]
IN[2] IN[1] OUT
0 0 TRUTH[0]
0 1 TRUTH[2]
1 0 TRUTH[4]
1 1 TRUTH[6]

Понимание того, как необходимо проставить значения в таблице истинности для получения требуемого логического выражения, является ключом к правильной настройке CCL-модуля.

Таблица 4. Пример таблицы истинности при
маскировании IN[0] и IN [1]
IN[2] OUT
0 TRUTH[0]
1 TRUTH[4]

Соединение нескольких LUT

В тех случаях, когда трех входных операндов оказывается недостаточно, а микроконтроллер имеет на борту несколько LUT, разработчик может прибегнуть к их связыванию для получения возможности составления более сложных логических выражений. Так, при связывании двух LUT количество входных операндов увеличивается до 5. При связывании следует учесть, что возможно только последовательное соединение модулей, то есть выход LUTn может связываться только с входом LUTn + 1, а последний LUT может связываться только с первым LUT (Рисунок 3).

Последовательное соединение модулей LUT.
Рисунок 3. Последовательное соединение модулей LUT.

Двухступенчатый синхронизатор, фильтр и детектор фронта

Выход таблицы истинности является комбинаторной функцией входных операндов, что может вызвать короткие сбои в работе алгоритма при изменении их значения. В большинстве случаев эти сбои не вызывают каких-либо проблем, но, если выход LUT настроен, например, на запуск таймера, сбой может вызвать его нежелательный запуск и нарушить работу периферии. Для подавления сбоев используются специальные компоненты, такие как двухступенчатый синхронизатор, фильтр и детектор фронта.

Двухступенчатый синхронизатор

Отключаемый узел фильтрации и синхронизации (Filter/Synch).
Рисунок 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).

Пример работы в MPLAB Code Configurator.
Рисунок 9. Пример работы в MPLAB Code Configurator.

Atmel START – бесплатный онлайн-инструмент для графического конфигурирования микроконтроллеров для встраиваемых приложений на базе AVR и SAM (Рисунок 10).

Пример работы в Atmel START.
Рисунок 10. Пример работы в Atmel START.

Преимуществом Atmel START является простой интерфейс и возможность работы онлайн практически с любого устройства без необходимости установки дополнительного ПО. Среда Atmel START среда отлично подойдет для демонстрации примеров CCL, поэтому остановимся на ней.

Создание проекта и реализация простых функций

Создадим новый проект в Atmel START и выберем микроконтроллер, который поддерживает CCL (Рисунок 11).

Выбор микроконтроллера в Atmel START.
Рисунок 11. Выбор микроконтроллера в Atmel START.
 
Добавление нового модуля в проект Atmel START.
Рисунок 12. Добавление нового модуля в проект Atmel START.

Далее добавим в проект модуль CCL; для этого нажмем кнопку «Add software component» и введем в поиск CCL, после чего добавим в проект драйвер «Digital Glue Logic» (Рисунки 12, 13).

Добавление «Digital Glue Logic» в проект Atmel START.
Рисунок 13. Добавление «Digital Glue Logic» в проект Atmel START.

Проект готов к работе, перейдем в раздел CCL (Рисунок 14).

Раздел CCL проекта Atmel START.
Рисунок 14. Раздел CCL проекта Atmel START.

Для реализации простых логических функций в Atmel Start пользователю достаточно выбрать нужную функцию в соответствующей графе и подключить к выбранному блоку LUT доступные входы и выходы (Рисунок 15). При выборе функции выполняется автоматическое построение таблицы истинности в зависимости от количества подключенных входов (количества операндов).

Выбор и подключение простой логической функции в Atmel START.
Рисунок 15. Выбор и подключение простой логической функции в Atmel START.

В тех случаях, когда стандартных функций оказывается недостаточно, пользователь может создать собственный блок при помощи логического выражения или посредством редактирования таблицы истинности (Рисунок 16).

Составление собственного логического выражения в Atmel START.
Рисунок 16. Составление собственного логического выражения в Atmel START.

Работа с последовательной логикой

Построение элементов последовательной логики также не вызывает особых проблем. Для организации таких элементов необходимо использование нескольких LUT. В Atmel START присутствует специальная графа, позволяющая выбрать один из стандартных элементов последовательной логики (Рисунок 17).

Реализация RS-триггера в Atmel START.
Рисунок 17. Реализация RS-триггера в Atmel START.

Подключение к входам триггера R и S происходит через блоки LUT. Если мы не хотим добавлять в схему каких-либо других логических элементов, достаточно для каждого LUT в таблице истинности указать 0 на выходе при значении 0 на входе и 1 на выходе при 1 на входе.

Реализация защиты от дребезга и использование АЦП

Модуль CCL в Atmel START позволяет работать не только со стандартными входами/выходами, но и системой событий, RTC и UART, SPI, АЦП и другими блоками. Примером использования сторонних блоков может служить инициирование преобразования АЦП при нажатии на кнопку. Однако использование кнопки без какой-либо формы фильтрации во многих случаях приведет к непредсказуемому поведению АЦП, поскольку сигнал может несколько раз переключаться между высоким и низким состоянием. Если приложение чувствительно к дребезгу, необходимо реализовать защиту в его аппаратной или программной части.

Настройки системы событий в Atmel START.
Рисунок 18. Настройки системы событий в Atmel START.

Защита от дребезга может осуществляться путем фильтрации сигнала с помощью блока Filter/Synch CCL (Рисунок 18), после чего отфильтрованный сигнал будет использоваться для запуска преобразования АЦП. Сигналы направляются через систему событий (Рисунок 19), и когда результат преобразования готов, он передается через модуль USART. Пример рассматриваемого проекта доступен по ссылке [3].

Настройка CCL в Atmel START.
Рисунок 19. Настройка CCL в Atmel START.

Заключение

Использование модуля конфигурируемой пользовательской логики (CCL) позволяет упростить процесс разработки встраиваемых приложений за счет исключения необходимости использования внешних компонентов, а также расширить возможности их настройки (в том числе в полевых условиях) без внесения изменений в аппаратную часть.

CCL является отличным подспорьем для быстрого создания прототипов и готовых решений, а современные программные инструменты от компании Microchip, такие как Atmel START и MPLAB Code Configurator еще больше упрощают процесс работы, позволяя создавать рабочие приложения всего за несколько минут, в том числе без необходимости установки какого-либо программного обеспечения.

Литература

  1. Александр Белов. Новые микроконтроллеры AVR от Microchip – преемники Mega.
  2. Николай Артемов. Знакомство с новыми микроконтроллерами SMART ARM компании Atmel.
  3. Getting Started with Core Independent Peripherals on AVR® Microcontrollers
  4. Interfacing Quadrature Encoder using CCL with TCA and TCB
  5. Manchester Encoder Using USART and CCL on ATtiny817

Изготовление 1-4 слойных печатных плат за $2

10BASE-T1L Ethernet по витой паре: реализация на основе микросхем Analog Devices
Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться.
Имя
Фрагменты обсуждения:Полный вариант обсуждения »
  • Исправьте ссылки в списке литературы: в пп.3 и 4 ссылка на один и тот же pdf, выложенный в разных местах; в п.5 ссылка на материал из п.4; для п.5 корректная ссылка: http://ww1.microchip.com/downloads/en/AppNotes/00002371B.pdf
  • Спасибо, исправили.
  • Здорово, конечно ! А как без использования внешнего компонента, графического ? При инициализации программы, операторами, изнутри так сказать ? Так, как прерывания иницилизируют - тот вывод, по фронту по уровню, вот тебе вектор и поэхали. Потому-что программы живут долго, очень долго, а внешние компоненты - обновилась версия, сменил ОС и давай сначала запускать, конфигурировать, припоминать, весь ден уходит только запустить, если не работал больше года ... ?