Осваиваем микроконтроллеры на примере Atmega8
Программирование AVR. Первые шаги, или – что нам нужно иметь для того, чтобы
прошить и увидеть микроконтроллер в действии.
В рамках данной статьи мы не станем сильно погружаться в многообразие внутренних процессов и дебри архитектуры микроконтроллера. А основной нашей задачей будет являться – освоение азов практической работы с микроконтроллером и получение навыков для самостоятельной разработки и изготовления какого-либо интересующего нас электронного устройства.
В качестве подопытного предлагаю выбрать популярный и довольно высокопроизводительный 8-разрядный AVR микроконтроллер Atmega8 в удобном для наших целей 28-выводном DIP корпусе.
Итак, что нам нужно для полного счастья?
1. Простая и, в приоритете, бесплатная среда разработки, в которой можно посредством слов и цифр написать программу, а затем скомпилировать её, т. е. перевести на язык, понятный микроконтроллеру.
Одним из удачных примеров такой среды является Atmel Studio. Скачать эту программу не составит никакого труда, в том числе и на официальном сайте разработчика – https://www.microchip.com/.
2. Отладочная плата для микроконтроллера, желательно с DIP28 панелькой для микросхемы.

В комплект поставки входят:
– собственно, сама плата;
– Панелька DIP28;
– Кварцевый резонатор на 8 МГц;
– Разъём для подключения программатора;
– Разные деталюшки в виде: конденсаторов, резисторов, кнопок, светодиодов, т. е. всего того, что позволит легко запрограммировать и проверить микропроцессор в работе.
Можно, конечно, обойтись и без отладочной платы и произвести прошивку ATmega8 непосредственно в готовом устройстве, тем более что микропроцессор это сделать позволяет. Однако на практике произвести эти манипуляции заранее, а уже потом устанавливать микросхему по месту прописки оказывается значительно удобнее.
3. Программатор AVR USB, для того чтобы запрограммировать микроконтроллер, то есть перенести в него информацию с компьютера.

Программатор подсоединяется к USB порту компьютера, а другим своим концом к плате микроконтроллера.
Данное соединение осуществляется через ISP разъём кабеля, который также входит в комплект поставки.
Питание берётся от USB разъёма компьютера.
Работать программатор может под разными операционными системами, в том числе – под Windows.
Если тип приобретённого программатора не будет поддерживаться Atmel Studio, то придётся скачать и бесплатную программу прошивки микроконтроллеров, например, AVRDude.
4. Контактная макетная плата для монтажа без пайки.

Она без какого-либо напряга и паяльника позволит соединить любые электронные элементы обвеса микроконтроллера в единую конструкцию, превращая весь процесс создания схемы в увлекательную игру с конструктором LEGO.
Подобный набор, состоящий из беспаечной макетной платы и комплекта проводов, обойдётся не дороже 200 рублей.
5. Для того чтобы в процессе отладки не перепрошивать ATmega8 бесчисленное количество раз, жизненно необходима программа, позволяющая отладить прошивку без участия микроконтроллера.
Для этой цели как нельзя лучше подходит программа для автоматизированного проектирования электронных схем (в том числе и микроконтроллеров) – Proteus. Она значительно упрощает процесс отладки программы без участия микроконтроллера, ведь любой накопитель имеет конечное число перезаписей, хотя это число и достаточно большое.
6. Если написать и отладить программу для микроконтроллера можно и без его непосредственного участия, то, по-любому, рано или поздно встанет конкретный вопрос: «А на фига мы всё это делали?».
Поэтому хочешь, не хочешь, а приобрести ATmega8 нам также всё ж таки придётся. Стоит она на Али, как и всё остальное, довольно-таки гуманных денег – около 100 рублей за единицу продукции, поэтому кошелёк опорожнит не сильно, но уважительного к себе отношения потребует.
А теперь давайте-ка посмотрим: А что это за штука ATMEGA8 попала к нам в руки?

