Перейти к содержанию

АЦП ATmega328P: регистры и биты

10-битный АЦП последовательного приближения с мультиплексором входов. Опорное напряжение и вход выбирает ADMUX, включение, запуск и предделитель тактовой частоты — ADCSRA, источник автозапуска — ADCSRB, результат читается из ADC (ADCL и ADCH).

Данные: описание ATmega328P из пакета Microchip ATmega_DFP 3.6.299 (Apache-2.0), сверено со сводкой регистров даташита DS40002061B.

Регистры блока

РегистрАдресНазначениеПосле сброса
ADC0x78Результат преобразования АЦП0x0000
ADCSRA0x7AУправление АЦП, регистр A0x00
ADCSRB0x7BУправление АЦП, регистр B0x00
ADMUX0x7CОпорное напряжение и вход АЦП0x00
DIDR00x7EОтключение цифровых входов АЦП0x00

Конструктор значения

Выберите регистр и включите нужные биты — конструктор покажет значение и строку кода на C и ассемблере. Начальное значение — после сброса.

Исходные данные

Результат

Значение
0x00
Двоичное, биты 7…0
0000 0000

C (avr-gcc, avr/io.h)

ADCSRA = 0;

Ассемблер Microchip (m328Pdef.inc)

ldi r16, 0x00
sts ADCSRA, r16

ADC — результат преобразования АЦП

Адрес 0x78, 16 бит: старший байт ADCH по адресу 0x79, младший ADCL по 0x78, после сброса 0x0000. Первым читают ADCL: после этого результат не обновляется, пока не прочитан ADCH. В C регистр ADC читается целиком в нужном порядке.

ADCSRA — управление АЦП, регистр A

Адрес 0x7A, 8 бит, после сброса 0x00.

Бит76543210
ИмяADENADSCADATEADIFADIEADPS2ADPS1ADPS0
ДоступR/WR/WR/WR/WR/WR/WR/WR/W
После сброса00000000
  • ADEN (бит 7) — АЦП включён.
  • ADSC (бит 6) — Запуск преобразования.
  • ADATE (бит 5) — Автозапуск преобразований.
  • ADIF (бит 4) — Флаг АЦП: преобразование завершено. Ставится аппаратно, сбрасывается при входе в обработчик прерывания или записью единицы в этот бит.
  • ADIE (бит 3) — Прерывание АЦП.
  • ADPS2:0 (биты 2:0) — Предделитель тактовой частоты АЦП.
    ADPS2:0Значение
    000Деление на 2
    001Деление на 2
    010Деление на 4
    011Деление на 8
    100Деление на 16
    101Деление на 32
    110Деление на 64
    111Деление на 128

ADCSRB — управление АЦП, регистр B

Адрес 0x7B, 8 бит, после сброса 0x00.

Бит76543210
Имя—ACME———ADTS2ADTS1ADTS0
ДоступRR/WRRRR/WR/WR/W
После сброса00000000
  • ACME (бит 6) — Вход компаратора от мультиплексора АЦП.
  • ADTS2:0 (биты 2:0) — Источник автозапуска АЦП.
    ADTS2:0Значение
    000Непрерывное преобразование
    001Аналоговый компаратор
    010Внешнее прерывание INT0
    011Совпадение с OCR0A
    100Переполнение таймера 0
    101Совпадение с OCR1B
    110Переполнение таймера 1
    111Захват таймера 1

ADMUX — опорное напряжение и вход АЦП

Адрес 0x7C, 8 бит, после сброса 0x00.

Бит76543210
ИмяREFS1REFS0ADLAR—MUX3MUX2MUX1MUX0
ДоступR/WR/WR/WRR/WR/WR/WR/W
После сброса00000000
  • REFS1:0 (биты 7:6) — Опорное напряжение АЦП.
    REFS1:0Значение
    00Внешнее на AREF, внутреннее выключено
    01AVCC, конденсатор на AREF
    10Зарезервировано
    11Внутренний источник 1,1 В, конденсатор на AREF
  • ADLAR (бит 5) — Выравнивание результата влево.
  • MUX3:0 (биты 3:0) — Вход АЦП.
    MUX3:0Значение
    0000Вход ADC0
    0001Вход ADC1
    0010Вход ADC2
    0011Вход ADC3
    0100Вход ADC4
    0101Вход ADC5
    0110Вход ADC6
    0111Вход ADC7
    1000Датчик температуры
    1110Внутренний источник VBG
    11110 В (GND)

DIDR0 — отключение цифровых входов АЦП

Адрес 0x7E, 8 бит, после сброса 0x00.

Бит76543210
Имя——ADC5DADC4DADC3DADC2DADC1DADC0D
ДоступRRR/WR/WR/WR/WR/WR/W
После сброса00000000
  • ADC5D (бит 5) — Отключить цифровой вход ADC5.
  • ADC4D (бит 4) — Отключить цифровой вход ADC4.
  • ADC3D (бит 3) — Отключить цифровой вход ADC3.
  • ADC2D (бит 2) — Отключить цифровой вход ADC2.
  • ADC1D (бит 1) — Отключить цифровой вход ADC1.
  • ADC0D (бит 0) — Отключить цифровой вход ADC0.

Частые вопросы

Какими командами ассемблера обращаться к регистрам ADC ATmega328P?

ADC, ADCSRA, ADCSRB, ADMUX и DIDR0 лежат за пределами области ввода-вывода, их читают и пишут командами LDS и STS (или LD и ST) по адресу в пространстве данных. В программе на C разницы нет: компилятор сам выбирает команду по адресу из avr/io.h.

Какие значения у регистров ADC после сброса?

Все регистры блока, для которых даташит DS40002061B приводит значение после сброса (ADC, ADCSRA, ADCSRB, ADMUX и DIDR0), после сброса равны нулю.

Как установить биты ADCSRA на C?

Имена регистров и битов определены в avr/io.h, бит задаётся сдвигом единицы на его номер: ADCSRA = (1 << ADEN) | (1 << ADSC); записывает новое значение целиком, а ADCSRA |= (1 << ADEN); меняет только этот бит. Готовую строку для любого набора битов даёт конструктор на этой странице.

Источники

  1. Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet (DS40002061B) — сводка регистров, диаграммы битов и значения после сброса
  2. Microchip ATmega_DFP 3.6.299, описание ATmega328P (ATDF) — регистры, битовые поля и их значения, лицензия Apache-2.0

Нашли ошибку в регистрах?

Другие регистры ATmega328P

Калькуляторы и статьи