АЦП ATmega328P: регистры и биты
10-битный АЦП последовательного приближения с мультиплексором входов. Опорное напряжение и вход выбирает ADMUX, включение, запуск и предделитель тактовой частоты — ADCSRA, источник автозапуска — ADCSRB, результат читается из ADC (ADCL и ADCH).
Данные: описание ATmega328P из пакета Microchip ATmega_DFP 3.6.299 (Apache-2.0), сверено со сводкой регистров даташита DS40002061B.
Регистры блока
Конструктор значения
Выберите регистр и включите нужные биты — конструктор покажет значение и строку кода на C и ассемблере. Начальное значение — после сброса.
Исходные данные
Результат
- Значение
- 0x00
- Двоичное, биты 7…0
- 0000 0000
C (avr-gcc, avr/io.h)
ADCSRA = 0;Ассемблер Microchip (m328Pdef.inc)
ldi r16, 0x00
sts ADCSRA, r16ADC — результат преобразования АЦП
Адрес 0x78, 16 бит: старший байт ADCH по адресу 0x79, младший ADCL по 0x78, после сброса 0x0000. Первым читают ADCL: после этого результат не обновляется, пока не прочитан ADCH. В C регистр ADC читается целиком в нужном порядке.
ADCSRA — управление АЦП, регистр A
Адрес 0x7A, 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | ADEN | ADSC | ADATE | ADIF | ADIE | ADPS2 | ADPS1 | ADPS0 |
| Доступ | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- 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.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | — | ACME | — | — | — | ADTS2 | ADTS1 | ADTS0 |
| Доступ | R | R/W | R | R | R | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- 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.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | REFS1 | REFS0 | ADLAR | — | MUX3 | MUX2 | MUX1 | MUX0 |
| Доступ | R/W | R/W | R/W | R | R/W | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- REFS1:0 (биты 7:6) — Опорное напряжение АЦП.
REFS1:0 Значение 00 Внешнее на AREF, внутреннее выключено 01 AVCC, конденсатор на 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 1111 0 В (GND)
DIDR0 — отключение цифровых входов АЦП
Адрес 0x7E, 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | — | — | ADC5D | ADC4D | ADC3D | ADC2D | ADC1D | ADC0D |
| Доступ | R | R | R/W | R/W | R/W | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- 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); меняет только этот бит. Готовую строку для любого набора битов даёт конструктор на этой странице.
Источники
- Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet (DS40002061B) — сводка регистров, диаграммы битов и значения после сброса
- Microchip ATmega_DFP 3.6.299, описание ATmega328P (ATDF) — регистры, битовые поля и их значения, лицензия Apache-2.0
Нашли ошибку в регистрах?
Другие регистры ATmega328P
- Все регистры ATmega328PТаблица по адресам
- USART0UCSR0A, UCSR0B, UCSR0C, UBRR0, UDR0
- TWI (I²C)TWBR, TWSR, TWAR, TWDR, TWCR, TWAMR
- Таймер-счётчик 1 (16 бит)TIFR1, GTCCR, TIMSK1, TCCR1A, TCCR1B, TCCR1C
- Таймер-счётчик 2 (8 бит, асинхронный)TIFR2, GTCCR, TIMSK2, TCCR2A, TCCR2B, TCNT2
- Аналоговый компараторACSR, DIDR1
- Порты ввода-выводаPINB, DDRB, PORTB, PINC, DDRC, PORTC
- Таймер-счётчик 0 (8 бит)TIFR0, GTCCR, TCCR0A, TCCR0B, TCNT0, OCR0A
- Внешние прерыванияPCIFR, EIFR, EIMSK, PCICR, EICRA, PCMSK0
- SPISPCR, SPSR, SPDR
- EEPROMEECR, EEDR, EEAR
- Ядро и системные регистрыGPIOR0, GPIOR1, GPIOR2, SMCR, MCUSR, MCUCR