- Что такое АЦП (аналого-цифровое преобразование)
- АЦП в микроконтроллере AVR Atmega16
- Необходимые компоненты
- Принципиальная электрическая схема
- Настройка регистров управления АЦП в Atmega16
- Программирование Atmega16 для АЦП
Одной общей функцией, которая используется почти во всех встроенных приложениях, является модуль АЦП (аналого-цифровой преобразователь). Эти аналого-цифровые преобразователи могут считывать напряжение с аналоговых датчиков, таких как датчик температуры, датчик наклона, датчик тока, датчик гибкости и т. Д. В этом руководстве мы узнаем, что такое АЦП и как использовать АЦП в Atmega16. Это руководство включает в себя подключение небольшого потенциометра к выводу АЦП Atmega16, а 8 светодиодов используются для отображения изменяющегося напряжения выходного значения АЦП относительно изменения входного значения АЦП.
Ранее мы объяснили АЦП в других микроконтроллерах:
- Как использовать АЦП в ARM7 LPC2148 - Измерение аналогового напряжения
- Как использовать АЦП в STM32F103C8 - Измерение аналогового напряжения
- Как использовать АЦП в MSP430G2 - Измерение аналогового напряжения
- Как использовать АЦП в Arduino Uno?
- Использование модуля АЦП микроконтроллера PIC с MPLAB и XC8
Что такое АЦП (аналого-цифровое преобразование)
ADC означает аналого-цифровой преобразователь. В электронике АЦП - это устройство, которое преобразует аналоговый сигнал, такой как ток и напряжение, в цифровой код (двоичную форму). В реальном мире большинство сигналов являются аналоговыми, и любой микроконтроллер или микропроцессор понимает двоичный или цифровой язык (0 или 1). Итак, чтобы микроконтроллеры понимали аналоговые сигналы, мы должны преобразовать эти аналоговые сигналы в цифровую форму. ADC делает это за нас. Для различных приложений доступно множество типов АЦП. Немногие популярные АЦП - это flash, последовательное приближение и сигма-дельта.
Самый недорогой тип АЦП - это АЦП последовательного приближения, и в этом руководстве будет использоваться АЦП последовательного приближения. В АЦП с последовательным приближением последовательно генерируются серии цифровых кодов, каждый из которых соответствует фиксированному аналоговому уровню. Внутренний счетчик используется для сравнения с аналоговым сигналом при преобразовании. Генерация останавливается, когда аналоговый уровень становится чуть больше аналогового сигнала. Цифровой код соответствует аналоговому уровню и является желаемым цифровым представлением аналогового сигнала. На этом наше небольшое объяснение последовательного приближения заканчивается.
Если вы хотите более глубоко изучить АЦП, вы можете обратиться к нашему предыдущему руководству по АЦП. АЦП доступны в виде ИС, а в настоящее время микроконтроллеры поставляются со встроенными АЦП. В этом уроке мы будем использовать встроенный АЦП Atmega16. Поговорим о встроенном АЦП Atmega16.
АЦП в микроконтроллере AVR Atmega16
Atmega16 имеет встроенный 10-битный и 8-канальный АЦП. 10 бит соответствует тому, что если входное напряжение составляет 0-5 В, то оно будет разделено на 10-битное значение, т.е. 1024 уровня дискретных аналоговых значений (2 10 = 1024). Теперь 8 каналов соответствуют выделенным 8 выводам АЦП на Atmega16, где каждый вывод может считывать аналоговое напряжение. Полный PortA (GPIO33-GPIO40) предназначен для работы АЦП. По умолчанию выводы PORTA являются общими выводами ввода-вывода, это означает, что выводы порта мультиплексированы. Чтобы использовать эти выводы в качестве выводов АЦП, нам необходимо настроить определенные регистры, предназначенные для управления АЦП. Вот почему регистры известны как регистры управления АЦП. Давайте обсудим, как настроить эти регистры, чтобы начать работу встроенного АЦП.
Контакты АЦП в Atmega16
Необходимые компоненты
- Микроконтроллер Atmega16 IC
- Кристаллический осциллятор 16 МГц
- Два конденсатора по 100 нФ
- Два конденсатора 22 пФ
- Нажать кнопку
- Перемычки
- Макетная плата
- USBASP v2.0
- Светодиод (любой цвет)
Принципиальная электрическая схема
Настройка регистров управления АЦП в Atmega16
1. Регистр ADMUX (регистр выбора мультиплексора АЦП) :
ADMUX Регистр для выбора канала АЦП и опорного напряжения выбора. На рисунке ниже показан обзор регистра ADMUX. Описание приводится ниже.
- Бит 0-4: биты выбора канала.
MUX4 |
MUX3 |
MUX2 |
MUX1 |
MUX0 |
Выбран канал АЦП |
0 |
0 |
0 |
0 |
0 |
ADC0 |
0 |
0 |
0 |
0 |
1 |
АЦП1 |
0 |
0 |
0 |
1 |
0 |
АЦП2 |
0 |
0 |
0 |
1 |
1 |
ADC3 |
0 |
0 |
1 |
0 |
0 |
ADC4 |
0 |
0 |
1 |
0 |
1 |
ADC5 |
0 |
0 |
1 |
1 |
0 |
ADC6 |
0 |
0 |
1 |
1 |
1 |
ADC7 |
- Бит 5: используется для регулировки результата вправо или влево.
АДЛАР |
Описание |
0 |
Правильно отрегулируйте результат |
1 |
Слева настроить результат |
- Бит 6-7: Они используются для выбора опорного напряжения для АЦП.
REFS1 |
REFS0 |
Опорное напряжение Выбор |
0 |
0 |
AREF, внутренний Vref выключен |
0 |
1 |
AVcc с внешним конденсатором на выводе AREF |
1 |
0 |
Зарезервированный |
1 |
1 |
Внутренний 2,56 опорного напряжения с внешним конденсатором на AREF Pin |
Теперь начните конфигурировать эти биты регистра в программе так, чтобы мы получали чтение и вывод внутреннего АЦП на все выводы PORTC.
Программирование Atmega16 для АЦП
Полная программа представлена ниже. Запишите программу в Atmega16, используя JTAG и Atmel studio, и поверните потенциометр, чтобы изменить значение АЦП. Здесь код объясняется строка за строкой.
Начните с создания одной функции для чтения преобразованного значения АЦП. Затем передайте значение канала как chnl в функции ADC_read .
беззнаковый int ADC_read (беззнаковый символ chnl)
Значения каналов должны быть от 0 до 7, так как у нас всего 8 каналов АЦП.
chnl = chnl & 0b00000111;
Записав «40», т.е. «01000000» в регистр ADMUX, мы выбрали PORTA0 как ADC0, к которому аналоговый вход будет подключен для цифрового преобразования.
ADMUX = 0x40;
Теперь этот шаг включает процесс преобразования АЦП, где, записывая ОДИН в бит ADSC в регистре ADCSRA, мы начинаем преобразование. После этого подождите, пока бит ADIF вернет значение, когда преобразование завершится. Мы останавливаем преобразование, записывая «1» в бит ADIF в регистре ADCSRA. Когда преобразование завершено, верните значение АЦП.
ADCSRA - = (1 <
Здесь внутренний источник опорного напряжения АЦП выбирается установкой бита REFS0. После этого включите АЦП и выберите предделитель как 128.
ADMUX = (1 <
Теперь сохраните значение АЦП и отправьте его в PORTC. В PORTC подключено 8 светодиодов, которые показывают цифровой выход в 8-битном формате. В показанном нами примере напряжение изменяется от 0 В до 5 В с использованием одного потенциометра 1 кОм.
я = ADC_read (0); PORTC = i;
Цифровой мультиметр используется для отображения аналогового входного напряжения на выводе АЦП, а 8 светодиодов используются для отображения соответствующего 8-битного значения на выходе АЦП. Просто поверните потенциометр и посмотрите соответствующий результат на мультиметре и на горящих светодиодах.
Полный код и рабочее видео приведены ниже.