В этом уроке мы собираемся связать модуль джойстика с микроконтроллером atmega8. РАДОСТЬ палка является входным модулем, используемым для связи. Это в основном упрощает взаимодействие пользователя с машиной. Джойстик показан на рисунке ниже.
Модуль джойстика имеет две оси - одна горизонтальная, а другая вертикальная. Каждая ось джойстика прикреплена к потенциометру, горшку или переменному сопротивлению. Средние точки обозначены как Rx и Ry. Эти контакты используются как контакты выходного сигнала для ДЖОЙСТИКА. Когда стик перемещается по горизонтальной оси при наличии напряжения питания, напряжение на выводе Rx изменяется.
Напряжение на Rx увеличивается при перемещении вперед, напряжение на выводе Rx уменьшается при перемещении назад. Точно так же напряжение на Ry увеличивается при перемещении вверх, напряжение на выводе Ry уменьшается при перемещении вниз.
Итак, у нас есть четыре направления ДЖОЙСТИКА на двух каналах АЦП. В обычных случаях у нас есть 1 Вольт на каждом контакте при нормальных обстоятельствах. Когда ручка перемещается, напряжение на каждом контакте повышается или понижается в зависимости от направления. Итак, четыре направления (0 В, 5 В на канале 0) для оси x; (0 В, 5 В на канале 1) для оси ординат.
Мы собираемся использовать два канала АЦП ATMEGA8 для выполнения этой работы. Мы собираемся использовать канал 0 и канал 1.
Необходимые компоненты
Аппаратное обеспечение: ATMEGA8, блок питания (5 В), ПРОГРАММАТОР AVR-ISP, светодиод (4 шт.), Конденсатор 1000 мкФ, конденсатор 100 нФ (5 шт.), Резистор 1 кОм (6 шт.).
Софт: Atmel studio 6.1, прогисп или flash magic.
Принципиальная схема и объяснение работы
Напряжение на ДЖОЙСТИКЕ не является полностью линейным; это будет шумно. Чтобы отфильтровать шум, к каждому резистору в цепи подключаются конденсаторы, как показано на рисунке.
Как показано на рисунке, в цепи четыре светодиода. Каждый светодиод отображает каждое направление ДЖОЙСТИКА. Когда джойстик перемещается в каком-либо направлении, загорается соответствующий светодиод.
Прежде чем идти дальше, мы должны поговорить об АЦП ATMEGA8, В ATMEGA8 мы можем подавать аналоговый вход на любой из ЧЕТЫРЕХ каналов PORTC, неважно, какой канал мы выбираем, поскольку все они одинаковы, мы собираемся выбрать канал 0 или PIN0 PORTC.
В ATmega8, АЦП имеет разрешение 10 бит, так что контроллер может определить смысл как минимум смена Vref / 2 ^ 10, поэтому, если опорное напряжение 5V мы получаем цифровой приращение выходного сигнала для каждого 5/2 ^ 10 = 5mV. Таким образом, на каждые 5 мВ приращения на входе у нас будет приращение на единицу на цифровом выходе.
Теперь нам нужно установить регистр АЦП, исходя из следующих условий:
1. Прежде всего нам нужно включить функцию ADC в ADC.
2. Вот и получим максимальное входное напряжение для преобразования АЦП + 5В. Таким образом, мы можем установить максимальное значение или ссылку АЦП на 5 В.
3. Контроллер имеет функцию преобразования триггера, которая означает, что преобразование АЦП происходит только после внешнего триггера, поскольку мы не хотим, чтобы нам нужно было настраивать регистры для работы АЦП в непрерывном автономном режиме.
4. Для любого АЦП частота преобразования (аналоговое значение в цифровое значение) и точность цифрового выхода обратно пропорциональны. Поэтому для большей точности цифрового вывода мы должны выбирать меньшую частоту. Для обычных часов АЦП мы устанавливаем предварительную продажу АЦП на максимальное значение (2). Поскольку мы используем внутренние часы с частотой 1 МГц, частота АЦП будет (1000000/2).
Это единственные четыре вещи, которые нам нужно знать, чтобы начать работу с ADC.
Все перечисленные выше четыре функции устанавливаются двумя регистрами:
КРАСНЫЙ (ADEN): этот бит должен быть установлен для включения функции ADC ATMEGA.
СИНИЙ (REFS1, REFS0): Эти два бита используются для задания опорного напряжения (или максимальное входное напряжение, мы собираемся дать). Поскольку мы хотим иметь 5V опорного напряжения, REFS0 должен быть установлен, в таблице.
ЖЕЛТЫЙ (ADFR): этот бит должен быть установлен для непрерывной работы АЦП (режим автономной работы).
РОЗОВЫЙ (MUX0-MUX3): эти четыре бита указывают входной канал. Поскольку мы собираемся использовать ADC0 или PIN0, нам не нужно устанавливать какие-либо биты, как указано в таблице.
КОРИЧНЕВЫЙ (ADPS0-ADPS2): эти три бита предназначены для установки предскалярного значения для АЦП. Поскольку мы используем прескаляр, равный 2, мы должны установить один бит.
ТЕМНО-ЗЕЛЕНЫЙ (ADSC): этот бит устанавливается для АЦП, чтобы начать преобразование. Этот бит можно отключить в программе, когда нам нужно остановить преобразование.