Оглавление:

Введение в АЦП в микроконтроллере AVR - для начинающих: 14 шагов
Введение в АЦП в микроконтроллере AVR - для начинающих: 14 шагов

Видео: Введение в АЦП в микроконтроллере AVR - для начинающих: 14 шагов

Видео: Введение в АЦП в микроконтроллере AVR - для начинающих: 14 шагов
Видео: АЦП микроконтроллера AVR 2024, Июль
Anonim
Введение в АЦП в микроконтроллере AVR | для начинающих
Введение в АЦП в микроконтроллере AVR | для начинающих

В этом руководстве вы узнаете все АЦП в микроконтроллере AVR.

Шаг 1. Что такое АЦП?

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

Шаг 2: Как работает АЦП в AVR-микроконтроллере

АЦП AVR позволяет микроконтроллеру AVR преобразовывать аналоговые напряжения в цифровые значения с небольшим количеством внешних компонентов или без них. ATmega8 имеет 10-битный АЦП последовательного приближения. ATmega8 имеет 7-канальный АЦП на PortC. АЦП имеет отдельный вывод аналогового напряжения питания AVCC. AVCC не должен отличаться от VCC более чем на ± 0,3 В. Опорное напряжение может иметь внешнюю развязку на выводе AREF. AVCC используется в качестве опорного напряжения. АЦП также можно настроить на непрерывную работу (автономный режим) или на выполнение только одного преобразования.

Шаг 3: Формула преобразования АЦП

Формула преобразования АЦП
Формула преобразования АЦП

Где Vin - это напряжение на выбранном входном контакте, а Vref - выбранное опорное напряжение.

Шаг 4: Как настроить АЦП в ATmega8?

Как настроить АЦП в ATmega8?
Как настроить АЦП в ATmega8?

Следующие регистры используются для реализации АЦП в ATmega8

Выбор мультиплексора АЦП

Шаг 5: выбор ADLAR

Выбор ADLAR
Выбор ADLAR
Выбор ADLAR
Выбор ADLAR

Результат настройки АЦП влево Бит ADLAR влияет на представление результата преобразования АЦП в регистре данных АЦП. Напишите один в ADLAR, чтобы слева отрегулировать результат. В противном случае результат корректируется правильно

Когда преобразование АЦП завершено, результат находится в ADCH и ADCL. Когда ADCL считывается, регистр данных АЦП не обновляется до тех пор, пока не будет считан ADCH. Следовательно, если результат остается скорректированным и требуется не более 8-битной точности, достаточно прочитать ADCH. В противном случае сначала нужно прочитать ADCL, а затем ADCH. Биты выбора аналогового канала Значение этих битов определяет, какие аналоговые входы подключены к АЦП.

Шаг 6: выбор ADCSRA

Выбор ADCSRA
Выбор ADCSRA
Выбор ADCSRA
Выбор 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;

}

Сначала опубликуйте этот учебник Щелкните здесь

Рекомендуемые: