В микроконтроллере ATmega32U4 (а также в его урезанной версии ATmega16U4) присутствует аппаратный узел компаратора (Analog Comparator). Он сравнивает друг с другом входные (положительные относительно GND) напряжения сигналов AIN+ (не инверсный вход) и AIN- (инверсный вход). Когда уровень положительного напряжения на AIN+ выше, чем уровень напряжения на AIN-, устанавливается в лог. 1 уровень на выходе Analog Comparator (сигнал ACO).
Выход компаратора может быть настроен для срабатывания функции Input Capture таймера/счетчика 1 (Timer/Counter1). Дополнительно сигнал на выходе Analog Comparator может запускать срабатывание отдельного, специально выделенного вектора прерывания. Пользователь может выбрать момент срабатывания прерывания по фронту нарастания уровня ACO, по его спаду или по переключению в противоположное состояние. Блок-схема компаратора и его окружающей логики показана на рис. 23-1.
Рис. 23-1. Блок схема Analog Comparator(2).
Примечания:
1. См. таблицу 23-2 ниже. 2. См. разводку выводов на картинке ниже, и таблицу 10-3 из даташита [1], где показано размещение выводов Analog Comparator.
Сигнал AIN+ может быть подключен либо к внешнему выводу AIN0 (ножка порта PE6), или к внутреннему опорному напряжению Bandgap. Сигнал AIN- может быть подключен только к выходу мультиплексора ADC (АЦП).
Примечание: в микроконтроллере ATmega16U4/ATmega32U4 имеется внутренний источник опорного напряжения, так называемый эталонный уровень запрещенной зоны (bandgap). Этот источник используется для функции выхода напряжения питания за установленный предел (Brown-out Detection), и он также может использоваться как опорный входной уровень для аналогового компаратора или АЦП (ADC). Минимальный уровень опорного напряжения bandgap составляет 1.0V, номинальный 1.1V, максимальный 1.2V.
Расположение выводов, к которым может быть подключен Analog Comparator, на корпусе QFN44/TQFP44 ATmega32U4:
В этой врезке показаны выводы, которые имеют отношение к компаратору (могут для него использоваться).
[Порты PB]
Порт
Альтернативные функции
PB6
OC1B/PCINT6/OC.4B/ADC13 (выход Output Compare и PWM B для Timer/Counter1, или Pin Change Interrupt 6, или выход Timer 4 Compare B / PWM, или канал 13 АЦП)
PB5
OC1A/PCINT5/~OC.4B/ADC12 (выход Output Compare и PWM A для Timer/Counter1, или Pin Change Interrupt 5, или комплементарный выход Timer 4 Compare B / PWM, или канал 12 АЦП)
PB4
PCINT4/ADC11 (Pin Change Interrupt 4 или канал 11 АЦП)
[Порты PD]
Порт
Альтернативные функции
PD7
T0/OC.4D/ADC10 (вход тактов Timer/Counter0, или выход Timer 4 Compare D / PWM, или канал 10 АЦП)
PD6
T1/~OC.4D/ADC9 (вход тактов Timer/Counter1, или комплементарный выход Timer 4 Compare D / PWM, или канал 9 АЦП)
PD4
ICP1/ADC8 (триггер Timer/Counter1 Input Capture, или канал 8 АЦП)
Примечание: скорее всего, порты PB и PD для аналогового компаратора использовать нельзя, см. таблицу 23-2 и примечание после неё.
[Порт PE6]
Порт
Альтернативные функции
PE6
INT6/AIN0 (вход External Interrupt 6, или положительный, не инверсный вход компаратора)
[Порты PF]
Порт
Альтернативные функции
PF7
ADC7/TDI (канал 7 АЦП или JTAG TDI)
PF6
ADC6/TDO (канал 6 АЦП или JTAG TDO)
PF5
ADC5/TMS (канал 5 АЦП или JTAG TMS)
PF4
ADC4/TCK (канал 4 АЦП или JTAG TCK)
PF1
ADC1 (канал 1 АЦП)
PF0
ADC0 (канал 0 АЦП)
[Описание регистров и бит, относящихся к компаратору]
ADC Control and Status Register B – ADCSRB
Разряд
7
6
5
4
3
2
1
0
ADHSM
ACME
MUX5
-
ADTS3
ADTS2
ADTS1
ADTS0
ADCSRB
Чтение/запись
R
R/W
R/W
R
R
R/W
R/W
R/W
Исх. значение
0
0
0
0
0
0
0
0
Бит 6 ACME: Analog Comparator Multiplexer Enable
Когда в ACME записана лог. 1, и ADC выключен (ADEN в регистре ADCSRA установлен в лог. 0), выход мультиплексора ADC подключен к инверсному входу AIN- компаратора. Когда в ACME записан лог. 0, на этот вход AIN- компаратора подключена источник опорного напряжения Bandgap (см. раздел "Internal Voltage Reference" даташита [1]). Подробное описание этого бита см. ниже в разделе "Мультиплексированный вход Analog Comparator".
Analog Comparator Control and Status Register – ACSR
Разряд
7
6
5
4
3
2
1
0
ACD
ACBG
ACO
ACI
ACIE
ACIC
ACIS1
ACIS0
ADCSRB
Чтение/запись
R/W
R/W
R
R/W
R/W
R/W
R/W
R/W
Исх. значение
0
0
N/A
0
0
0
0
0
Бит 7 ACD: Analog Comparator Disable
Когда этот бит установлен в лог. 1, питание Analog Comparator выключено. Этот бит может быть установлен в любое время с целью выключения Analog Comparator, что снизит потребление мощности в режимах Active и Idle. Когда меняется значение бита ACD, прерывание Analog Comparator должно быть запрещено очисткой бита ACIE в регистре ACSR. В противном случае при изменении бита ACD может произойти прерывание компаратора.
Бит 6 ACBG: Analog Comparator Bandgap Select
Когда этот бит установлен, фиксированное опорное напряжение (fixed bandgap reference) заменяет уровень на положительном входе AIN+ компаратора. Когда этот бит очищен, AIN0 подключен к положительному входу AIN+ компаратора. См. раздел "Internal Voltage Reference" даташита [1].
Бит 5 ACO: Analog Comparator Output
Этот бит представляет синхронизированное значение на выходе компаратора. Задержка синхронизации составляет 1 или 2 такта ядра.
Бит 4 ACI: Analog Comparator Interrupt Flag
Этот бит устанавливается аппаратно, когда происходит событие изменение уровня на выходе компаратора в соответствии с режимом, определенным битами ACIS1 и ACIS0. Обработчик прерывания (ISR) Analog Comparator выполнится, если установлен бит ACIE и установлен I-бит (глобальное разрешение прерываний) в регистре SREG. ACI очищается аппаратно, когда выполняется соответствующий вектор ISR. Альтернативно ACI очищается записью в него лог. 1.
Бит 3 ACIE: Analog Comparator Interrupt Enable
Когда в бит ACIE записана лог. 1, и установлен I-бит в Status Register (SREG), активируется прерывание Analog Comparator. Когда в ACIE записан лог. 0, прерывание компаратора запрещается.
Бит 2 ACIC: Analog Comparator Input Capture Enable
Когда в этот бит записана лог. 1, то разрешается функция захвата по входу таймера 1 (input capture Timer/Counter1), запускаемая от аналогового компаратора. В этом случае выход компаратора напрямую подключается к логике input capture, с применением функций подавления шума (noise canceler) и выбора перепада (edge select) для Timer/Counter1 Input Capture interrupt. Когда в бит ACIC записан лог. 0, отсутствует соединение между выходом компаратора и функцией входа захвата. Чтобы компаратор вызывал срабатывание прерывания Timer/Counter1 Input Capture, должен быть установлен бит ICIE1 в Timer Interrupt Mask Register (TIMSK1).
Биты 1 и 0, ACIS1, ACIS0: Analog Comparator Interrupt Mode Select
Эти биты определяют, какое из событий изменения уровня на выходе компаратора приведет к срабатыванию прерывания Analog Comparator. В таблице ниже перечислены возможные настройки для этих бит.
Таблица 23-1. Биты ACIS1/ACIS0, определяющие событие прерывания на выходе компараторе.
ACIS1
ACIS0
Режим прерывания
0
0
Прерывание срабатывает при изменении лог. уровня на выходе компаратора.
0
1
Зарезервировано
1
0
Прерывание при спаде уровня на выходе компаратора (переход 1 -> 0).
1
1
Прерывание при нарастании уровня на выходе компаратора (переход 0 -> 1).
Когда меняются биты ACIS1/ACIS0, должно быть запрещено прерывание Analog Comparator путем очистки бита ACIE в регистре ACSR. В противном случае может произойти прерывание компаратора.
Digital Input Disable Register 1 – DIDR1
Разряд
7
6
5
4
3
2
1
0
-
-
-
-
-
-
-
AIN0D
ADCSRB
Чтение/запись
R
R
R
R
R
R
R
R/W
Исх. значение
0
0
0
0
0
0
0
0
Бит 0 AIN0D: AIN0 Digital Input Disable
Когда в этот бит записана лог. 1, то запрещается входной цифровой буфер вывода AIN0. Соответствующий бит регистра PIN будет всегда читаться как 0, когда установлен бит AIN0D. Когда аналоговый сигнал прикладывается к выводу AIN0, и не требуется подача цифрового сигнала с этого вывода, в бит AIN0D следует записать лог. 1, чтобы уменьшить потребление мощности в цифровом входном буфере.
[Мультиплексированный вход Analog Comparator]
Можно выбрать любой из выводов ADC13..0 (кроме ADC2 и ADC4, этих входов нет на корпусе чипа), чтобы подать с них сигнал на инверсный вход компаратора AIN-. Мультиплексор ADC используется для выбора этого входа, так что для использования этой функции ADC должно быть выключено. Если бит Analog Comparator Multiplexer Enable (ACME в регистре ADCSRB) установлен, и ADC выключен (ADEN в регистре ADCSRA в лог. 0), то биты MUX2..0 в ADMUX выбирают входной вывод, чтобы заменить его уровнем сигнал на инверсном входе Analog Comparator, как показано в таблице ниже. Если бит ACME очищен, или установлен бит ADEN, то на инверсный вход Analog Comparator подается опорное напряжение (Bandgap reference).
Таблица 23-2. Мультиплексирование входа Analog Comparator.
ACME
ADEN
MUX2..0
Инверсный вход компаратора (AIN-)
0
x
xxx
Опорный уровень Bandgap.
1
1
xxx
Опорный уровень Bandgap.
1
0
000
ADC0
001
ADC1
010
Не применимо
011
100
ADC4
101
ADC5
110
ADC6
111
ADC7
Примечание: в предыдущем предложении ошибка, потому что утверждение, что выбор входа осуществляется битами MUX2..0 (что также показано в таблице 23-2) противоречит с тем, что якобы можно выбрать любой из выводов ADC13..0.