Подсистема ввода аналоговых сигналов МК

Аналого-цифровой преобразователь (Analog-to-Digital Converter) фор­мирует десятиразрядный двоичный код числа, пропорционального вели­чине напряжения аналогового сигнала на входе микроконтроллера. В микроконтроллерах AVR к преобразователю могут подключаться до восьми входов микроконтроллера.

Отличительные особенности:

· 10-разрядное разрешение.

· Интегральная нелинейность 0.5 мл. разряда.

· Абсолютная погрешность ±2 мл. разряда.

· Время преобразования 65 - 260 мкс.

· Частота преобразования до 15 тыс. преобразований в сек. при максимальном разрешении.

· 8 мультиплексированных однополярных входов.

· 7 дифференциальных входных каналов.

· 2 дифференциальных входных канала с опциональным усилением на 10 и 200.

· Представление результата с левосторонним или правосторонним выравниванием в 16-разрядном слове.

· Диапазон входного напряжения АЦП 0…VCC.

· Выборочный внутренний ИОН на 2.56 В.

· Режимы одиночного преобразования и автоматического перезапуска.

· Прерывание по завершении преобразования АЦП.

· Механизм подавления шумов в режиме сна.

ATmega128 содержит 10-разрядный АЦП последовательного приближения. АЦП связан с 8-канальным аналоговым мультиплексором, 8 однополярных входов которого связаны с линиями порта F. Общий входных сигналов должен иметь потенциал 0В (т.е. связан с GND). АЦП также поддерживает ввод 16 дифференциальных напряжений. Два дифференциальных входа (ADC1, ADC0 и ADC3, ADC2) содержат каскад со ступенчатым программируемым усилением: 0 дБ (1x), 20 дБ (10x), или 46 дБ (200x). Семь дифференциальных аналоговых каналов используют общий инвертирующий вход (ADC1), а все остальные входы АЦП выполняют функцию неинвертирующих входов. Если выбрано усиление 1x или 10x, то можно ожидать 8-разрядное разрешение, а если 200x, то 7-разрядное.

АЦП содержит УВХ (устройство выборки-хранения), которое поддерживает на постоянном уровне напряжение на входе АЦП во время преобразования.

АЦП имеет отдельный вывод питания AVCC (аналоговое питание). AVCC не должен отличаться более чем на ± 0.3В от VCC. В качестве внутреннего опорного напряжения может выступать напряжение от внутреннего ИОНа на 2.56В или напряжение AVCC. Если требуется использование внешнего ИОН, то он должен быть подключен к выводу AREF с подключением к этому выводу блокировочного конденсатора для улучшения шумовых характеристик.

Принцип действия АЦП. АЦП преобразовывает входное аналоговое напряжение в 10-разрядный код методом последовательных приближений. Минимальное значение соответствует уровню GND, а максимальное - уровню AREF минус 1 младший разряд. К выводу AREF опционально может быть подключено напряжение AVCC или внутренний ИОН на 1.22В путем записи соответствующих значений в биты REFSn в регистр ADMUX. Несмотря на то, что ИОН на 2.56В находится внутри микроконтроллера, к его выходу может быть подключен блокировочный конденсатор для снижения чувствительности к шумам, т.к. он связан с выводом AREF.

Канал аналогового ввода и каскад дифференциального усиления выбираются путем записи бит MUX в регистр ADMUX. В качестве однополярного аналогового входа АЦП может быть выбран один из входов ADC0…ADC7, а также GND и выход фиксированного источника опорного напряжения 1,22 В. В режиме дифференциального ввода предусмотрена возможность выбора инвертирующих и неинвертирующих входов к дифференциальному усилителю.

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

Работа АЦП разрешается путем установки бита ADEN в регистре ADCSRA. Выбор опорного источника и канала преобразования не возможно выполнить до установки ADEN. Если ADEN = 0, то АЦП не потребляет ток, поэтому, при переводе в экономичные режимы сна рекомендуется предварительно отключить АЦП.

АЦП генерирует 10-разрядный результат, который помещается в пару регистров данных АЦП ADCH и ADCL. По умолчанию результат преобразования размещается в младших 10-ти разрядах 16-разрядного слова (выравнивание справа), но может быть опционально размещен в старших 10-ти разрядах (выравнивание слева) путем установки бита ADLAR в регистре ADMUX.

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

