Аналого-цифровое преобразование
Initial value 0 0 0 0 0 0 0 0
7 6 5 4 3 2 1 0
F0C2 | WGM20 | COM21 | COM20 | WGM21 | CS22 | CS21 | CS20 |
Read/Write W R/W R/W R/W R/W R/W R/W R/W
Initial value 0 0 0 0 0 0 0 0
Рисунок 1.2 – Формат регистров TCCR0 и TCCR2
Управление тактовым сигналом.Формирование тактового сигнала таймера/счетчика clkТ0 (clkТ2) осуществляется блоком предделителя.
В качестве тактового сигнала clkТ0 (clkТ2) таймера/счетчика ТО исполнений 1, 2 и таймера/счетчика Т2 исполнения 2 может использоваться:
системный тактовый сигнал clkТ0(Т2) = clkI/O; масштабированный системный тактовый сигнал clkТ0(Т2) = clkI/O / n; внешний сигнал, поступающий на вход Т0 (Т2) микроконтроллера clkТ0(Т2) = clkFXT .
Тактовый сигнал таймеров/счетчиков Т0 и Т2 исполнения 3 может формироваться либо из системного тактового сигнала clkI/O (clkТ0(Т2) = clkI/O / n), либо в асинхронном режиме из сигнала от дополнительного кварцевого резонатора (clkТ0(Т2) = clkTOSK1 / n). Переключение между синхронным и асинхронным режимами работы осуществляется с помощью разряда AS0 (AS2) регистра ASSR.
Выбор источника тактового сигнала, а также запуск и остановка таймеров/счетчиков осуществляются с помощью разрядов CS02...CS00 (CS22...CS20) регистра управления таймером TCCR0 (TCCR2).
Таблица 3. Выбор источника тактового сигнала таймеров/счетчиков T0 и T2
CSn2 | CSn1 | CSn0 | Источник тактового сигнала | |||
Исполнения 1,2 | Исполнение 3 | |||||
ASn = «0» | ASn = «1» | |||||
Таймер/счетчик остановлен | Таймер/счетчик остановлен | |||||
clkI/O | clkI/O | clkTOSC1 | ||||
clkI/O/8 | clkI/O/8 | clkTOSC1/8 | ||||
clkI/O/64 | clkI/O/32 | clkTOSC1/32 | ||||
clkI/O/256 | clkI/O/64 | clkTOSC1/64 | ||||
clkI/O/1024 | clkI/O/128 | clkTOSC1/128 | ||||
Вывод Tn, счет осуществляется по спадающему фронту импульсов | clkI/O/256 | clkTOSC1/256 | ||||
Вывод Tn, счет осуществляется по нарастающему фронту импульсов | clkI/O/1024 | clkTOSC1/1024 | ||||
Примечание: n = 0 или 2.
Режимы работы.Режимы работы таймеров/счетчиков Т0 (Т2) определяются состоянием разрядов WGMn1:WGMn0 регистра TCCR0 (TCCR2). Зависимость режима работы таймеров/счетчиков от состояния этих разрядов показана в таблице ниже:
Таблица 4. Режимы работы таймера/счетчика Т0 (Т2)
Номер режима | WGMn1 (CTCn) | WGMn0 (PWMn) | Описание |
Normal | |||
Phase correct PWM | |||
CTC (сброс при совпадении) | |||
Fast PWM |
Примечание: n = 0 или 2.
Режим Normal.Это наиболее простой режим работы таймеров/счетчиков, а в таймере/счетчике Т0 моделей ATmega8x и ATmega163x это вообще единственный режим. В этом режиме счетный регистр функционирует как обычный суммирующий счетчик. По каждому импульсу тактового сигнала clkT0 (clkT2) осуществляется инкремент счетного регистра. При переходе через значение $FF возникает переполнение, и счет продолжается со значения $00. В том же такте сигнала clkT0 (clkT2), в котором обнуляется регистр TCNT0 (TCNT2), устанавливается в «1» флаг переполнения TOV0 (TOV2).
В таймерах/счетчиках исполнений 2 и 3 при равенстве счетного регистра и регистра сравнения устанавливается флаг прерывания OCF0 (OCF2) и, если разряд ОС1Е0(ОС1Е2) регистра TIMSK установлен в «1», генерируется прерывание. Наряду с установкой флага при равенстве счетного регистра и регистра сравнения может изменяться состояние выход ОС0 (ОС2) микроконтроллера. Каким образом оно будет изменяться, определяется разрядами СОМ01:СОМ00 (СОМ21:СОМ20) регистра TCCR0 (TCCR2) в соответствии с таблицей 5.
Таблица 5. Управление выводом ОС0 (ОС2) в режиме Normal
СОМn1 | СОМn0 | Описание |
Таймер/счетчик отключен от вывода ОСn | ||
Состояние вывода меняется на противоположное | ||
Вывод сбрасывается в «0» | ||
Вывод устанавливается в «1» |
Примечание: n = 0 или 2.
При необходимости состояние вывода ОС0 (ОС2) может быть изменено принудительно, записью лог. 1 в разряд FOC0 (FOC2) регистра TCCR0 (TCCR2). Прерывание при этом не генерируется.
Режим СТС (сброс при совпадении).В этом режиме счетный регистр тоже функционирует как обычный суммирующий счетчик, инкремент которого осуществляется по каждому импульсу тактового сигнала clkT0 (clkT2). Однако максимально возможное значение счетного регистра и, следовательно, разрешающая способность счетчика определяется регистром сравнения OCR0 (OCR2). После достижения значения, записанного в регистре сравнения, счет продолжается со значения «$00». В том же такте сигнала clkT0 (clkT2), в котором обнуляется счетный регистр, устанавливается флаг прерывания TOV0 (TOV2) регистра ТIFR.
При достижении счетчиком максимального значения устанавливается флаг OCF0 (OCF2) регистра TIFR. Одновременно с установкой флага может изменяться состояние вывода ОС0 (ОС2) микроконтроллера. Поведение вывода определяется разрядами СОМ01:СОМ00 (COM21:COM20 регистрa TCCR0 (TCCR2), как указано в таблице 6.
Таблица 6. Управление выводом ОС0 (ОС2) в режиме СТС
СОМn1 | СОМn0 | Описание |
Таймер/счетчик отключен от вывода ОСn | ||
Состояние вывода меняется на противоположное | ||
Вывод сбрасывается в «0» | ||
Вывод устанавливается в «1» |
Примечание: n = 0 или 2.
Для генерации сигнала заданной частоты необходимо записать в разряды СОМ01:СОМ00 (СОМ21:СОМ20) значение «01» (переключение состояния вывода). Частота генерируемого сигнала будет определиться выражением fOCn = fclk I/O/2N/(1+OCRn), где N — коэффициент деления предделителя.
При необходимости состояние вывода ОС0 (0С2) может быть изменено принудительно, записью лог. 1 в разряд FOC0 (F0C2) регистра TCCR0 (TCCR2). Прерывание при этом не генерируется и сброса счетного регистра не производится.
Режим Fast PWM.Режим Fast PWM (Быстродействующий ШИМ) позволяет генерировать высокочастотный сигнал с широтно-импульсной модуляцией. В связи с высокой частотой генерируемого сигнала данный режим с успехом может использоваться в таких приложениях, как регулирование мощности, выпрямление, цифроаналоговое преобразование и др.
Счетный регистр в этом режиме функционирует как суммирующий счетчик, инкремент которого осуществляется по каждому импульсу тактового сигнала clkT0 (clk T2). Состояние счетчика изменяется от $00 до $FF, после чего счетный регистр сбрасывается и цикл повторяется. При достижении счетчиком максимального значения устанавливается флаг прерывания TOV0 (TOV2) регистра TIFR. При равенстве содержимого счетного регистра и регистра сравнения OCR0 (OCR2) устанавливается флаг OCF0 (OCF2) регистра TIFR.
Особенностью работы схемы сравнения в этом режиме является двойная буферизация записи в регистр OCR0 (OCR2), заключающаяся в том, что задаваемое число на самом деле сохраняется в специальном буферном регистре. А изменение содержимого регистра сравнения происходит только в момент достижения счетчиком максимального значения $FF. Благодаря такому решению исключается появление несимметричных импульсов сигнала на выходе модулятора (помех), которые были бы неизбежны при непосредственной записи в регистр сравнения.
Поведение вывода ОС0 (ОС2) микроконтроллера в этом режиме также определяется содержимым разрядов СОМ01:СОМ00 (СОМ21:СОМ20) регистра TCCR0 (TCCR1).
Таблица 7. Поведение вывода ОС0 (ОС2) в режиме Fast PWM
СОМn1 | СОМn0 | Описание |
Таймер/счетчик отключен от вывода ОСn | ||
Зарезервировано | ||
Сбрасывается в «0» при равенстве регистров TCNTn и OCRn. Устанавливается в «1» при TCNTn = $00 (неинвертированный ШИМ-сигнал) | ||
Устанавливается в «1» при равенстве регистров TCNTn и OCRn. Сбрасывается в «0» при TCNTn = $00 (инвертированный ШИМ-сигнал) |
Примечание: n = 0 или 2.
Частота генерируемого сигнала fOCn = fclk I/O/256N, где N — коэффициент деления предделителя.
Отдельно следует рассмотреть случаи, когда в регистре сравнения находятся предельно возможные значения ($00 и $FF). В первом случае, сети содержимое регистра сравнения OCR0 (OCR2) равно $00, на выходе ОС0 (ОС2) при каждом 256-м такте сигнала clkT0 (clkT2) будут наблюдаться короткое выбросы.
Режим Phase Correct PWM.Режим Phase Correct PWM (ШИМ с точной фазой), как и режим Fast PWM, предназначен для генерации сигналов с широтно-импульсной модуляцией. Однако в этом режиме счетный регистр функционирует как реверсивный счетчик, изменение состояния которого осуществляется по каждому импульсу тактового сигнала clkT0 (clkT2). Состояние счетчика сначала изменялся от $00 до $FF, а затем обратно до $00. Соответственно максимальная частота сигнала в этом режиме в два раза меньше максимальной частоты сигнала в режиме Fast PWM. Тем не менее, благодаря «симметричности» изменения состояния счетчика, режим Phase Correct PWM предпочтительнее использовать для решения задач управления двигателями.
При достижении счетчиком максимального ($FF) значения происходи смена направления счета, но счетчик остается в этом состоянии в течение одного периода сигнала clkT0 (clkT2). При достижении счетчиком минимального значения ($00) также происходит смена направления счета и одновременно устанавливается флаг прерывания TOV0 (TOV2) регистра TIFR. При равенстве содержимого счетного регистра и регистра сравнения OCR0 (ОСR2) устанавливается флаг OCF0 (OCF2) регистра TIFR и изменяется состояние вывода ОС0 (ОС2). Каким образом изменяется состояние вывода ОС0 (ОС2) определяется, как обычно, содержимым разрядов СОМ01:СОМ00 (СОМ21:СОМ20) регистра TCCR0 (TCCR2).
Таблица 8. Поведение вывода ОС0 (ОС2) в режиме Phase Correct PWM
СОМn1 | СОМn0 | Описание |
Таймер/счетчик отключен от вывода ОСn | ||
Зарезервировано | ||
Сбрасывается в «0» при прямом счете и устанавливается в «1» при обратном счете (неинвертированный ШИМ-сигнал) | ||
Устанавливается в «1» при прямом счете и сбрасывается в «0» при обратном счете (инвертированный ШИМ-сигнал) |
Примечание: n = 0 или 2.
Для избегания несимметричных выбросов в этом режиме тоже реализована двойная буферизация записи в регистр OCR0 (OCR2). Благодаря этому действительное изменение содержимого регистра сравнения происходит только в момент достижения счетчиком максимального значения $FF.
Если в регистр сравнения записать значение $00 или $FF, то при следующем совпадении состояния счетчика и содержимого регистра сравнения выход схемы сравнения переключится в устойчивое состояние согласно таблице ниже.
Частота генерируемого в рассматриваемом режиме сигнала определяется выражением fOCn = fclk I/O/512N, где N— коэффициент деления предделителя.
АЦП
Аналого-цифровое преобразование.
В МК имеется встроенный 6-канальный 10-битный АЦП. Для управления АЦП используются 2 регистра: регистр мультиплексирования ADMUXи регистр управленияADCSRA.
ADC Multiplexer Selection Register – ADMUX
Bit 7 6 5 4 3 2 1 0
REFS1 | REFS0 | ADLAR | - | MUX3 | MUX2 | MUX1 | MUX0 |
ADMUX
Read/Write R/W R/W R/W R R/W R/W R/W R/W
Initial value 0 0 0 0 0 0 0 0
Рисунок 1.8 – Регистр ADMUX
Биты 7:6 – REFS1:0 Reference Selection Bits. Эти биты отвечают за опорное напряжение для ADC. Если эти биты изменяются во время перехода, то они не будут в силе до завершения процесса перехода. Внутреннее опорное напряжение может не использоваться, если внешнее опорное напряжение соединено с AREF.
Таблица 10. Выбор опорного напряжения АЦП
REFS1 | REFS0 | Voltage Reference Selection |
AREF, внутреннее Vref отключено | ||
AVCC с внутренним конденсатором на AREF | ||
Резервировано | ||
Внутреннее опорное напряжение 2.56В с внешним конденсатором на AREF |
Бит 5 – ADLAR: ADC Left Adjust Result. Бит ALDAR влияет на представление данных в ADC Data Register после конверсии. Если значение ALDAR будет 1, то результат сместится влево. В противном случае – вправо. Смена значения ALDAR отразится на ADC Data Register незамедлительно, несмотря на любые происходящие в текущий момент времени операции.
Биты 3:0 – MUX3:0 Analog Channel Selection Bits. Значения этих битов определяют, какой аналоговый вход будет подключен к ADC. Если биты будут изменены в процессе работы, то изменения не вступят в силу, пока не завершатся текущие операции (ADIF и ADCSRA установлены).
Таблица 11. Выбор аналогового входа АЦП
MUX3..0 | Аналоговый вход |
ADC0 | |
ADC1 | |
ADC2 | |
ADC3 | |
ADC4 | |
ADC5 | |
ADC6 | |
ADC7 | |
1.30V(VBG) | |
0V (GND) |
ASC Control and Status Register A – ADCSRA
Bit 7 6 5 4 3 2 1 0
ADEN | ADSC | ADFR | ADIF | ADIE | ADPS2 | ADPS1 | ADPS0 |
ADCSRA
Read/Write R/W R/W R/W R/W R/W R/W R/W R/W
Initial value 0 0 0 0 0 0 0 0
Рисунок 1.9 - Управляющий регистр ADCSRA
Бит 7 – ADEN: ADC Enable. Запись в этот бит единицы включит ADC. Если в бите ADEN ноль, то ADC будет отключен. Если во время каких-то операций поменять значение бита, то операция будет немедленно прекращена.
Бит 6 – ADSC: ADC Start Conversion. В режиме одиночного преобразования запись в этот бит единицы будет начинать каждое отдельное преобразование. В свободном режиме (множественных преобразований) запись единицы начинает лишь первое преобразование. Если ADSC был записан после того, как был включен ADC или если ADSC записан в то же время, что и включен ADC, то первое преобразование займет 25 циклов машинного времени вместо обычных 13. Это первое преобразование выполнит инициализацию ADC. После окончания преобразования в бит ADSC устанавливается ноль. Пока преобразование продолжается, бит установлен в единицу. Запись вручную нуля не дает результата.
Бит 5 – ADFR: ADC Free Running Select. Когда в бит записана единица, ADC оперирует в свободном режиме. В этом режиме ADC просматривает и обновляет регистры данных постоянно. Установка значения бита в ноль немедленно отменит свободный режим.
Бит 4 – ADIF: ADC Interrupt Flag. Этот бит устанавливается тогда, когда завершает работу ADC и регистры данных обновлены. ADC Conversion Complete Interrupt (прерывание по завершению преобразования АЦП) выполняется в том случае, если бит ADIE и I-бит в SREG установлены. ADIF сбрасывается аппаратно, когда выполняется соответствующее прерывание. Иначе ADIF можно сбросить, установив логическую единицу во флаг.
Бит 3 – ADIE: ADC Interrupt Enable. Когда этот бит равен единице и I-бит в SREG установлен в «1», то активируется ADC conversion Complete Interrupt (прерывание по завершению преобразования).
Биты 2:0 – ADPS2:0: ADC Prescaler Select Bits. Эти биты определяют коэффициент деления между частотой XTAL и входной тактовой частотой ADC.
Таблица 12. Установка частоты работы АЦП (выбор предделителя)
ADPS2 | ADPS1 | ADPS0 | Коффициент деления |
ADC Data Register – ADCL и ADCH (регистры данных)
В данные регистры помещается результат преобразования.
Bit 15 14 13 12 11 10 9 8
- | - | - | - | - | - | ADC9 | ADC8 |
ADC7 | ADC6 | ADC5 | ADC4 | ADC3 | ADC2 | ADC1 | ADC0 |
ADCH
ADCL
7 6 5 4 3 2 1 0
Read/Write R R R R R R R R
R R R R R R R R
Initial value 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
Рисунок 1.10 – Формат регистров данных при ADLAR = 0 и ADLAR = 1
Биты ADLAR и MUXn в ADMUX влияют на то, как выходной результат представлен в регистрах ADCL и ADCH. Если ADLAR установлен, то результат смещается влево. Если ADLAR очищен (по умолчанию), то результат смещается вправо.
ПОРТЫ
ПОРТЫ
SBI PORTB, 1; устанавливается единица первый пин порта Б
CBI PORTB, 2;устанавливается ноль второй пин порта Б
на вход
LDI Temp1,0b11111111
OUT PORTB,Temp1;
на выход
LDI Temp1,0b00000000
OUT PORTB,Temp1;