MTouch® Модуль Емкостной Библиотеки для MPLAB®X Code Configurator (MCC)

Visits: 1133


Введение

MTouch ® Модуль Емкостной Библиотеки для MPLAB ® X Code Configurator (MCC) позволяет быстро и легко генерировать решение кода на  Cи для емкостной сенсорной кнопки, датчика приближения и слайдера.

Этот библиотечный модуль использует графический интерфейс пользователя (GUI) для выполнения следующих задач:

  • Установка нескольких параметров mTouch
  • Включение различных функций mTouch
  • Генерация необходимого кода C для программирования на микроконтроллере PIC ®

Следующие части этого руководства охватывают каждый компонент библиотечного модуля mTouch и как настроить базовый проект mTouch.

Ссылка на страницу оригинального описания https://microchipdeveloper.com/touch:mcc-start-page .


Практический пример создания емкостного сенсора на база PIC16F1825, без объяснения принципов создания сенсорных контактов (это планирую позже) и описания всех функций библиотеки.

Для начала необходимо задание, задание правда будем делать под плату, то, что у меня есть. Т.е. 6 сенсорных кнопок, без экрана. Имеется выход на светодиод, для тестирования и на пищалку. Для связи с внешним миром через UART. Функции сенсоров – просто кнопки.

Запускаем MPLAB, создаем проект (процесс создания уже описывался, пропускаем), даем имя проекту touch.

Получаем

 

Запускаем МСС – MPLAB® Code Configurator.

В процессе запуска МСС предложит сохранить файл конфигурации, согласимся, с тем что предлагают. У нас будет единственная конфигурация для одного типа контроллера, так, что тут все делаем на автомате.

Первое, что мы увидим, это предложение от МСС настроить тактовый генератора микроконтроллера

Выберем максимальную производительность (так, как проект учебный). Выполняем следующие изменения:

Выбираем тактовую 8 МГц, включаем умножитель, получаем 32 МГц тактовую. Включаем сторожевой таймер (он обязательно нужен, для надежности работы системы), отключаем низковольтное программирование.

Проверим версию используемой библиотеки, в моей версии 2.70.0.

Если версия ниже указанной, надо обновить.

Добавим модуль библиотеки в проект, для этого из окна ресурсы проекта, выберем библиотеку емкостного сенсора

После добавления получим:

 

Конфигуратор сразу пишет, что надо сделать см. внизу картинки:

ИНФОРМАЦИЯ mTouch INFO Поместите вызов MTOUCH_Service_Mainloop () в основной цикл вашего приложения.
ИНФОРМАЦИЯ mTouch INFO Автоматическая адаптация частоты (AFA) активна. mTouch будет использовать TMR6.
ИНФОРМАЦИЯ mTouch INFO Scan Rate Control отключен. Модуль mTouch будет в режиме Free Running.

Для начала обратимся к схеме, добавим еще модуль UART и настроим порты микроконтроллера:

Получим

Перейдем в менеджер пинов и настроим выводы:

Мы в модуле mTouch настраиваем CS строку, выбираем те порты которые используем как сенсорные входы. По правде говоря, это делается до создания схемы, мы доходим до этого момента и смотрим на какие входы можно навесить сенсоры.

Настроить выводы можно и в панели вида корпуса микросхемы (Package view), для этого кликаем правой кнопкой мыши на выводе и настраиваем функцию:

В mTouch модуле есть строка – управляемая земля – Driven Shield – это необходимо если вы собираетесь использовать проект где возможны попадания на кнопки сенсоров капель воды. Управляемая земля позволяет решить эти проблемы. Но в нашем проекте у нас самая простая конструкция сенсоров и мы её не используем.

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

 

Для первоначального тестирования, нам понадобиться светодиод подключенный к выводу RA4, для этого настроим порт на выход:

МСС предоставляет пользователю, возможность присвоим выводу порта, понятного ему названия, например, имя LED, т.е этот пор будут управлять светодиодом. Для этого перейдем в Pin module и впишем колонке Custom Name – имя LED. После генерации проекта это имя будет присутствовать функциях МСС и эти функции будет удобно различать и использовать, с понятным для вас названием.

 