АЦП генерирует собственный запрос на прерывание по завершении преобразования. Если между чтением регистров ADCH и ADCL запрещен доступ к данным для АЦП, то прерывание возникнет, даже если результат преобразования будет потерян.

Запуск преобразования. Одиночное преобразование запускается путем записи 1 в бит запуска преобразования АЦП ADSC. Данный бит остается в высоком состоянии в процессе преобразования и сбрасывается по завершении преобразования. Если в процессе преобразования переключается канал аналогового ввода, то АЦП автоматически завершит текущее преобразование прежде, чем переключит канал.

В режиме автоматического перезапуска АЦП непрерывно оцифровывает аналоговый сигнал и обновляет регистр данных АЦП. Данный режим задается путем записи 1 в бит ADFR регистра ADCSRA. Первое преобразование инициируется путем записи 1 в бит ADSC регистра ADCSRA. В данном режиме АЦП выполняет последовательные преобразования, независимо от того сбрасывается флаг прерывания АЦП ADIF или нет.

Если требуется максимальная разрешающая способность (10 разрядов), то частота на входе схемы последовательного приближения должна быть в диапазоне 50…200 кГц. Если достаточно разрешение менее 10 разрядов, но требуется более высокая частота преобразования, то частота на входе АЦП может быть установлена свыше 200 кГц.

Модуль АЦП содержит предделитель, который формирует производные частоты свыше 100 кГц по отношению к частоте синхронизации CPU. Коэффициент деления устанавливается с помощью бит ADPS в регистре ADCSRA. Предделитель начинает счет с момента включения АЦП установкой бита ADEN в регистре ADCSRA. Предделитель работает пока бит ADEN=1 и сброшен, когда ADEN=0.

Если инициируется однополярное преобразование установкой бита ADSC в регистре ADCSRA, то преобразование начинается со следующего нарастающего фронта тактового сигнала АЦП.

Нормальное преобразование требует 13 тактов синхронизации АЦП. Первое преобразование после включения АЦП (установка ADEN в ADCSRA) требует 25 тактов синхронизации АЦП за счет необходимости инициализации аналоговой схемы.

После начала нормального преобразования на выборку-хранение затрачивается 1.5 такта синхронизации АЦП, а после начала первого преобразования – 13,5 тактов. По завершении преобразования результат помещается в регистры данных АЦП и устанавливается флаг ADIF. В режиме одиночного преобразования одновременно сбрасывается бит ADSC. Программно бит ADSC может быть снова установлен и новое преобразование будет инициировано первым нарастающим фронтом тактового сигнала АЦП.

В режиме автоматического перезапуска новое преобразование начинается сразу по завершении предыдущего, при этом ADSC остается в высоком состоянии.

Изменение канала или выбор опорного источника. Биты MUXn и REFS1:0 в регистре ADMUX поддерживают одноступенчатую буферизацию через временный регистр. Этим гарантируется, что новые настройки канала преобразования и опорного источника вступят в силу в безопасный момент для преобразования. До начала преобразования любые изменения канала и опорного источника вступаю в силу сразу после их модификации. Как только начинается процесс преобразования доступ к изменению канала и опорного источника блокируется, чем гарантируется достаточность времени на преобразование для АЦП. Непрерывность модификации возвращается на последнем такте АЦП перед завершением преобразования (перед установкой флага ADIF в регистре ADCSRA). Обратите внимание, что преобразование начинается следующим нарастающим фронтом тактового сигнала АЦП после записи ADSC. Таким образом, пользователю не рекомендуется записывать новое значение канала или опорного источника в ADMUX до 1-го такта синхронизации АЦП после записи ADSC.

Особые меры необходимо предпринять при изменении дифференциального канала. Как только осуществлен выбор дифференциального канала усилительному каскаду требуется 125 мкс для стабилизации нового значения. Следовательно, в течение первых после переключения дифференциального канала 125 мкс не должно стартовать преобразование. Если же в этот период преобразования все-таки выполнялись, то их результат необходимо игнорировать.