Рис.1 Внешний вид и назначение выводов Atmega8
У данного типа МК есть два типа питания – цифровое VCC (выв.7) и аналоговое AVCC (выв.20). В стандартном включении, когда на входы/выходы контроллера подаются логические 1 и 0, оба вывода питания соединяют (физически соединяются VCC и AVCC, поскольку GND выводы 8 и 22 уже замкнуты внутри ИМС через сопротивление 0,7 Ом). Однако при подключении нагрузки, эти земляные выводы необходимо замкнуть на плате, т. к. внутри они соединены тонким проводником, который при существенном токе не следует рассматривать как «перемычку».
Если используется встроенный АЦП, или входы/выходы задействованы для работы с аналоговыми сигналами, то для уменьшения помех производитель рекомендует использовать последовательный LC-фильтр по AVCC.
Между выводами питания и землёй (в непосредственной близости от выводов питания микросхемы) всегда следует устанавливать керамические конденсаторы ёмкостью 0,1 Мкф, которые обычно называют блокировочными конденсаторами.
Ещё один непомеченный цветом вывод (Рис.1) – 21 вывод (AREF).
AREF означает Analog Reference и является входом для подачи (при необходимости) опорного напряжения от внешнего источника питания.
Все раскрашенные выводы микроконтроллера (Рис.1) – это порты ввода-вывода, через которые микроконтроллер общается с внешним миром. У ATmega8 их три: PB0. PB7, PC0. PC6, PD0. PD7.
PB0. PB7 и PD0. PD7 – это полные, т. е. 8-разрядные порты, PC0. PC6 – неполный 7-разрядный порт, т. к. для полноты ему тупо не хватило лишнего вывода у микросхемы.
Каждый вывод порта может работать либо как вход, либо как выход. Для того чтобы выбрать режим работы ножки микроконтроллера необходимо прописать нужные биты в соответствующие регистры.
Однако есть у части портов ввода-вывода и специфические функции, прописанные в документации на микросхему. Давайте посмотрим, что это за функции:
1. Порты PB0. РВ7. Два вывода (РВ6 и PB7) используются для подключения кварцевого резонатора. Выводы РВ2. РВ5 зарезервированы для программирования МК. Таким образом, для общего применения остаются порты PB0 и PB1.
2. Порты PC0. РС6. Порты PC0. РС5 есть возможность использовать в качестве аналоговых входов. РС6 обычно используется для общего внешнего сброса настроек, т. е. перезагрузки прошивки МК.
3. Порты PD0. РD7. Эти порты можно использовать для общего применения.
Atmega8 выпускается с уже настроенным для использования встроенным RC-генератором с частотой 1МГц, который позволяет запустить МК без внешних элементов. Посредством конфигурационных манипуляций, значения этой частоты могут принимать также значения: 2, 4 и 8 MHz. Однако для решения многих задач стабильности RC-генератора оказывается явно недостаточно, в связи с чем для тактирования микроконтроллера используется внешний кварцевый резонатор.
Следует запомнить, что МК не является устройством, которое управляет большими мощностями, для этого есть транзисторы, тиристоры и прочие силовые элементы. Максимальный ток линии ввода/вывода составляет 40мА, максимальный суммарный ток по цепям питания и GND – 200мА.
И под занавес:
Основные технические параметры ATmega8:
А на следующих страницах будем осваивать язык программирования, а также запускать несложные устройства, выполненные на микроконтроллерах.
Программирование микроконтроллеров AVR с помощью Arduino на примере ATmega8
Далеко не во всех проектах целесообразно использовать Ардуинку целиком, иногда достаточно всего нескольких выводов микроконтроллера, да и интегрировать её в схему не всегда удобно. В таких случаях разумно совместить простоту и удобство среды программирования Arduino IDE и дешевизну и малый размер «голого» микроконтроллера, тем более, что прошивать такие МК можно непосредственно с помощью Ардуинки.
В семействе AVR огромное множество микроконтроллеров на любой вкус. Для стандарт tinyAVR (ATtinyxxx) характерны небольшое количество флеш-памяти (до 16 килобайт) и количество линий ввода-вывода в совокупности с низким энергопотреблением, а для стандарта megaAVR (ATmegaxxx) доступно уже до 256 килобайт памяти и до сотни портов ввода-вывода (зависит от модели МК), так же доступна расширенная система команд и периферийных устройств. Сегодня будем прошивать ATmega8, цифра 8 в названии говорит нам о том, что у этого микроконтроллера 8 килобайт встроенной памяти. На картинке ниже расписаны выводы микроконтроллера в DIP корпусе. Кстати у ATmega48/88/168/328 выводы расположены аналогичным образом.
Для прошивки нашего микроконтроллера понадобятся его порты последовательного периферийного интерфейса (SPI — Serial Peripheral Interface) — это синхронный протокол последовательной передачи данных, используемый для связи микроконтроллера с одним или несколькими периферийными устройствами. В нашем случае это выводы:
В первую очередь необходимо из ардуинки сделать программатор, в этом нет ничего сложного, нужно просто загрузить в неё код из готового примера «ArduinoISP».