Теперь перейдем к самому конфигурации емкостной библиотеки. Для этого двойной клик на саму библиотеку, в ресурсах проекта, для открытия окна. Перейдем в закладку Сенсоры, кнопки, датчики приближения, слайдеры, поверхности:

Кода мы подключили входы к модулю мы получили 6 точек контроля:

Библиотека предоставляет регулировку параметров сенсоров как одновременно для всех, так и возможности подстройки параметров для каждого сенсора в отдельности. Для группового изменения параметров необходимо кликнуть на надписи Hardware Sensors, а для индивидуальных настроек кликнуть по нужному сенсору.

Настройка общих параметров для всех сенсоров:

Какие параметры предоставляет библиотека для МК PIC16F1825 (это необходимо учитывать, так как для других типов МК одни параметры могут быть активны, другие недоступны).

Конфигурация выборки датчика – Sensor Sampling Configuration

Idle Sensor Pin State:  – библиотека сканирует датчики последовательно и в каждый момент времени активен только один сенсор, остальные сенсоры (в нашем варианте) подключаются к земле.  В нашем варианте его изменить нельзя. Он активируется если мы используем конструкцию сенсоров с плавающей землей, если имеется экран который подключен к какому то выводу, который управляется Driven Shield.

 

Dedicated Driven Shield: – Это поле должно показывать выход подключения управляемого экрана, но у нас его нет (в моем проекте).

Common Oversampling: – Это число измерений параметра каждого сенсора из которых высчитывается его текущее состояние. Надо понимать, что увеличение этого параметра повышает качество получаемых данных (больше измерений выполнили, обработали и получили более точное значение), но это также увеличивает время измерения, т.е. время реакции сенсора на прикосновение.

Конфигурация формы сигнала датчика – Sensor Waveform Configuration

Auto-Calibration: – Автоматическая калибровка сенсоров – эта опция доступна для МК которые имеют на своем борту аппаратный модуль CVD. Но переживать не надо, для нашего МК, библиотека программно также будет выполнять все функции автонастройки.

Waveform Timing Unit: Единица времени сигнала – это единица времени для предварительной зарядки и опций сбора данных, представленных ниже в окне, и будет зависеть от выбранного устройства и параметров частоты тактового генератора МК.

Pre-charge Time: – Время предварительной зарядки – это значение определяет количество времени, необходимое для зарядки сенсора и внутреннего конденсатора Sample&Hold (выборка/удержание) АЦП. Если значение слишком мало, датчик не будет таким чувствительным, каким мог бы быть, или даже будет “перевернутым” при прикосновении к датчику.

Acquisition Time: – Время захвата: это значение определяет количество времени, предоставляемое сенсору и внутреннему удерживающему конденсатору для зарядки/усреднения их напряжений. Это значение связано с постоянной времени RC датчика и его последовательным резистором. Если значение слишком мало, так что заряд датчика не полностью будет доступен для преобразования, датчик не будет таким чувствительным, как мог бы быть. Если значение слишком велико, помехоустойчивость системы не будет такой надежной, как могла бы быть, потому что это время также является временным окном и для получения шума.

Additional Sample Capacitance: – Емкость дополнительной выборки – это значение определяет, какая дополнительная внутренняя емкость будет добавлена ​​к конденсатору выборки и удержания АЦП. Это используется для улучшения согласования между внутренней и внешней емкостями (сенсора и конденсатора измерения) для лучшего восприятия. Общее эмпирическое правило состоит в том, чтобы устанавливать напряжение после времени сбора данных, максимально приближенное к половине VDD. Эта опция доступна только для МК, которые имеют аппаратный модуль CVD.

Scan Rate Configuration- Управление сканированием сенсоров.

