Еще раз про энкодер…

Для некоторых приложений очень удобно и экономически выгодно, для настройки и управления использовать энкодер. Такие энкодеры имеют строенную тактовую кнопку которую можно применить для выбора режимов работы устройства. В настоящей статье пойдет речь об энкодерах формирующих код “Грея”. Их формируемая последовательность несколько отличается от классической.

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

Подключение энкодера:

 Подключение выполним к портам которые имеют свойства формировать прерывание по изменению состояния. Их можно выбрать из таблицы описания ног микроконтроллера. Для PIC16F1509 выглядит так:

В колонке Interrupt где стоит символ IOC напротив вывода можно использовать для работы с энкодером, дополнительно необходимо обратить внимание на колонку Pull-up. На понадобятся включение подтягивающих резисторов, для формирования на входах высокого уровня сигнала, когда контакты энкодера находятся в неактивном состоянии.

Создадим проект с использованием MPLAB® Code Configurator.

Работу начнем стандартно после окончания работы мастера мы должны получить пустой проект:

Запустим MPLAB® Code Configurator:

Нас интересуют конфигурация выводов, выберем

В менеджере пинов отметим порты RD4/RB5/RB6 что будем использовать как входы:

В окне Модуль пинов настроим свойства, обратите внимание на включение подтягивающих резисторов WPU, а также тип прерывания, новые микроконтроллеры  позволяют выбирать положительное или отрицательное событие или любое, но старые серии различают просто прерывание по входу и тип необходимо определять дополнительно. Но с целью универсальности применим тип “любой”, чтобы проект можно было использовать на любом микроконтроллере.

Выполним генерацию:

Наш проект получит следующие файлы:

Откроем файл pin_manager.c МСС выполнил полностью настройку портов и прерываний

Он так-же предлагает обработку этих прерываний, по каждому выводу отдельно, но у нас эти функции использовать нет необходимости. Саму обработку прерываний мы можем как обычно видеть в файле interrupt_manager.c

Для удобства опишем порты подключения энкодера в файле pin_manager.c:

Для обработки энкодера изменим функцию PIN_MANAGER_IOC, добавим строки:

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

Для энкодера с “обычным” кодированием, вариант определения направления:

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

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

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

Перейдем в МСС. Для настройки функций таймера надо определиться с системным генератором (что мы не сделали в начале):

Выберем внутренний генератор, тактовая 16 мГц. Настроим таймер 0 для формирования временных интервалов:

Настроим таймер на период 10 мС, для этого выберем делитель 1:256, синхронизацию от системного генератора FOSC/4, зададим в окне периода таймера 10 mc, реально получим 9.984 mc. Установим опцию активировать прерывание от таймера. Выполним генерацию кода:

В функцию INTERRUPT_InterruptManager (файл interrupt_manager.c) будет добавлен блок для таймера:

В функцию TMR0_ISR(); добавим обработку нашего таймера:

Не забудьте, что-бы переменные из файла pin_manager.c были доступны в файле tmr0.c их надо описать как внешние. В файле pin_manager.h добавьте строки:

И подключите его к файлу tmr0.c добавив в заголовок:

Имея в своём распоряжении флаги вращение в право FPLUS, вращение влево FMINUS. нажатие кнопки FBUTTON, а также счетчик нажатий click_counter, можно строить разнообразные системы управления на энкодере.

Пример функции получения данных с энкодера может такой:


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

Значок

MPLAB® Code Configurator and Encoder 317.13 KB 115 downloads

Пример создания кода для управления функциями...



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


  • Индикатор температурыИндикатор температуры
    Проект для начинающих, на демо плате BB-2T3D-01. Простой индикатор температуры. Проект никак не задумывался, просто на витрину магазин Ворон нужна была демонстрационная модель на макетной плате, чего нибудь работающего. Остановились на индикаторе температуре. Нужен был какой нибудь выводной …
  • I2C MODULE – PIC18F25K42 Device ID Revision = A001I2C MODULE – PIC18F25K42 Device ID Revision = A001
    I2C MODULE Обход ошибок в версии I2C MODULE – PIC18F25K42 Device ID Revision = A001 В Серии K42 применен совершенно новый модуль шины I2C, который позволяет поддерживать все режимы этой …
  • Система AT команд версии V2.0 для ESP8266 и ESP32Система AT команд версии V2.0 для ESP8266 и ESP32
    Появление нового модуля на базе ESP32 заставило систематизировать систему AT команд, а так же систему обновления и для модулей на базе ESP8266. Начиная с версии v2.0 в ESP8266 внедряется прошивка …
  • MPLAB® Harmony – или как это просто! Часть 2.MPLAB® Harmony – или как это просто! Часть 2.
    Часть вторая – Первая программа на PIC32. Музыкальная тема к статье, слушаем: Для начала изучения PIC32 надо иметь или демоплату или самому её изготовить имея микроконтроллер. Начнем из трудоемкого варианта …
  • APA102 – светодиоды со встроенным драйвером и SPI интерфейсомAPA102 – светодиоды со встроенным драйвером и SPI интерфейсом
    APA102 В 2014 году фирма Shenzhen Led Color Optoelectronic Co., Ltd http://www.szledcolor.com/ начала производство светодиодов на драйвере APA102. Это серия так называемых светодиодов со встроенным драйвером. Основной особенностью этих светодиодов, что …
  • LM317 и светодиодыLM317 и светодиоды
    LM317 и светодиоды статья с переработанная с сайта http://invent-systems.narod.ru/LM317.htm Долговечность светодиодов определяется качеством изготовления кристалла, а для белых светодиодов еще и качеством люминофора. В процессе эксплуатации скорость деградации кристалла зависит от …
  • VU Meter Tower ART – part 2VU Meter Tower ART – part 2
    Проект – VU Meter Tower ART получил продолжение в своем развитии. Теперь можно заказать набор деталей из акрила для самостоятельной сборки. В проект корпуса внесено целый ряд доработок, позволяющие улучшить …
  • ch-4000 – универсальная печатная платаch-4000 – универсальная печатная плата
    На смену устаревшей плате ch-3000, пришла новая ch-4000. Плату уже можно приобрести в магазине Ворон. Схема. Плата позволяет создавать таймеры, часы реального времени, регуляторы температуры, регуляторы влажности, вольтметры, дистанционное управление …
  • Модуль CAN в микроконтроллерах PIC18Модуль CAN в микроконтроллерах PIC18
    Введение   CAN последовательный интерфейс связи, который эффективно поддерживает распределенное управление в реальном масштабе времени с высокой помехозащищенностью. Протокол связи полностью определен Robert Bosch GmbH, в спецификации требований CAN 2.0B …
  • LED драйвер TM1639LED драйвер TM1639
    TМ1639 позволяет работать на матрицу 8*8 или 8 семисегметных индикаторов. Может работать как на индикаторы с общим катодом, но и есть возможность подключать общим анодом. Для управления драйвером используется трех …



Tagged with →  
Share →
Translate »

Copyright © Catcatcat electronics 2013-2020. Все права защищены.
Копирование разрешается только с указанием активной ссылки на правообладателя.

e-mail: catcatcat.electronics@gmail.com