Оглавление:
- Шаг 1. Что такое АЦП?
- Шаг 2: Как работает АЦП в AVR-микроконтроллере
- Шаг 3: Формула преобразования АЦП
- Шаг 4: Как настроить АЦП в ATmega8?
- Шаг 5: выбор ADLAR
- Шаг 6: выбор ADCSRA
- Шаг 7: Если вы хотите воспользоваться преимуществами ADC, вам необходимо выполнить некоторую работу, указанную ниже
- Шаг 8: Установите значение АЦП
- Шаг 9: Настройка вывода светодиодного индикатора
- Шаг 10: Настройте оборудование АЦП
- Шаг 11: Включите АЦП
- Шаг 12: Начните аналого-цифровое преобразование
- Шаг 13: НАВСЕГДА
- Шаг 14: В конце завершен код
Видео: Введение в АЦП в микроконтроллере AVR - для начинающих: 14 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:53
В этом руководстве вы узнаете все АЦП в микроконтроллере AVR.
Шаг 1. Что такое АЦП?
АЦП или аналого-цифровой преобразователь позволяет преобразовывать аналоговое напряжение в цифровое значение, которое может использоваться микроконтроллером. Есть много источников аналоговых сигналов, которые хотелось бы измерить. Доступны аналоговые датчики, которые измеряют температуру, интенсивность света, расстояние, положение и силу, и это лишь некоторые из них.
Шаг 2: Как работает АЦП в AVR-микроконтроллере
АЦП AVR позволяет микроконтроллеру AVR преобразовывать аналоговые напряжения в цифровые значения с небольшим количеством внешних компонентов или без них. ATmega8 имеет 10-битный АЦП последовательного приближения. ATmega8 имеет 7-канальный АЦП на PortC. АЦП имеет отдельный вывод аналогового напряжения питания AVCC. AVCC не должен отличаться от VCC более чем на ± 0,3 В. Опорное напряжение может иметь внешнюю развязку на выводе AREF. AVCC используется в качестве опорного напряжения. АЦП также можно настроить на непрерывную работу (автономный режим) или на выполнение только одного преобразования.
Шаг 3: Формула преобразования АЦП
Где Vin - это напряжение на выбранном входном контакте, а Vref - выбранное опорное напряжение.
Шаг 4: Как настроить АЦП в ATmega8?
Следующие регистры используются для реализации АЦП в ATmega8
Выбор мультиплексора АЦП
Шаг 5: выбор ADLAR
Результат настройки АЦП влево Бит ADLAR влияет на представление результата преобразования АЦП в регистре данных АЦП. Напишите один в ADLAR, чтобы слева отрегулировать результат. В противном случае результат корректируется правильно
Когда преобразование АЦП завершено, результат находится в ADCH и ADCL. Когда ADCL считывается, регистр данных АЦП не обновляется до тех пор, пока не будет считан ADCH. Следовательно, если результат остается скорректированным и требуется не более 8-битной точности, достаточно прочитать ADCH. В противном случае сначала нужно прочитать ADCL, а затем ADCH. Биты выбора аналогового канала Значение этих битов определяет, какие аналоговые входы подключены к АЦП.
Шаг 6: выбор ADCSRA
• Бит 7 - ADEN: включение АЦП Запись этого бита в единицу включает АЦП. Записав его в ноль, АЦП отключается
• Бит 6 - ADSC: начало преобразования АЦП В режиме одиночного преобразования запишите этот бит в единицу, чтобы начать каждое преобразование. В режиме Free Running запишите этот бит в единицу, чтобы начать первое преобразование.
• Бит 5 - ADFR: выбор режима автономной работы АЦП. Когда этот бит установлен (единица), АЦП работает в режиме автономной работы. В этом режиме АЦП непрерывно производит выборку и обновляет регистры данных. Сброс этого бита (ноль) приведет к выходу из автономного режима.
• Бит 4 - ADIF: Флаг прерывания АЦП Этот бит устанавливается, когда преобразование АЦП завершается и регистры данных обновляются. Прерывание завершения преобразования АЦП выполняется, если установлены бит ADIE и бит I в SREG. ADIF очищается аппаратно при выполнении соответствующего вектора обработки прерывания. В качестве альтернативы, ADIF очищается записью логической единицы во флаг.
• Бит 3 - ADIE: разрешение прерывания АЦП. Когда этот бит записан в единицу и установлен бит I в SREG, активируется прерывание завершения преобразования АЦП.
• Биты 2: 0 - ADPS2: 0: Биты выбора предделителя АЦП В соответствии с таблицей данных, этот прескаляр должен быть установлен таким образом, чтобы частота входного сигнала АЦП находилась в диапазоне от 50 кГц до 200 кГц. Тактовая частота АЦП выводится из системной тактовой частоты с помощью ADPS2: 0 Эти биты определяют коэффициент деления между частотой XTAL и входной тактовой частотой АЦП.
Шаг 7: Если вы хотите воспользоваться преимуществами ADC, вам необходимо выполнить некоторую работу, указанную ниже
- Установить значение АЦП
- Настроить вывод светодиода вывода
- Настроить оборудование АЦП
- Включить АЦП
- Начать аналого-цифровое преобразование
- Пока навсегда
Если значение АЦП выше установленного значения, включите светодиод, Иначе выключите светодиод
Шаг 8: Установите значение АЦП
Код: uint8_t ADCValue = 128;
Шаг 9: Настройка вывода светодиодного индикатора
Код: DDRB | = (1 << PB1);
Шаг 10: Настройте оборудование АЦП
Настроить оборудование АЦП
Это делается путем установки битов в регистрах управления АЦП. Во-первых, давайте установим предскаляр для АЦП. Согласно таблице данных, этот прескаляр должен быть настроен так, чтобы входная частота АЦП находилась в диапазоне от 50 до 200 кГц. Часы АЦП выводятся из системных часов. При системной частоте 1 МГц предварительный делитель 8 даст частоту АЦП 125 кГц. Предварительное масштабирование устанавливается битами ADPS в регистре ADCSRA. Согласно таблице данных, все три бита ADPS2: 0 должны быть установлены на 011, чтобы получить 8-кратный предделитель.
Код: ADCSRA | = (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
Далее установим опорное напряжение АЦП. Это контролируется битами REFS в регистре ADMUX. Следующее устанавливает опорное напряжение на AVCC.
Код: ADMUX | = (1 << REFS0);
Чтобы установить канал, проходящий через мультиплексор к АЦП, необходимо соответствующим образом установить биты MUX в регистре ADMUX. Поскольку здесь мы используем ADC5
Код: ADMUX & = 0xF0; ADMUX | = 5;
Чтобы перевести АЦП в автономный режим, установите метко названный бит ADFR в регистре ADCSRA:
Код: ADCSRA | = (1 << ADFR);
Последнее изменение настроек будет сделано, чтобы упростить считывание значения АЦП. Хотя разрешение АЦП составляет 10 бит, такой объем информации часто не требуется. Это 10-битное значение делится между двумя 8-битными регистрами, ADCH и ADCL. По умолчанию самые младшие 8 бит значения АЦП находятся в ADCL, а два верхних - это два младших бита ADCH. Установив бит ADLAR в регистре ADMUX, мы можем выровнять значение АЦП по левому краю. Это помещает самые высокие 8 бит измерения в регистр ADCH, а остальные - в регистр ADCL. Если мы затем прочитаем регистр ADCH, мы получим 8-битное значение, которое представляет наше измерение от 0 до 5 вольт в виде числа от 0 до 255. Мы в основном превращаем наше 10-битное измерение АЦП в 8-битное. Вот код для установки бита ADLAR:
Код:
ADMUX | = (1 << ADLAR); На этом настройка оборудования АЦП для этого примера завершена. Прежде чем АЦП начнет измерения, необходимо установить еще два бита.
Шаг 11: Включите АЦП
Чтобы включить АЦП, установите бит ADEN в ADCSRA:
Код: ADCSRA | = (1 << ADEN);
Шаг 12: Начните аналого-цифровое преобразование
Чтобы начать измерения АЦП, необходимо установить бит ADSC в ADCSRA:
Код: ADCSRA | = (1 << ADSC);
В этот момент АЦП начнет непрерывную выборку напряжения, представленного на АЦП5. Код на этом этапе будет выглядеть так:
Шаг 13: НАВСЕГДА
Осталось только проверить значение АЦП и настроить светодиоды на отображение высокого / низкого уровня. Поскольку показание АЦП в ADCH имеет максимальное значение 255, было выбрано тестовое значение th, чтобы определить, было ли напряжение высоким или низким. Простая инструкция IF / ELSE в циклах FOR позволит нам включить правильный светодиод:
Код
если (ADCH> ADCValue)
{
ПОРТБ | = (1 << PB0); // Включаем светодиод
}
еще
{
ПОРТБ & = ~ (1 << PB0); // Выключаем светодиод
}
Шаг 14: В конце завершен код
Код:
#включают
int main (пусто)
{
uint8_t ADCValue = 128;
DDRB | = (1 << PB0); // Устанавливаем LED1 как выход
ADCSRA | = (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // Установите предскалярный преобразователь АЦП на 8 - // частота дискретизации 125 кГц 1 МГц
ADMUX | = (1 << REFS0); // Устанавливаем ссылку АЦП на AVCC
ADMUX | = (1 << ADLAR); // Отрегулируйте результат АЦП влево, чтобы можно было легко читать 8 бит
ADMUX & = 0xF0;
ADMUX | = 5; // Для использования ADC0 необходимо изменить значения мультиплексора
ADCSRA | = (1 << ADFR); // Установите АЦП в автономный режим
ADCSRA | = (1 << ADEN); // Включаем АЦП
ADCSRA | = (1 << ADSC); // Начать преобразование A2D while (1) // Цикл навсегда
{
если (ADCH> ADCValue)
{
ПОРТБ | = (1 << PB0); // Включаем LED1
}
еще
{
ПОРТ & = ~ (1 << PB1); // Выключаем LED1
}
}
возврат 0;
}
Сначала опубликуйте этот учебник Щелкните здесь
Рекомендуемые:
Как сделать АЦП текущим значением: 5 шагов
Как измерить ток АЦП: в этой инструкции мы опишем, как реализовать 8-битный аналого-цифровой преобразователь (АЦП) в SLG46855V, который может определять ток нагрузки и взаимодействовать с MCU через I2C. Эта конструкция может использоваться для различных приложений измерения тока, таких как
Считывание значений АЦП с потенциометров: 4 шага
Считывание значений АЦП с потенциометров: в этой статье я покажу вам, как считывать значения АЦП с потенциометра. Это основа программирования Arduino. который считывает аналоговые значения с помощью аналогового вывода, предоставленного Arduino. Помимо потенциометра, есть несколько датчиков, которые
Arduino и 16-битный АЦП TI ADS1110: 6 шагов
Arduino и 16-разрядный АЦП TI ADS1110: в этом руководстве мы исследуем использование Arduino для работы с Texas Instruments ADS1110 - невероятно крошечной, но полезной ИС 16-разрядного аналого-цифрового преобразователя. Он может работать при напряжении от 2,7 до 5,5 В, так что он также подходит для Arduino Due и других низковольтных
Знаете ли вы о настройке АЦП ESP32 ?: 29 шагов
Знаете ли вы о регулировке АЦП ESP32? Сегодня я собираюсь поговорить о более технической проблеме, но я думаю, что каждый, кто работает с ESP32, должен знать: проблема регулировки чтения АЦП (аналого-цифровой преобразователь). Я считаю это важным, потому что при выполнении " измерения " особенно
Перезаряжаемый цифровой вольтметр с использованием АЦП ICL7107: 7 шагов (с изображениями)
Перезаряжаемый цифровой вольтметр с использованием АЦП ICL7107: в этом уроке я покажу вам, как сделать супер простой цифровой вольтметр, который может измерять напряжения от 20 мВ до 200 В. В этом проекте не будет использоваться микроконтроллер, подобный Arduino. Вместо этого будет использоваться АЦП, то есть ICL7107 с некоторыми пасс