Scan Rate Control: – Управление скоростью сканирования – емкостные датчики необходимо периодически сканировать, есть две опции для управления скоростью сканирования (планирования сбора данных): режим автономной работы, режим запуска по таймеру 1 и режим запуска по таймеру 2. При управление от таймеров мы можем задать время которое будет определять с какой скоростью будут собираться данные с сенсоров.

  • Free Running Mode: Режим свободного запуска: сканирование сенсора и последующая обработка будут происходить, когда вызывается функция mTouch_Service_Mainloop(), время точно не контролируется и будет определяться тем, как часто код приложения вызывает mTouch_Service_Mainloop() .
  • Timer 1 Scheduling Mode: Режим планирования Таймера 1: В этом режиме Таймер 1 будет автоматически добавлен в проект и будет использоваться для планирования частоты сканирования в единицах миллисекунд. По умолчанию таймер 1 настроен на использование LFINTOSC, который может работать в режиме отключения MCU. Любое ручное изменение таймера 1 повлияет на скорость сканирования. Логика планирования реализована внутри функции mTouch_Service_Mainloop(), поэтому в использовании mTouch_Service_Mainloop() изменений не будет. Однако mTouch_Service_Mainloop() необходимо вызывать за более короткий промежуток времени, чем запланированное время сканирования. В противном случае скорость сканирования будет по-прежнему определяться тем, как часто код приложения вызывает функцию mTouch_Service_Mainloop().
  • Timer 2 Scheduling Mode: Режим планирования по таймеру 2: этот режим аналогичен режиму планирования по таймеру 1, но с меньшими затратами микропрограммного обеспечения. Это доступно не на всех устройствах.

Если выбрано автосканирование, то изменить Rate Scan – не предоставляется возможности, оно будут задано автоматически.

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

Подведя итоги описанию панели общих настроек, для тестового примера оставляем все как есть, этих настроек вполне достаточно для 90% проектов.

Индивидуальное настройка сенсоров.

Если ваши сенсорные площадки имеют разную конфигурацию, вот тут вам и понадобятся эти параметры. Для этого необходимо кликнуть на конкретном сенсоре:

Что в этом окне можно делать, предупреждаю мы тоже в нем ничего делать не будем, меня все в нем устраивает ;).

Name – имя сенсора, если вам не нравиться Sensor_AN0 – назовите как вам нравиться, главное, что бы потом не забыть как назвали. Но часто удобнее задать имя сенсора такое как на схеме, это упрощает понимание.

Pin – вывод порта с которым связано это имя сенсора. Тут можно только смотреть на него.

Индивидуальные настройки времени зарядки сенсора, время захвата, дополнительная емкость, количество измерений. Тут вроде понятно, активируем опцию и можно менять параметр.

Scan on Low Power Mode – сканирование сенсора в режиме пониженного потребления, в режиме слип, если это необходимо и вы для этого предусмотрели этот режим заранее, что он необходим, то его можете активировать.

Кнопки.

Теперь переходим к следующему этапу, что мы с этих сенсоров хотим построить. Я хотел сделать кнопки!!

Общая конфигурация кнопки

Аналогично конфигурации датчика, кнопка / датчик приближения также имеет общую секцию. Общая область настроек кнопок состоит из 10 подразделов:

  • Create New Button – создание кнопок
  • Interface Method – метод интерфейса.
  • Press Timeout – допустимое время удержания кнопки
  • Negative Capacitance Recovery – отрицательная емкость.
  • Baseline Filtering – базовая линия.
  • Reading – чтение
  • Debounce
  • Suspend/Disable
  • Reburst
  • Hysteresis

Для этого кликаем на кнопкам:

Откроется окно настройки кнопок, теперь создаем кнопки. Кликаем создать кнопки (Create New Button) и указываем количество кнопок которое ходим создать, я создаю ШЕСТЬ кнопок.

нажимаем кнопку ДОБАВИТЬ (ADD) и получаем см. картинку ниже, (тут надо понимать, сейчас мы создаем только кнопки, но можем создать, например, две кнопки, а с остальных – датчики приближения или слайдер):

 

Interface Method – Метод интерфейса

Библиотека mTouch Sensing Solutions позволяет вашему коду приложения получить статус кнопки двумя способами: с помощью функции обратного вызова или методом опроса.

Press/Activation Timeout – Тайм-аут нажатия/активации

Тайм-аут нажатия/активации – это механизм, используемый для освобождения “застрявшего” датчика приближения. Если кнопка нажата  больше “допустимого времени”, для нескольких последовательных отсчетов, состояние кнопки будет сброшено. Каждая кнопка имеет свой счетчик времени для отслеживания времени нажатия. Базовый счетчик времени ожидания будет увеличиваться каждый раз, когда выполняется вызов mTouch_Service_Mainloop(). Параметр counts действует как пороговое значение для счетчика тайм-аута нажатия каждой кнопки. При превышении счетчиком тайм-аута значения счетчиков состояние кнопки будет сброшено. Изменяя этот параметр мы может регулировать допустимое время удержания сенсора.

