Подключение джойстика к микроконтроллеру PIC


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

Внешний вид подключения джойстика к микроконтроллеру PIC

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

Также на нашем сайте мы рассматривали подключение джойстика к другим микроконтроллерам (платам):

Необходимые компоненты

  1. Микроконтроллер PIC16F877A.
  2. Модуль джойстика (купить на AliExpress).
  3. Держатель микросхем на 40 контактов (купить на AliExpress).
  4. Программатор PICkit 3 (купить на AliExpress).
  5. Кварцевый генератор 20 МГц (купить на AliExpress).
  6. Конденсаторы 22 пФ (2 шт.), 0,1 мкФ и 10 мкФ (купить на AliExpress).
  7. Резистор 220 Ом (купить на AliExpress).
  8. Регулятор напряжения 7805 (купить на AliExpress).
  9. Светодиод – 5 шт. (купить на AliExpress).
  10. Адаптер 12V.
  11. Макетная и перфорированная платы.
  12. Соединительные провода.

Принципы работы джойстика

Джойстики изготавливаются различных форм и размеров. Внешний вид типового модуля джойстика показан на рисунке ниже. Фактически, джойстик представляет собой два потенциометра и кнопку, смонтированных на единую механическую платформу. Потенциометры используются для отслеживания перемещений рукоятки джойстика по осям X и Y. Потенциометры представляют собой аналоговые устройства, поэтому для считывания с них значений с помощью потенциометра необходимо использование АЦП.

Внешний вид джойстика

Используемый нами модуль джойстика имеет 5 контактов, два из которых используются для подачи на него питания, а по остальным трем передаются данные. Джойстик запитывается от напряжения +5V. Контакты данных имеют обозначения VRX, VRY и SW.

Контакт “VRX” расшифровывается как "Variable voltage on X-axis" (переменное напряжение на оси X), а контакт “VRY” – как Variable voltage on Y-axis (переменное напряжение на оси Y). Контакт “SW” означает переключатель (switch).

Таким образом, когда мы будем перемещать джойстик вправо или влево, напряжение на контакте VRX будет изменяться. При перемещении джойстика вверх или вниз напряжение будет изменяться на контакте VRY, а при перемещении джойстика по диагонали напряжение будет изменяться одновременно на контактах VRX и VRY. При нажатии кнопки на джойстике контакт SW будет замыкаться на землю (ground). Представленная ниже картинка более наглядно показывает изменения на контактах джойстика при перемещениях его ручки.

Изменение напряжения на выходных контактах при перемещении оси джойстика

Схема проекта

Схема подключения джойстика к микроконтроллеру PIC представлена на следующем рисунке. Как мы уже знаем, для подключения джойстика нам потребуется три контакта микроконтроллера PIC – один цифровой и два аналоговых.

Схема подключения джойстика к микроконтроллеру PICНа представленной схеме вы можете видеть что джойстик мы изобразили с помощью двух потенциометров RV1 и RV3. Используемые контакты джойстика на представленной схеме выделены фиолетовым цветом. Аналоговые контакты джойстика подключены к контактам A0 и A1 микроконтроллера PIC, а его цифровой контакт – к контакту RB0 микроконтроллера. Также к микроконтроллеру PIC у нас подключены 5 светодиодов – с помощью них мы будем показывать направление, в котором движется ручка джойстика. Светодиоды подключены к контактам порта PORTC (с RC0 по RC4).

Внешний вид собранной конструкции проекта показан на следующем рисунке.

Внешний вид собранной конструкции проекта

Объяснение программы для микроконтроллера PIC

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

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

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

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

Затем внутри бесконечного цикла мы будем считывать значения контактов джойстика VRX, VRY и SW и в зависимости от их значений предпринимать необходимые действия. Считывание аналоговых значений с контактов VRX и VRY мы будем производить с помощью следующих строчек кода:

С помощью этих команд мы будем считывать значения с контактов VRX и VRY и сохранять их в переменных joy_X и joy_Y соответственно. Функция ADC_Read(0) позволяет произвести считывание значения АЦП с канала 0 (контакт A0), а функция ADC_Read(1) – с канала 1 (контакт A1).

Как мы уже знаем, значения на выходе АЦП микроконтроллера PIC могут изменяться в диапазоне от 0 до 1023. В нашем случае эти значения будут зависеть от положения оси джойстика.

В нашем проекте мы использовали значение 200 в качестве нижней границы для осей джойстика, а 800 – в качестве верхней границы. Вы можете изменить эти границы по своему усмотрению. В программе мы с помощью условных операторов IF будем сравнивать считанное значение с выхода АЦП с этими границами и в зависимости от результатов сравнения давать команду на включение соответствующего светодиода.

Аналогичным образом поступаем и для оси Y джойстика.

Также в программе нам необходимо проверять нажата ли кнопка на джойстике. У нас в проекте она подключена к контакту RB0. Если она нажата, то мы будем включать центральный светодиод в нашем проекте.

Моделирование работы проекта

Смоделировать работу проекта можно в симуляторе Proteus, нарисовав в нем схему проекта и загрузив в него программу проекта в шестнадцатеричном коде (hex code). Смоделированная в симуляторе Proteus схема проекта приведена на следующем рисунке.

Смоделированная в симуляторе Proteus схема проекта

Тестирование работы проекта

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

Тестирование работы проекта

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

Более подробно работу проекта вы можете посмотреть на видео, приведенном в конце статьи.

Исходный код программы

Видео, демонстрирующее работу проекта

(Проголосуй первым!)
Загрузка...
212 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *