АЦП включается установкой бита 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 разрядам.