Такую же задержку на установление необходимо ввести при первом дифференциальном преобразовании после изменения опорного источника АЦП (за счет изменения бит REFS1:0 в ADMUX).

Если разрешена работа интерфейса JTAG, то функции каналов АЦП на выводах порта F 7…4 отменяется.

Входные каналы АЦП. При переключении входного канала необходимо учесть некоторые рекомендации, которые исключат некорректность переключения.

В режиме одиночного преобразования переключение канала необходимо выполнять перед началом преобразования. Переключение канала может произойти только в течение одного такта синхронизации АЦП после записи 1 в ADSC. Однако самым простым методом является ожидание завершения преобразования перед выбором нового канала.

В режиме автоматического перезапуска канал необходимо выбирать перед началом первого преобразования. Переключение канала происходит аналогично - в течение одного такта синхронизации АЦП после записи 1 в ADSC. Но самым простым методом является ожидание завершения первого преобразования, а затем переключение канала. Поскольку следующее преобразование уже запущено автоматически, то следующий результат будет соответствовать предыдущему каналу. Последующие преобразования отражают результат для нового канала.

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

Источник опорного напряжения АЦП. Источник опорного напряжения (ИОН) для АЦП (VИОН) определяет диапазон преобразования АЦП. Если уровень однополярного сигнала выше VИОН, то результатом преобразования будет 0x3FF. В качестве VИОН могут выступать AVCC, внутренний ИОН 2,56В или внешний ИОН, подключенный к выводу AREF. AVCC подключается к АЦП через пассивный ключ. Внутреннее опорное напряжение 2,56В генерируется внутренним эталонным источником VBG, буферизованного внутренним усилителем. В любом случае внешний вывод AREF связан непосредственно с АЦП и, поэтому, можно снизить влияние шумов на опорный источник за счет подключения конденсатора между выводом AREF и общим. Напряжение VИОН также может быть измерено на выводе AREF высокоомным вольтметром. Обратите внимание, что VИОН является высокоомным источником и, поэтому, внешне к нему может быть подключена только емкостная нагрузка.

Если пользователь использует внешний опорный источник, подключенный к выводу AREF, то не допускается использование другой опции опорного источника, т.к. это приведет к шунтированию внешнего опорного напряжения. Если к выводу AREF не приложено напряжение, то пользователь может выбрать AVCC и 2.56В качестве опорного источника. Результат первого преобразования после переключения опорного источника может характеризоваться плохой точностью и пользователю рекомендуется его игнорировать.

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

1. Убедитесь, что работа АЦП разрешена и он не выполняет преобразования. Выберите режим одиночного преобразования и разрешите прерывание по завершении преобразования.

2. Введите режим уменьшения шумов АЦП (или режим холостого хода). АЦП запустит преобразование, как только остановится CPU.

3. Если до завершения преобразования не возникает других прерываний, то АЦП вызовет прерывание CPU и программа перейдет на вектор обработки прерывания по завершении преобразования АЦП. Если до завершения преобразования другое прерывание пробуждает микроконтроллер, то это прерывание обрабатывается, а по завершении преобразования генерируется соответствующий запрос на прерывание. АЦП остается в активном режиме пока не будет выполнена очередная команда sleep.

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

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

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

По отношению к каналам с дифференциальным усилением рекомендуется использовать сигналы с внутренним сопротивлением до нескольких сотен кОм. Следует предусмотреть, чтобы в предварительных каскадах формирования аналогового сигнала ко входу АЦП не вносились частоты выше fАЦП/2, в противном случае результат преобразования может быть некорректным. Если вероятность проникновения высоких частот существует, то рекомендуется перед АЦП установить фильтр низких частот.

Технология подавления шума ADC. Работа цифровых узлов внутри и снаружи микроконтроллера связана с генерацией электромагнитных излучений, которые могут негативно сказаться на точность измерения аналогового сигнала. Если точность преобразования является критическим параметром, то уровень шумов можно снизить, придерживаясь следующих рекомендаций:

1. Линии подключения аналоговых сигналов необходимо выполнить как можно короче и чтобы они проходили над плоскостью (слоем) с аналоговой землей (экраном), а также далеко от проводников, передающих высокочастотные цифровые сигналы.