Negative Capacitance Recovery – Восстановление отрицательной емкости

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

Baseline Filtering – Базовая фильтрация или Базовая линия

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

Параметр усиления фильтра Gain определяет интенсивность фильтрации для базовой линии. Чем больше значение, тем сильнее становится фильтр, и тем медленнее базовая линия следует за значением частоты получаемых с сенсора кнопки.

Параметр update определяет, как часто система будет обновлять базовую линию кнопки. Чем больше значение, тем реже система обновляет базовый уровень.

Reading Filter – Фильтр чтения

Чтобы минимизировать воздействие импульсного шума, выходной сигнал датчика проходит через фильтр нижних частот. Выход фильтра показывает значение кнопки. Установка более высокого уровня фильтра обеспечивает улучшенное отношение сигнал/шум (SNR) в условиях шума, в то же время увеличивая общее время измерения, что может привести к увеличению потребляемой мощности и времени отклика. Могу от себя добавить, библиотека так построена хорошо, что никакая дополнительная фильтрация сигнала не нужна!

Debounce – Время дребезга

Чтобы предотвратить множественные события обнаружения для одного действия касания, используется алгоритм защиты от дребезга, что-то аналогичное как выполняется защита от дребезга контакта механической кнопки. Параметр Count определяет количество “последовательных касаний” (полученных новых, измененных данных, частоты сенсора), которые превышают порог обнаружения. Как только количество “последовательных касаний” превышено, касание считается действительным. Если какое-либо одинарное касание не превышает порог касаний, во время работы алгоритма защиты от дребезга, то счетчик последовательных касаний сбрасывается и алгоритм перезапускается заново. Алгоритм защиты от дребезга применяется как к касанию/нажатию, так и к деблокированию для кнопок.

Suspend/Disable – Приостановить/Отключить

Отдельные кнопки могут быть приостановлены или отключены с помощью кода приложения.

  • Используйте MTOUCH_Button_Disable(), чтобы отключить кнопку. Отключенная кнопка прекратит сканирование своего датчика и обновление базовой линии.
  • Используйте MTOUCH_Button_Suspend(), чтобы приостановить кнопку. Приостановленная кнопка прекратит сканирование своего датчика, но будет периодически сканировать для обновления базовой линии.
  • Используйте MTOUCH_Button_Resume(), чтобы повторно активировать отключенную / приостановленную кнопку. Кнопка продолжит существующую конфигурацию датчика.

Для активации этих функций необходимо поставить птичку, тогда МСС сгенерирует необходимые функции.

Reburst Mode – Режим повышенного сканирования кнопок и её активации.

Reburst используется для улучшения времени отклика системы при разрешении состояния обнаружения для кнопок. При превышении порогового значения датчика выполняется многократное измерение этого датчика для определения состояния обнаружения. Датчики, которые не являются частью AKSGroup или могут быть отключены, чтобы сократить время обработки. Для Reburst используются три режима:

  • Reburst All : Повторная обработка всех: приостановка датчика не выполняется, все датчики повторно обрабатываются для определения состояния обнаружения.
  • Reburst Unresolved : Повторная обработка датчиков – только для датчиков заданной группы (AKSGroup), все остальные датчики приостанавливаются (сокращение обработки).
  • Disable : функция отключена, только стандартная обработка.

Hysteresis – Гистерезис

Гистерезис обеспечивает запрещенную зону для порогов обнаружения при перемещении между состояниями обнаружения и отсутствия. Выражается в процентах от порога обнаружения. Как только датчик входит в обнаружение, пороговый уровень уменьшается (на величину % гистерезиса). Это предотвращает переключение от датчика, если уровень сигнала близок к текущему пороговому уровню.

Конфигурация отдельной кнопки

Конфигурация отдельной кнопки позволяет вам задавать имя, порог, масштаб отклонения и группу AKS для каждой отдельной кнопки. Кнопка « Удалить элемент» используется для удаления кнопки из проекта.

 