После его загрузки в плату (кстати я буду использовать Arduino UNO для наглядности, но это не принципиально, можно и другую) в меню Инструменты — >>Программатор необходимо выбрать «Arduino as ISP».

Дальнейшие действия по подключению МК к Ардуинке описаны в комментариях к коду который мы в неё загрузили, а именно подключаем следующие пины:
Дополнительно подключим на нулевой цифровой выход ATmega8 (вторая ножка микросхемы) светодиод через токоограничивающий резистор на 220 Ом, для наглядного подтверждения того, что микроконтроллер работает.
// Put an LED (with resistor) on the following pins:
// 9: Heartbeat — shows the programmer is running
// 8: Error — Lights up if something goes wrong (use red if that makes sense)
// 7: Programming — In communication with the slave
Как видно из описания примера «Arduino ISP» к 7, 8 и 9-му пинам платы Ардуино можно подключить информационные светодиоды (через резисторы) отображающие ход работы программатора, но это по желанию.
Теперь почти всё готово, осталось только сообщить среде программирования, что именно мы собираемся прошивать. Для этого нужно добавить нашу ATmega8 в среду разработки Arduino IDE, тоесть нужно установить так называемое ядро, или как оно называется в самой IDE – плату.
MiniCore – ядро для поддержки микроконтроллеров ATmega328, ATmega168, ATmega88, ATmega48 и ATmega8, для его установки нажимаем Файл —>> Настройки и в открывшемся окне ищем строчку: «Дополнительные ссылки для менеджера плат:», в это поле необходимо ввести ссылку:
Далее заходим в Инструменты —>> Плата —>> Менеджер плат находим и устанавливаем нужное ядро.
После всех манипуляций в менеджере плат должно появиться следующее:

В качестве платы выбираем нашу ATmega8, параметр «Clock:» устанавливаем «Internal 8 MHz», так МК будет работать от внутреннего генератора.
Все готово! Теперь подключаем плату Ардуино к компьютеру и не забыв выбрать нужный COM порт, выбираем в меню «Инструменты» пункт «Записать загрузчик».
Теперь МК знает от какого генератора и на какой частоте ему работать, можно загружать в него свои программы. Для примера загрузим классическую мигалку, только поменяем порт вывода на нулевой (вторая нога МК), именно к нему по схеме мы подключили светодиод.
void setup() <
pinMode(0, OUTPUT);
>
void loop() <
digitalWrite(0, HIGH);
delay(1000);
digitalWrite(0, LOW);
delay(1000);
>
Загружать нужно не кнопкой как обычно, а через меню Скетч —>> Загрузить через программатор, если все сделано правильно, то светодиод начнет мигать.
В Arduino IDE можно прошить ATmega8 и без установки дополнительных плат, выбрав в качестве платы «Arduino NG or older» и в качестве процессора «aTmega8». Но в таком случае не будет возможности выбора от какого генератора (внешнего или внутреннего) и на какой частоте будет работать МК, а работать он будет от внешнего генератора на чистоте 16 MGz, и перезаписать его настройки в дальнейшем без подключения кварцевого резонатора к выводам 9 и 10 будет невозможно, будьте внимательны!
Ну и напоследок приведу ссылки на ядра для работы с микроконтроллерами серии ATtiny, устанавливаются они аналогично MiniCore:
ATMega8: зачем подключаться VCC и AVCC?
Я часто читал, что хорошей практикой является подключение VCC к AVCC. Даже в таблице ATMega8 он говорит так:
Но нигде я не могу найти объяснения по поводу почему они должны быть связаны. Простая схема для мигания светодиода работает без подключения VCC и AVCC.
Я просто должен принять это или есть веская причина?
5 ответов
В основном, он должен быть подключен, потому что производитель говорит, что он должен.
Кроме того, они должны полностью работать с чипом (все порты /контакты), чтобы предотвратить проблемы с плавающим штырем на стороне AVCC, чтобы предотвратить шум на цифровой стороне. Существуют проблемы, при которых отказ от сбоев на стороне AVCC вызывает паразитную подачу мощности и может дестабилизировать внутренние часы или может предотвратить стабильный запуск.
Хорошо, что вы просите причину!
AVCC определяется как независимый контакт, поскольку он подключается к основным аналоговым компонентам внутри и, как таковые, должен иметь отдельные фильтрующие конденсаторы.
Простые проекты «blinkenlights» не имеют требований к шуму и точности.
Теперь, если вы имеете в виду, если они должны быть подключены к одному и тому же НАПРЯЖЕНИЮ, ответ да в пределах +/- 0,3 В от VCC
«АЦП имеет отдельный аналоговый вывод напряжения питания AVCC. AVCC не должен отличаться более чем на ± 0,3 В от VCC». и «AVCC является пиком напряжения питания для АЦП»
Напомним: AVCC и VCC должны находиться на одинаковом напряжении (в пределах +/- 0,3 вольта), и он идентифицируется как отдельный контакт, чтобы позволить дизайнеру размещать дополнительные фильтры на этом входе, чтобы избежать шума из чувствительного A /D-преобразователь части IC.
Надеюсь, что это поможет!
Часто время, цифровое питание и штыри заземления будут в конечном итоге с небольшим количеством шума на них. Трудно устранить весь такой шум, когда цифровая схема переключает значительные объемы тока, а 150 мВ или около того шума питания вряд ли повлияет на схему, питаемую цифровыми штырьками питания. Тем не менее, наличие 150 мВ шума на аналоговых штыревых разъемах сделало бы очень трудным или невозможным для аналоговой схемы достичь точности доли процента. Тот факт, что аналоговые контакты разделены, означает, что можно принимать точные показания, даже если на цифровом источнике питания имеется шум 150 мВ, при условии, что цифровая подача не размахивается более чем на 300 мВ, а у одного есть аналоговое питание, которое где-то в пределах 300 мВ обеих крайностей диапазона цифрового питания. Устранение 99% шума от источника питания, который подает только штырь аналогового питания, и обеспечения того, что напряжение источника близко к цифровому напряжению питания, часто намного проще, чем устранение всех помех от цифрового питания.
Просто добавьте еще одну причину, по которой AVCC должен быть подключен даже в простых проектах.
Когда вы используете схему обнаружения Brown-out, которая опирается на справочное руководство по внутреннему напряжению, вы можете получить неожиданное поведение и ненадежный запуск устройства. Он может проявляться в виде странных порогов напряжения, запускающих сброс БПК или даже устройства, не начинающегося с правильного напряжения.
Я просто столкнулся с этой проблемой в одном из моих «быстрых и грязных» проектов взлома с использованием ATmega88P.
Причина связана с внутренним процессом устройства и его построением. Поскольку они указывают, что AVCC и VCC должны быть в пределах 0,3 В, это похоже на напряжение защиты внутренних диодов, используемых в чипах. Если диоды смещены выше 0,3 В (например, если AVCC не подключен), эти диоды могут работать, вызывая проблемы и, возможно, повреждая устройство.
Аналого-цифровой преобразователь микроконтроллеров AVR
Аналого-цифровые преобразователи (АЦП) являются устройствами, которые принимают входные аналоговые сигналы и генерируют соответствующие им цифровые сигналы, пригодные для обработки микропроцессорами и другими цифровыми устройствами. АЦП входит во многие современные модели МК AVR, он многоканальный. Обычно число каналов равно 8, но в разных моделях оно может варьировать от 4 каналов в младших моделях семейства Tiny, 6 в ATmega8, до 16 каналов в ATmega2560.
Многоканальность означает, что на входе единственного модуля АЦП установлен аналоговый мультиплексор, который может подключать этот вход к различным выводам МК для осуществления измерений нескольких независимых аналоговых величин с разнесением по времени. Входы мультиплексора могут работать по отдельности (в несимметричном режиме для измерения напряжения относительно «земли») или (в некоторых моделях) объединяться в пары для измерения дифференциальных сигналов. Иногда АЦП дополнительно снабжается усилителем напряжения с фиксированными значениями коэффициента усиления 10 и 200.
Сам АЦП представляет собой преобразователь последовательного приближения с устройством выборки-хранения и фиксированным числом тактов преобразования, равным 13 (или 14 для дифференциального входа; первое преобразование после включения потребует 25 тактов для инициализации АЦП). Тактовая частота формируется аналогично тому, как это делается для таймеров— с помощью специального предделителя тактовой частоты МК, который может иметь коэффициенты деления от 1 до 128. Но в отличие от таймеров, выбор тактовой частоты АЦП не совсем произволен, т. к. быстродействие аналоговых компонентов ограничено. Поэтому коэффициент деления следует выбирать таким, чтобы при заданном «кварце» тактовая частота АЦП укладывалась в рекомендованный диапазон 50-200 кГц (т. е. максимум около 15 тыс. измерений в секунду). Увеличение частоты выборки допустимо, если не требуется достижение наивысшей точности преобразования.
Разрешающая способность АЦП в МК AVR — 10 двоичных разрядов, чего для большинства типовых применений достаточно. Абсолютная погрешность преобразования зависит от ряда факторов и в идеальном случае не превышает ±2 младших разрядов, что соответствует общей точности измерения примерно 8 двоичных разрядов. Для достижения этого результата необходимо принимать специальные меры: не только «вгонять» тактовую частоту в рекомендованный диапазон, но и снижать по максимуму интенсивность цифровых шумов. Для этого рекомендуется, как минимум, не использовать оставшиеся выводы того же порта, к которому подключен АЦП, для обработки цифровых сигналов, правильно разводить платы, а как максимум — дополнительно к тому еще и включать специальный режим ADC Noise Reduction.
Отметим также, что АЦП может работать в двух режимах: одиночного и непрерывного преобразования. Второй режим целесообразен лишь при максимальной частоте выборок. В остальных случаях его следует избегать, т. к. обойти в этом случае необходимость параллельной обработки цифровых сигналов, как правило, невозможно, а это означает снижение точности преобразования.
Регистры управления АЦП
Ниже приведена таблица с описанием регистра ADCSR
Для разрешения работы АЦП необходимо записать лог. 1 в разряд ADEN регистра ADCSR, а для выключения — лог. 0. Если АЦП будет выключено во время цикла преобразования, то преобразование завершено не будет (в регистре данных АЦП останется результат предыдущего преобразования).
Режим непрерывных измерений активизируется установкой бита ADFR (бит 5) этого же регистра. В ряде моделей Mega этот бит носит наименование ADATE, и управление режимом работы производится сложнее: там добавляются несколько режимов запуска через различные прерывания (в т. ч. прерывание от компаратора, при наступлении различных событий от таймера и т. п.), и выбирать их следует, задавая биты ADTS регистра SFIOR, а установка бита ADATE разрешает запуск АЦП по этим событиям.
| Разряд | Название | Описание |
| 5 | ADFR(ADATE) | Выбор режима работы АЦП |
Так как нулевые значения всех битов ADTS (по умолчанию) означают режим непрерывного преобразования, то в случае, когда вы их значения не трогали, функции битов ADATE и ADFR в других моделях будут совпадать.
| ADTS2 | ADTS1 | ADTS0 | Источник стартового сигнала |
| 0 | 0 | 0 | Режим непрерывного преобразования |
| 0 | 0 | 1 | Прерывание от аналогового компаратора |
| 0 | 1 | 0 | Внешнее прерывание INT0 |
| 0 | 1 | 1 | Прерывание по событию «Совпадение» таймера/счетчика Т0 |
| 1 | 0 | 0 | Прерывание по переполнению таймера/счетчика Т0 |
| 1 | 0 | 1 | Прерывание по событию «Совпадение» таймера/счетчика Т1 |
| 1 | 1 | 0 | Прерывание по переполнению таймера/счетчика Т1 |
| 1 | 1 | 1 | Прерывание по событию «Захват» таймера/счетчика Т1 |
Если выбран режим запуска не от внешнего источника, то преобразование запускается установкой бита ADSС (бит 6). При непрерывном режиме установка этого бита запустит первое преобразование, затем они будут автоматически повторяться. В режиме однократного преобразования, а также независимо от установленного режима при запуске через прерывания (в тех моделях, где это возможно) установка бита ADSС просто запускает одно преобразование. При наступлении прерывания, запускающего преобразование, бит ADSС устанавливается аппаратно. Отметим, что преобразование начинается по-фронту первого тактового импульса (тактового сигнала АЦП, а не самого контроллера!) после установки ADSС. По окончании любого преобразования (и в одиночном, и в непрерывном режиме) устанавливается бит ADIF (бит 4. флаг прерывания). Разрешение прерывания АЦП осуществляется установкой бита ADIE (бит 3) все того же регистра ADCSR/ADCSRA.
Для работы с АЦП необходимо еще установить его тактовую частоту. Это делается тремя младшими битами регистра ADCSR/ADCSRA под названием ADPS0..2. Коэффициент деления частоты тактового генератора МК устанавливается по степеням двойки, все нули в этих трех битах соответствуют коэффициенту 2, все единицы — 128. Оптимальная частота преобразования лежит в диапазоне 50-200 кГц, так что, например, для тактовой частоты МК, равной 4 МГц, коэффициент может иметь значение только 32 (состояние битов ADPS0..2 = 101, частота 125 кГц) или 64 (состояние битов ADPS0..2 = 110, частота 62,5 кГц). При тактовой частоте 16 МГц в допустимый диапазон укладывается только коэффициент 128.
| ADPS2 | ADPS1 | ADPS0 | Коэффициент деления |
| 0 | 0 | 0 | 2 |
| 0 | 0 | 1 | 2 |
| 0 | 1 | 0 | 4 |
| 0 | 1 | 1 | 8 |
| 1 | 0 | 0 | 16 |
| 1 | 0 | 1 | 32 |
| 1 | 1 | 0 | 64 |
| 1 | 1 | 1 | 128 |
Ниже приведена таблица с описанием регистра ADMUX.
Выборка источника опорного напряжения производится битами REFS1..0 регистра ADMUX (старшие биты 7 и 6), причем их нулевое значение (по умолчанию) соответствует внешнему источнику. Напряжение этого внешнего источника может лежать в пределах от 2 В до напряжения питания аналоговой части AVcc (а оно, в свою очередь, не должно отличаться от питания цифровой части более чем на 0,3 В в большую или меньшую сторону). Можно выбрать в качестве опорного и питание самой аналоговой части, причем двояким способом: либо просто соединить выводы AREF и AVcc микросхемы, либо установить биты REFS1..0 в состояние 01 (тогда соединение осуществляется внутренними схемами, но заметим, что внешний опорный источник при этом должен быть отключен). Предусмотрен и встроенный источник (задается REFS1..0 в состоянии 11, при этом к выводу AREF рекомендуется подключать фильтрующий конденсатор), имеющий номинальное напряжение 2,56В с большим разбросом от 2,4 до 2,7 В.
| REFS1 | REFS0 | Источник опорного напряжения |
| 0 | 0 | Внешний ИОН, подключенный к выводу AREF, внутренний ИОН отключен |
| 0 | 1 | Напряжение питания AVcc* |
| 1 | 0 | Зарезервировано |
| 1 | 1 | Внутренний ИОН напряжением 2,56V, подключенный к ввыводу AREF* |
| *Если к выводу AREF подключен источник напряжения, данные варианты использоваться не могут | ||
Результат преобразования АЦП оказывается в регистрах ADCH:ADCL. Поскольку результат 10-разрядный, то по умолчанию старшие 6 битов в регистре ADCH оказываются равными нулю. Чтение этих регистров производится, начиная с младшего ADCL, после чего регистр ADCH блокируется, пока не будет прочитан. Следовательно, даже если момент между чтением регистров попал на фронт 14 (15) такта АЦП, когда данные в них должны меняться, значения прочитанной пары будут соответствовать друг другу, пусть и результат этого преобразования пропадет. В противоположном порядке читать эти регистры не рекомендуется. Но бит ADLAR (бит 5 регистра ADMUX) предоставляет интересную возможность: если его установить в 1, то результат преобразования в регистрах ADCH:ADCL выравнивается влево: бит 9 результата окажется в старшем бите ADCH, а незначащими будут младшие 6 битов регистра ADCL. В этом случае, если хватает 8-разрядного разрешения результата, можно прочесть только значение ADCH.
Выбор каналов и режимов их взаимодействия в АЦП производится битами MUX0..3 в регистре ADMUX. Их значения выбирают нужный канал в обычном (недифференциальном) режиме, когда измеряемое напряжение отсчитывается от «земли». Последние два значения этих битов для семейства Mega (11110 и 11111 в большинстве моделей или 1110 и 1111 для ATmega8) выбирают режимы, когда вход АЦП подсоединяется к опорному источнику компаратора (1,22 В) или к «земле» соответственно, что может использоваться для автокалибровки устройства.
Управление входным мультиплексором в моделях Atmega8x
| MUX3-MUX0 | Несимметричный вход |
| 0000 | ADC0 |
| 0001 | ADC1 |
| 0010 | ADC2 |
| 0011 | ADC3 |
| 0100 | ADC4* |
| 0101 | ADC5* |
| 0110 | ADC6** |
| 0111 | ADC7** |
| 1000-1101 | Зарезервировано |
| 1110 | 1,22V |
| 1111 | 0V(GND) |











