123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- АЦП включается установкой бита ADEN (бит 7) в регистре управления АЦП -
- ADCSR (или ADCSRA)
- Режим непрерывных измерений активизируется установкой бита ADFR (бит 5)
- этого же регистра.
- В ряде моделей Mega (к ним относится ATmega8535) этот бит носит
- наименование ADATE, и управление режимом работы производится сложнее: там
- добавляются несколько режимов запуска через различные прерывания (в т. ч.
- прерывание от компаратора, при наступлении различных событий от таймера и
- т. п.), и выбирать их следует, задавая биты ADTS регистра SFIOR, а
- установка бита ADATE разрешает запуск АЦП по этим событиям. Так как нулевые
- значения всех битов ADTS (по умолчанию) означают режим непрерывного
- преобразования, то в случае, когда вы их значения не трогали, функции битов
- ADATE и ADFR в других моделях будут совпадать.
- Если выбран режим запуска не от внешнего источника, то преобразование
- запускается установкой бита adcs (бит 6 того же регистра adcsr/adcsra). При
- непрерывном режиме установка этого бита запустит первое преобразование,
- затем они будут автоматически повторяться. В режиме однократного
- преобразования, а также независимо от установленного режима при запуске
- через прерывания (в тех моделях, где это. возможно) установка бита adcs
- просто запускает одно преобразование. При наступлении прерывания,
- запускающего преобразование, бит adcs устанавливается аппаратно. Отметив,
- что преобразование начинается по фронту первого тактового импульса
- (тактового сигнала АЦП, а не самого контроллера!) после установки adcs.
- Само преобразование занимает 13 (или 14 для дифференциального входа)
- периодов тактового сигнала АЦП, кроме первого после включения АЦП
- преобразования, которое займет 25 тактов.
- По окончании одиночного преобразования бит adcs аппаратно сбрасывается.
- Кроме того, по окончании любого преобразования (и в одиночном, и в
- непрерывном режиме) устанавливается бит adif (бит 4, флаг прерывания).
- Разрешение прерывания АЦП осуществляется установкой бита adie (бит 3) все
- того же регистра adcsr/adcsra.
- Для работы с АЦП необходимо еще установить его тактовую частоту. Это
- делается тремя младшими битами регистра adcsr/adcsra под названием
- adps0..2. Коэффициент деления частоты тактового генератора МК
- устанавливается по степеням двойки, все нули в этих трех битах
- соответствуют коэффициенту 2, все единицы - 128. Напомним, что оптимальная
- частота преобразования лежит в диапазоне 50-200 кГц, так что, например,
- для тактовой частоты МК, равной 4 МГц, коэффициент может иметь значение
- только 32 (состояние битов adpso...2 = 101, частота 125 кГц) или 64
- (состояние битов adpso...2 = 110, частота 62,5 кГц). При тактовой частоте
- 16 МГц в допустимый диапазон укладывается только коэффициент 128.
- Выборка источника опорного напряжения производится битами REFS1..0 регистра
- ADMUX (старшие биты 7 и 6), причем их нулевое значение (по умолчанию)
- соответствует внешнему источнику. Напряжение этого внешнего источника может
- лежать в пределах от 2 В до напряжения питания аналоговой части AVCC (а
- оно, в свою очередь, не должно отличаться от питания цифровой части более
- чем на 0,3 В в большую или меньшую сторону). Можно выбрать в качестве
- опорного и питание самой аналоговой части, причем двояким способом: либо
- просто соединить выводы AREF и AVCC микросхемы, либо установить биты
- refs1..0 в состояние 01 (тогда соединение осуществляется внутренними
- схемами, но заметим, что внешний опорный источник при этом должен быть
- отключен). Предусмотрен и встроенный источник (задается refs1..0 в
- состоянии 11, при этом к выводу AREF рекомендуется подключать фильтрующий
- конденсатор), имеющий номинальное напряжение 2,56 В с большим разбросом от
- 2,4 до 2,7 В.
- Результат преобразования АЦП оказывается в регистрах adch:adcl. Поскольку
- результат 10-разрядный, то по умолчанию старшие 6 битов в регистре adch
- оказываются равными нулю. Чтение этих регистров производится, начиная с
- младшего adcl, после чего регистр adch блокируется, пока не будет прочитан.
- Следовательно, даже если момент между чтением регистров попал на фронт
- 14(15) такта АЦП, когда данные в них должны меняться, значения прочитанной
- пары будут соответствовать друг другу, пусть и результат этого
- преобразования пропадет. В противоположном порядке читать эти регистры не
- рекомендуется. Но бит adlar (бит 5 регистра admux) предоставляет интересную
- возможность: если его установить в 1, то результат преобразования в
- регистрах adch:adcl выравнивается влево: бит 9 результата окажется в
- старшем бите adch, а незначащими будут младшие 6 битов регистра adcl. В
- этом случае, если хватает 8-разрядного разрешения результата, можно
- прочесть только значение adch.
- Выбор каналов и режимов их взаимодействия в АЦП производится пятью битами
- MUX0..4 в регистре admux. В некоторых моделях (семейство Tiny) этих битов
- всего три (MUX0..2), а, например, в ATmega8 - четыре (MUX0..3), в
- зависимости от общего числа каналов, В любом случае их значения от 0 до
- максимального номера канала (которых в большинстве случаев 8, так что
- значения оказываются в пределах от 000 до 111, старшие биты, если они есть,
- равны 0) выбирают нужный канал в обычном (недифференциальном) режиме, когда
- измеряемое напряжение отсчиты- вается от "земли" (аналоговой). А последние
- два значения этих битов для семейства Mega (11110 и 11111 в большинстве
- моделей или 1110 и 1111 для ATmega8) выбирают режимы, когда вход АЦП
- подсоединяется к опорному источнику компаратора (1,22 В) или к "земле"
- соответственно, что может использоваться для автокалибровки устройства. В
- имеющих АЦП моделях Tiny (а также в "классическом" AT90S8535) такого режима
- нет.
- Наконец, остальные комбинации разрядов MUX предназначены для установки
- различных дифференциальных режимов - в тех моделях, где они присутствуют, в
- других случаях эти биты зарезервированы (как в моделях Atmega8, ATmegal63 и
- др.). В дифференциальном режиме АЦП измеряет напряжение между двумя
- выбранными выводами (например, между ADC0 и ADC1), причем не все выводы
- могут быть в таком режиме задействованы. В том числе дифференциальные входы
- АЦП можно подключать к одному и тому же входу для коррекции нуля. Дело в
- том, что в ряде моделей на входе АЦП имеется встроенный усилитель, с
- коэффициентом 1х, 20х и 100х (коэффициент выбирается теми же битами
- MUX0..4), и такой режим используется для его калибровки — в дальнейшем
- значение выхода при соединенных входах можно просто вычесть.
- Для недифференциального режима АЦП, когда напряжение отсчитывается от
- "земли", результат преобразования определяется формулой: Ка = 1024Uвх/Uref,
- где Ка — значение выходного кода АЦП, Uвх и Uref - входное и опорное
- напряжения. Дифференциальному измерению соответствует такая формула: Ка =
- 512(Upos - Uneg)/Vref, где Upos и Uneg - напряжения на положительном и
- отрицательном входах соответственно. Если напряжение на отрицательном входе
- больше, чем на положительном, то результат в дифференциальном режиме
- становится отрицательным и выражается в дополнительном коде от $200 (-512)
- до $3FF (-1). Реальная точность преобразования в дифференциальном режиме
- равна 8 разрядам.
|