Name – имя

Это поле ввода позволяет изменить название выбранной кнопки. Это имя может использоваться в коде для ссылки на эту кнопку.

Sensor – датчик

Это поле выбора позволяет выбрать аппаратный датчик, который будет связан с этой кнопкой.

Threshold – порог

Отклонение сигнала определяется как разница между текущими показаниями кнопки и базовым значением. Threshold позволяет определить пороговое значение нажатия для отклонения сигнала, до того, как кнопка будет в нажатом состоянии. Порог освобождения составляет 50% от порога нажатия, так определяется гистерезис, чтобы отпустить кнопку.

Deviation Scaling – Масштаб отклонения

Отклонение сигнала будет преобразовано с 16-разрядного целого числа со знаком до 8-разрядного со знаком. Если отклонение после уменьшения больше 127, то значение будет обрезано до 127 (0x7F). Параметр масштабирования отклонения определяет, сколько бит будет сдвигаться вправо. Чем меньше значение, тем более чувствительной будет кнопка. Цель состоит в том, чтобы сдвинуть уменьшенное отклонение до диапазона от 64 до 127 при нажатии кнопки, чтобы получить полный динамический диапазон.

 

AKS Group

AKS ®обозначает – Подавление Смежного Сенсора. В конструкциях, где датчики расположены близко друг к другу или настроены на высокую чувствительность, несколько кнопок могут сообщать об обнаружении одновременно. Чтобы позволить приложениям определять предполагаемое одно касание, библиотека mTouch позволяет настроить несколько кнопок в группе AKS. Когда группа кнопок находится в одной группе AKS, только первая сильная кнопка сообщит об обнаружении. Кнопка продолжает сообщать об обнаружении, пока его отклонение или дельта не опустится ниже порога обнаружения. Пока этот датчик находится в нажатом состоянии, никакие другие кнопки в той же группе AKS не будут сообщать об обнаружении, даже если отклонение другого кнопки станет больше в той же группе AKS.

Individual Hysteresis – Индивидуальный гистерезис

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

AFA (автоматическая адаптация частоты)

Раздел «Автоматическая адаптация частоты» (AFA) позволяет включить расширенный алгоритм помехоустойчивости. Процедура автоматической адаптации частоты непрерывно отслеживает количество шума на каждом датчике и интеллектуально выбирает новую частоту сканирования, чтобы избежать частоты шума и его гармоник. Процедура требует 8-битный таймер для точного управления частотой сканирования для реализации деталей, не принадлежащих ADCC. В связи с этим требованием, mTouch ® будет брать на себя ответственность первого доступного модуля таймера 8-битном по умолчанию, если он доступен , когда автоматическая процедура адаптации частоты включена.

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

Конфигурация mTouch® с низким энергопотреблением

Потребляемая мощность остается важным фактором при проектировании любой системы. Чтобы снизить энергопотребление, устройство переключится из обычного режима в режим низкого энергопотребления, если в течение неактивного периода времени не будет обнаружено касания. В режиме низкого энергопотребления будут сканироваться только выбранные датчики, и если показание датчика на любом из выбранных датчиков превышает пороговое значение, устройство переключится обратно в нормальный режим. В режиме низкого энергопотребления устройство будет переведено в режим ожидания между измерениями для экономии энергии. MTouch ®Библиотека поддерживает выбор конфигурации для режима с низким энергопотреблением и выбор датчиков, которые необходимо периодически сканировать в режиме с низким энергопотреблением. Логика переключения режимов реализована внутри библиотеки mTouch, и для доступа к режиму с низким энергопотреблением предусмотрены API. Блок-схема, детализирующая два режима работы, показана ниже.

Конфигурация с низким энергопотреблением

(В проекте этот режим не будем использовать, чисто для расширенного понимания) Конфигурация с низким энергопотреблением состоит из:

  • Low-power Measurement Enable – Разрешение работы в режиме с низким энергопотреблением
  • Low-power Measurement Period – Период измерения в режиме с низким энергопотреблением
  • Low-power Detect Threshold – Порог обнаружения в режиме с низким энергопотреблением
  • Touch Inactivity Timeout – Тайм-аут неактивности
  • Baseline Update Period – Базовый период обновления
  • Low-power Measurement Sensor Selection – Выбор измерительного сенсора в режиме с низким энергопотреблением

Enable Low Power Measurement Period – Включить период измерения в режиме с низким энергопотреблением

Флажок «Включить измерение в режиме с низким энергопотреблением» необходимо установить для включения автоматического переключения режима питания между обычным режимом и режимом с низким энергопотреблением. Снимите флажок, чтобы отключить переключение режима питания.

При активации этого режима, МСС предупредит вас, что необходимо выбрать сенсор который будет сканироваться в режиме с низким энергопотреблением. Также МСС автоматически добавит таймер 1, в его задачу будет входить формирование периода опроса сенсора для активации системы (просыпания системы на момент проверки состояния сенсора).

Low-power Measurement Period – Период измерения в режиме с низким энергопотреблением

Период измерения, в режиме с низким энергопотреблением, определяет интервал между измерениями касания. При установке флажка «Включить измерение в режиме с низким энергопотреблением» будет включено поле со списком «Период измерения в режиме с низким энергопотреблением», позволяющее выбрать период из поля со списком.

Low-power Detect Threshold – Порог обнаружения в режиме с низким энергопотреблением

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

Touch Inactivity Timeout – Тайм-аут неактивности

Тайм-аут неактивности касания относится ко времени ожидания (в миллисекундах), в течение которого приложение переключается на измерение в режиме с низким энергопотреблением, после последнего касания.

Baseline Update Period – Базовый период обновления

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

Low-Power Measurement Sensor Selection – Выбор измерительного датчика малой мощности

Датчики, которые необходимо сканировать в режиме низкого энергопотребления, следует выбирать на странице «Параметры датчика» отдельных датчиков. Необходимо установить флажок «Сканирование при низком энергопотреблении» в настройках датчика, чтобы добавить датчик в список выбранных датчиков для измерения с низким энергопотреблением. По крайней мере, один из датчиков должен быть выбран для измерения в режиме с низким энергопотреблением.

На это описание основных функций настройки приостановим и перейдем к проекту.

Первое, что после всего делаем генерируем через МСС исполняемые файлы

У нас появятся в главном дереве файлы и папки:

Кликаем (двойной) на main.c и открываем главный файл проекта. Что необходимо сделать?

  1. Мы в настройках включили сторожевой таймер. Всегда рекомендую его включать в начале проекта, это избавит от проблем при запуске его в конце. Мое правило сторожевой таймер надо использовать всегда.
  2. Добавить функцию MTOUCH_Service_Mainloop () в главный цикл проекта.
  3. Включить прерывания.

Теперь последовательно, добавляем строку, сброса сторожевого таймера, это в начало после инициализации и в главный цикл:

void main (void)
{
    // initialize the device
    SYSTEM_Initialize ();
    CLRWDT (); // Сброс сторожевого таймера
    // When using interrupts, you need to set the Global and Peripheral Interrupt Enable bits
    // Use the following macros to:

главный цикл :

    while (1)
    {
        // Add your application code
        CLRWDT (); // Сброс сторожевого таймера

Далее включим прерывания, для чего вопрос. Мы включили в библиотеке режим «Автоматическая адаптация частоты» (AFA). Этот модуль использует таймер 6, а механизм работает через прерывания, смотрим тут:

и смотрим настройку прерываний:

Вот для этого мы раскомментируем в нашем файле строки:

    // Enable the Global Interrupts
    INTERRUPT_GlobalInterruptEnable ();

    // Enable the Peripheral Interrupts
    INTERRUPT_PeripheralInterruptEnable ();

    // Disable the Global Interrupts
    //INTERRUPT_GlobalInterruptDisable();

    // Disable the Peripheral Interrupts
    //INTERRUPT_PeripheralInterruptDisable();

Теперь для понимания посмотрим на весь файл, что в нем необходимо добавить?

void main (void)
{
    // initialize the device
    SYSTEM_Initialize ();
    CLRWDT (); // Сброс сторожевого таймера
    // When using interrupts, you need to set the Global and Peripheral Interrupt Enable bits
    // Use the following macros to:

    // Enable the Global Interrupts
    INTERRUPT_GlobalInterruptEnable ();

    // Enable the Peripheral Interrupts
    INTERRUPT_PeripheralInterruptEnable ();

    // Disable the Global Interrupts
    //INTERRUPT_GlobalInterruptDisable();

    // Disable the Peripheral Interrupts
    //INTERRUPT_PeripheralInterruptDisable();

    while (1)
    {
        // Add your application code
        CLRWDT (); // Сброс сторожевого таймера
    }
}

Надо добавить в главный цикл функцию MTOUCH_Service_Mainloop (). Эта функция, для нашего выбранного режима работы, предназначена для обработки данных от сенсорных кнопок. Эта функция также возвращает TRUE если обнаружено событие нажатие кнопки сенсора. Т.е. Если мы сделаем так:

        if (MTOUCH_Service_Mainloop ())
        {
                /* тут мы будем если актировался любой сенсор*/
        }

Теперь как определить какой сенсор нажат? Для этого будем использовать функцию: MTOUCH_Button_isPressed (Button0) где Button0 – имя сенсора. См. имена.

Это будет выглядеть так, для сенсора кнопки 0:

        if (MTOUCH_Service_Mainloop ()) // обработка сенсорых кнопок и возврашает "1" если есть событие нажатия любой кнопки
        {
            if (MTOUCH_Button_isPressed (Button0)) // определяем какая кнопка нажата
            {
                      /* тут кнопка Button0 нажата */
            }
            else
            {
                     /* тут кнопка Button0 отпущена*/
            }
        }

А теперь добавим, немного, для формирование однократного события нажатия и вывод нажатия на индикатор:

        if (MTOUCH_Service_Mainloop ()) // обработка сенсорных кнопок и возвращает "1" если есть событие нажатия любой кнопки
        {
            if (MTOUCH_Button_isPressed (Button0)) // определяем какая кнопка нажата
            {
                if (!FLAGO)
                {
                    LED_SetHigh ();
                    FLAGO = 1;
                }
            }
            else if (FLAGO)
            {
                FLAGO = 0;
                LED_SetLow ();
            }
        }

Считаю, тут не сложно разобраться в логике. Мы имеем флаг FLAGO  который контролирует нажатие и при это гарантирует, что светодиод будет включен один раз при нажатии и выключен один раз при отпускании. Если вместо светодиод поставить переменную с инкрементом, то можно увеличивать её при каждом нажатии на единицу.

Теперь самое главное откуда беруться все эти функции?

Для светика открываем файл описание портов pin_manager.h и смотрим, что там есть (кусочек файла):

......
#define RA2_SetAnalogMode()         do { ANSELAbits.ANSA2 = 1; } while(0)
#define RA2_SetDigitalMode()        do { ANSELAbits.ANSA2 = 0; } while(0)

// get/set LED aliases
#define LED_TRIS                 TRISAbits.TRISA4
#define LED_LAT                  LATAbits.LATA4
#define LED_PORT                 PORTAbits.RA4
#define LED_WPU                  WPUAbits.WPUA4
#define LED_ANS                  ANSELAbits.ANSA4
#define LED_SetHigh()            do { LATAbits.LATA4 = 1; } while(0)
#define LED_SetLow()             do { LATAbits.LATA4 = 0; } while(0)
#define LED_Toggle()             do { LATAbits.LATA4 = ~LATAbits.LATA4; } while(0)
#define LED_GetValue()           PORTAbits.RA4
#define LED_SetDigitalInput()    do { TRISAbits.TRISA4 = 1; } while(0)
#define LED_SetDigitalOutput()   do { TRISAbits.TRISA4 = 0; } while(0)
#define LED_SetPullup()          do { WPUAbits.WPUA4 = 1; } while(0)
#define LED_ResetPullup()        do { WPUAbits.WPUA4 = 0; } while(0)
#define LED_SetAnalogMode()      do { ANSELAbits.ANSA4 = 1; } while(0)
#define LED_SetDigitalMode()     do { ANSELAbits.ANSA4 = 0; } while(0)

// get/set RC0 procedures
#define RC0_SetHigh()            do { LATCbits.LATC0 = 1; } while(0)
#define RC0_SetLow()             do { LATCbits.LATC0 = 0; } while(0)
......

Что обозначает каждая строка догадайтесь сами ;)

Для функций библиотеки сенсоров надо смотреть заголовочные файля библиотеки, там даже есть описание:

Все доп. вопросы тут – https://t.me/Catcatcat_electronics


Идем дальше скомпилируем проект и загрузим в нашу тестовую плату и протестируем работу сенсора!

 

Проект для тестирования.

На этом месте я заморился, но продолжение возможно если будут вопросы….


Это может быть интересно


  • УКВ – радиоприем, часть 2УКВ – радиоприем, часть 2
    Visits: 6168 Пришло свободное время решил вторую часть проекта реализовать (правда есть мысль и третью с использование цветного OLED и функцией ch-светомузыки, но это только задумка… Для понимания функций интегрального …
  • Analog-to-Digital Converter with Computation Technical BriefAnalog-to-Digital Converter with Computation Technical Brief
    Visits: 1208 Аналого-цифровой преобразователь с вычислительным модулем. ВВЕДЕНИЕ Аналого-цифровой преобразователь (ADC) с вычислительным модулем (ADC2) в 8-разрядном микроконтроллере Microchip имеет встроенные вычислительные функции, которые обеспечивают функции пост-обработки, такие как передискретизация, …
  • CLUBBEST-50-LightCLUBBEST-50-Light
    Visits: 213 CLUBBEST-50-LIGHT   Зміст Короткий опис проекту. 1 Опис схемотехніки візуалізатора музики. 2 Аудіо вхід. 3 MCU. 4 Цифровий вихід. 5 Схема живлення MCU. 6 Складання пристрою. 7 Список …
  • Altium Designer my Libraries, Project templates, System settings by Catcatcat V23.04Altium Designer my Libraries, Project templates, System settings by Catcatcat V23.04
    Visits: 157 Смотри как установить и подключить библиотеку тут.   V.  – 23_04 – Component Database Update. – configuration file name – DXPPreferences1.DXPPrf. – Added two projects for audio amplifier …
  • BMP280 – температура и атмосферное давление – учебный проектBMP280 – температура и атмосферное давление – учебный проект
    Visits: 2014 Учебный проект на PIC32 и светодиодной панели P5 (2121)-168-6432-80 (32*64). Проект позволяет ознакомиться с простой графикой и с чтением давления и температуры с датчика BMP280. Для тестирования необходимо …
  • Применение typedef, struct и unionПрименение typedef, struct и union
    Visits: 8687 Полезные описания переменных Часто необходимо в памяти расположить последовательно разные виды данных, что бы потом можно было их использовать. Полезные ссылки Взято и переработано с сайта http://www.butovo.com/~zss/cpp/struct.htm http://cppstudio.com/post/9172/ …
  • Altium Designer first projectAltium Designer first project
    Visits: 212 Эта статья подразумевает, что у вас установлен и настроен Altium Designer как описано в статье  Altium Designer my setup system and project structure.  Обратите внимание! Библиотека постоянно обновляется, …
  • NeoPixel LED и PIC18NeoPixel LED и PIC18
    Visits: 1635   Еще раз об управлении светодиодами на драйвере WS2812 и ему подобных. Как известно эти светики управляются по однопроводной шине. Основная особенность, что программно можно описать передачу данных, …
  • Toyota Auto Fader – Модуль включения усилителяToyota Auto Fader – Модуль включения усилителя
    Visits: 1899 Toyota Auto Fader – Модуль включения усилителя. Часто автолюбители прибегают к замене штатного головного устройства на универсальное мультимедийное, в котором значительно расширены функциональные возможности. Если возникает желание оставить …
  • Униполярный шаговый двигатель – часть 2Униполярный шаговый двигатель – часть 2
    Visits: 762 В этой части только итог и версия 2.0 универсальной, которая позволяет управлять шаговым двигателем во всех трех режимах и 3.0 специальной библиотеки только для одного полушагового режима. В …



В записи нет меток.

Поделись этим!

Catcatcat

catcatcat

Development of embedded systems based on Microchip microcontrollers.

Продолжайте читать

НазадДалее