2. Вывод AVCC необходимо связать с цифровым питанием VCC через LC (RC)-цепь в соответствии с рис. 2.24.

3. Используйте функцию подавления шумов АЦП, внесенных работой ядра CPU.

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


Рис. 2.24. Подключение питания АЦП

Регистр мультиплексора – ADMUX.

Биты7, 6 - REFS1, REFS0. Выбор источник опорного напряжения АЦП (табл. 2.43)

 

 

Таблица 2.43. Выбор источник опорного напряжения АЦП.

REFS1 REFS0 Источник опорного напряжения
AREF, внутренний VИОН отключен
AVCC с внешним конденсатором на выводе AREF
Зарезервировано
Внутренний источник опорного напряжения 2.56 В с внешним конденсатором на выводе AREF

 

Бит5–ADLAR. Бит управления представлением результата преобразования.

Бит ADLAR влияет на представление результата преобразования в паре регистров результата преобразования АЦП. Если ADLAR=1, то результат преобразования будет иметь левосторонний формат, в противном случае - правосторонний. Действие бита ADLAR вступает в силу сразу после преобразования, независимо от выполняющегося параллельно преобразования (см. форматы регистров данных АЦП - ADCL и ADCH).

Биты4:0 – MUX4:0. Биты выбора аналогового канала и коэффициента усиления (табл. 2.44).

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

 

Таблица 2.44. Выбор входного канала и коэффициента усиления

 

MUX4..0 Однополярный вход Неинвертирующий дифференциальный вход Инвертирующий дифференциальный вход Коэффициент усиления, Ку
ADC0 Нет
ADC1
ADC2
ADC3
ADC4
ADC5
ADC6
ADC7
Нет   ADC0 ADC0
ADC1 ADC0
ADC0 ADC0
ADC1 ADC0
ADC2 ADC2
ADC3 ADC2
ADC2 ADC2
ADC3 ADC2
ADC0 ADC1
ADC1 ADC1
ADC2 ADC1
ADC3 ADC1
ADC4 ADC1
ADC5 ADC1
ADC6 ADC1
ADC7 ADC1
ADC0 ADC2
ADC1 ADC2
ADC2 ADC2
ADC3 ADC2
ADC4 ADC2
  ADC5 ADC2
1.23В (VBG) NA
0 В(GND)
           

 

Регистр А управления и статуса АЦП – ADCSRA

Разряд
  ADEN ADSC ADFR ADIF ADIE ADPS2 ADPS1 ADPS0
W/R W/R W/R W/R W/R W/R W/R W/R W/R
Исходное значение

 

Бит7 – ADEN. Разрешение работы АЦП.

Запись в данный бит 1 разрешает работу АЦП. Если в данный бит записать 0, то АЦП отключается, даже если он находился в процессе преобразования.

Бит6 – ADSC. Запуск преобразования АЦП.

В режиме одиночного преобразования установка данного бита инициирует старт каждого преобразования. В режиме автоматического перезапуска установкой этого бита инициируется только первое преобразование, а все остальные выполняются автоматически. Первое преобразование после разрешения работы АЦП, инициированное битом ADSC, выполняется по расширенному алгоритму и длится 25 тактов синхронизации АЦП, вместо обычных 13 тактов. Это связано с необходимостью инициализации АЦП.

В процессе преобразования при опросе бита ADSC возвращается 1, а по завершении преобразования – 0. Запись 0 в данный бит не предусмотрено и не оказывает никакого действия.

Бит5 – ADFR. Выбор режима автоматического перезапуска АЦП.

Если в данный бит записать 1, то АЦП перейдет в режим автоматического перезапуска. В этом режиме АЦП автоматически выполняет преобразования и модифицирует регистры результата преобразования через фиксированные промежутки времени. Запись 0 в этот бит прекращает работу в данном режиме.

Бит4 – ADIF. Флаг прерывания АЦП.

Данный флаг устанавливается после завершения преобразования АЦП и обновления регистров данных. Если установлены биты ADIE и I (регистр SREG), то происходит прерывание по завершении преобразования. Флаг ADIF сбрасывается аппаратно при переходе на соответствующий вектор прерывания. Альтернативно флаг ADIF сбрасывается путем записи 1 в него. Обратите внимание, что при выполнении команды «чтение-модификация-запись» с регистром ADCSRA ожидаемое прерывание может быть отключено. Данное также распространяется на использование инструкций SBI и CBI.

Бит3 – ADIE. Разрешение прерывания АЦП.

После записи 1 в этот бит, при условии, что установлен бит I в регистре SREG, разрешается прерывание по завершении преобразования АЦП.

Биты 2:0 – ADPS2:0. Биты управления предделителем АЦП.

Данные биты определяют, на какое значение тактовая частота CPU будет отличаться от частоты входной синхронизации АЦП (Табл. 2.45)

Таблица 2.45. Управление предделителем АЦП

ADPS2 ADPS1 ADPS0 Коэффициент деления

 

Регистры данных АЦП – ADCL и ADCH.

Формат данных при ADLAR = 0.

Разряд
ADCH - - - - - - ADC9 ADC8
ADCL ADC7 ADC6 ADC5 ADC4 ADC3 ADC2 ADC1 ADC0
Разряд
W/R R R R R R R R R
Исходное значение

Формат данных при ADLAR = 1.

Разряд
ADCH ADC9 ADC8 ADC7 ADC6 ADC5 ADC4 ADC3 ADC2
ADCL ADC1 ADC0 - - - - - -
 
W/R R R R R R R R R
Исходное значение

 

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

Левосторонний формат представления результата удобно использовать, если достаточно 8 разрядов. В этом случае 8-разрядный результат хранится в регистре ADCH и, следовательно, чтение регистра ADCL можно не выполнять. При правостороннем формате необходимо сначала считать ADCL, а затем ADCH.

Результат преобразования АЦП. По завершении преобразования (ADIF=1) результат может быть считан из пары регистров результата преобразования АЦП (ADCL, ADCH).

Для однополярного преобразования: , где VВХ – уровень напряжения на подключенном к АЦП входу; Vион –напряжение выбранного источника опорного напряжения. Код 0x000 соответствует уровню аналоговой земли, а 0x3FF - уровню напряжения ИОН минус 1 шаг квантования по напряжению.

При использовании дифференциального канала:

,

где: Vpos-напряжение на неинвертирующем дифференциальном входе ADC3, V NEG - напряжение на инвертирующем дифференциальном входе ADC2, GAIN – коэффициент усиления АЦП, VREF –напряжение ИОН.

Пример: Пусть ADMUX = 0xED (VИОН=2.56 В, результат с левосторонним выравниванием, Ку=10, пара входов ADC3 - ADC2), напряжение на входе ADC3 = 300 мВ, а на входе ADC2 = 500 мВ, тогда:

Код АЦП = 512 * 10 * (300 - 500) / 2560 = -400 = 0x270

С учетом выбранного формата размещения результата (левосторонний) ADCL = 0x00, а ADCH = 0x9C. Если же выбран правосторонний формат (ADLAR=0), то ADCL = 0x70, ADCH = 0x02.

Результат представляется в коде двоичного дополнения, начиная с 0x200 (-512d) до 0x1FF (+511d). При необходимости быстро определить полярность результата достаточно опросить старший бит результата преобразования (ADC9 в ADCH). Если данный бит равен 1, то результат отрицательный, если же 0, то положительный.

 

Пример программирования АЦП.

; Данная программа демонстрирует работу аналого-цифрового

; преобразователя. При этом вначале происходит инициализация

; АЦП, т.е. преобразование ведется по 0 каналу (PF0) после

; установки соответствующего бита.

; При возникновении прерывания

; происходит переход на подпрограмму обработки прерывания

; AD_CONV и запись данных в порт С

 

;*****************************************************

;подключение внешнего файла описания

.include "m128def.inc"

;определение переменных регистров

.def temp = r16

.def data_h= r18

 

;настройка векторов прерывания

.cseg

.org 0x000

rjmp RESET ;прерывание после сброса

 

.org $002A

rjmp AD_CONV ;прерывание по окончании преобразования ;*****************************************************

 

;начало инициализации

Reset:

 

;инициализация стека

ldi temp, low(RAMEND)

out SPL,temp

ldi temp, high(RAMEND)

out SPH,temp

;*****************************************************

Sei ;разрешение прерывания (I=1 в регистре SREG МК)

ldi temp, 0xff ;настройка порта С на вывод

out ddrc,temp

;*****************************************************

;инициализация АЦП

; REFS1, REFS0=11 Внутренний ИОН 2.56 В,

;ADLAR = 1 - левосторонний формат представления

;результата преобразования;

;MUX4:0- 00000 выбор нулевого канала АЦП (вход PF0), ;коэффициента усиления (значение - $E0)

 

ldi temp,0xe0

out admux,temp ; загрузка $e0 в регистр admux

 

;(ADEN=1 разрешение работы АЦП, ADSC=1 запуск ;АЦП, ADFR=0-выбор режима однократного запуска ;АЦП, ADIF-флаг прерывания устанавливается после

;завершения преобразования АЦП, ADIE=1- разрешение ;прерывания АЦП, ADPS2:0 =000 -биты управления ;предделителем (коэффициент деления равно 2).

 

ldi temp,0xc8

out adcsra,temp ; загрузка $c8 в регистр adcsra

 

;***************************************************

;цикл ожидания

loop:

nop

nop

rjmp loop

;***************************************************

;подпрограмма обслуживания АЦП

AD_CONV:

in data_h, adch ;загрузка старшего байта результата

out portc, data_h ;

ldi temp,0xc8 ;разрешение работы,

;разрешение прерывания и запуск

out adcsra,temp

reti ;возврат

 

 

 

Рис. 2.25. Схема подключения источников аналоговых

сигналов к МК

Контрольные вопросы

1. Перечислите основные блоки подсистемы аналогового ввода сигналов.

2. Основные параметры АЦП.

3. От чего зависит точность преобразования аналогового сигнала в цифровой код?

4. Режимы работы АЦП. В чем их отличие?

5. Источник опорного напряжения (ИОН) и его назначение.

6. Как выбрать ИОН АЦП?

7. Каким образом можно регулировать скорость преобразования?

8. Как выбрать канал ввода аналогового сигнала?

9. Назначение подавителя шумов АЦП.

10. Как определяется результат однополярного преобразования? Приведите пример.

11. Регистр мультиплексора ADMUX. Назначение битов регистра ADMUX.

12. Приведите пример формирования значения регистра и фрагмент программы записи значения в регистр ADMUX.

13. Что означает «левосторонний» и «правосторонний» форматы представления результата преобразования АЦП?

14. Назначение битов регистра А управления и статуса АЦП – ADCSRA. Приведите примеры использования регистра.

15. Приведите команды обращения к регистру управления и статуса ADCSRA АЦП.

16. Для чего используется флаг прерывания АЦП? Приведите программу инициализации АЦП и управления преобразованием в режиме приоритетного прерывания.

 

Аналоговый компаратор

Аналоговый компаратор сравнивает уровни напряжений на неинвертирующем входе AIN0 и инвертирующем входе AIN1. Если напряжение на неинвертирующем входе AIN0 превышает напряжение на инвертирующем входе AIN1, то выход аналогового компаратора ACO принимает единичное состояние. Выход компаратора может быть настроен для использования в качестве источника входного сигнала для схемы захвата фронтов таймера-счетчика 1. Кроме того, компаратор может генерировать собственный запрос на обработку прерывания. Пользователь может выбрать несколько событий, по которым возникает прерывание: нарастающий, падающий фронт на выходе компаратора или любое его изменение.

Регистр состояния и управления аналогового компаратора – ACSR.

Разряд
ACD ACBG ACO ACI ACIE ACIC ACIS1 ACIS0
W/R W/R W/R R W/R W/R W/R W/R W/R
Начальное ззначение x


Бит 7 – ACD. Отключение аналогового компаратора. Запись в данный разряд 1 приводит к снятию питания с аналогового компаратора. Данный разряд можно устанавливать в любой момент при необходимости отключения аналогового компаратора. Его использование позволяет снизить энергопотребление в активном режиме и режиме холостого хода. Перед изменением бита ACD необходимо отключить прерывание по аналоговому компаратору путем сброса бита ACIE в регистре ACSR. В противном случае может возникнуть прерывание после изменения значения данного бита.

Бит 6 – ACBG. Подключение источника опорного напряжения к аналоговому компаратору. После установки данного бита к неинвертирующему входу компаратора подключается источник опорного напряжения. После сброса данного разряда неинвертирующий вход компаратора связан с выводом AIN0 микроконтроллера.

Бит 5 – ACO. Выход аналогового компаратора. Данный бит выхода аналогового компаратора связан непосредственно с выходом ACO через цепь синхронизации. Синхронизация реализована как временная задержка на 1 – 2 машинных цикла.

Бит 4 – ACI. Флаг прерывания аналогового компаратора. Данный разряд устанавливается аппаратно, при возникновении события в соответствии с установками бит ACIS1 и ACIS0. Запрос на обработку прерывания аналогового компаратора выполняется, если установлены биты ACIE в регистре ACSR и I в регистре SREG. ACI сбрасывается аппаратно при переходе на соответствующий вектор обработки прерывания. Альтернативно, бит ACI можно сбросить программно путем записи 1 в данный флаг.

Бит 3 – ACIE. Разрешение прерывания аналогового компаратора. При установленном бите ACIE в регистре ACSR и установленном бите I в регистре статуса SREG, прерывание по аналоговому компаратору активизируется. Сброс бита приводит к отключению прерывания.

Бит 2 – ACIC. Подключение аналогового компаратора к схеме захвата фронтов. Установка данного разряда приводит к разрешению совместной работы схемы захвата фронтов таймера-счетчика 1 и аналогового компаратора. В этом случае, выход аналогового компаратора непосредственно подключен к входному каскаду схемы захвата фронтов, позволяя к компаратору добавить функции подавления шумов и настройки фронтов прерывания по захвату фронта таймером-счетчиком 1. После записи в данный разряд 0 связь между аналоговым компаратором и схемой захвата фронтов разрывается. Для активизации прерывания схемы захвата фронтов таймера-счетчика 1 по срабатыванию аналогового компаратора необходимо установить бит TICIE1 в регистре маски прерывания таймера (TIMSK).

Биты 1, 0 – ACIS1, ACIS0. Выбор события прерывания аналогового компаратора. Данные разряды определяют, какое событие приводит к генерации запроса на прерывание аналогового компаратора. Варианты установок данных разрядов и их назначение представлены в табл. 2.46.

Таблица 2.46. Установки разрядов ACIS1, ACIS0

ACIS1 ACIS0 Событие
Прерывание по любому изменению на выходе компаратора
Зарезервировано
Прерывание по падающему фронту на выходе компаратора
Прерывание по нарастающему фронту на выходе компаратора

 

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

Имеется возможность использовать выводы ADC7..0 в качестве неинвертирующих входов аналогового компаратора. Для организации такого ввода используется мультиплексор АЦП и, следовательно, в этом случае АЦП должен быть отключен. Если установлен бит разрешения подключения мультиплексора к аналоговому компаратору (бит ACME в регистре специальных функций ввода-вывода – SFIOR) и выключен АЦП (ADEN=0 в регистре ADCSRA), то состояние разрядов MUX2..0 регистра ADMUX определяют, какой вывод микроконтроллера подключен к неинвертирующему входу аналогового компаратора (см. табл. 2.47). Если ACME сброшен или установлен ADEN, то в качестве неинвертирующего входа аналогового компаратора используется вывод микроконтроллера AIN1.

Таблица 2.47. Мультиплексированный вход аналогового компаратора

ACME ADEN MUX2..0 Неинвертирующий вход аналогового компаратора
x xxx AIN1
xxx AIN1
ADC0
ADC1
ADC2
ADC3
ADC4
ADC5
ADC6
ADC7

 

Контрольные вопросы

1. Назначение и принцип работы аналогового компаратора.

2. Приведите пример использования аналогового компаратора.

3. Назначение битов регистра состояния и управления аналогового компаратора – ACSR.

4. Приведите условия обработки сигнала прерывания аналогового компаратора.

5. Как можно использовать выводы ADC7,...,0 МК в качестве неинвертирующих входов аналогового компаратора?