Данный даташит является не официальным переводом, переводился абы кем и абы как. Перевод бесплатный
и распространяется бесплатно его продажа запрещена. Авторы перевода не несут абсолютно никаких
гарантий и ответственности за качество и правильность перевода. ПРЕДУПРЕЖДАЕМ ЧТО ПЕРЕВОД КОРЯВЫЙ.
Вы его читаете только на собственный страх и риск. Данный даташит переводился без знания английского
языка и в нем могут быть ошибки даже там-где вы их не ожидаете, по этому сгоревшие и уничтоженные
микроконтроллеры, понесенные убытки из-за неправильного перевода, это ВАША И ТОЛЬКО ВАША ВИНА и
больше ничья!!!
Особенности
Highperformance, LowpowerAtmel AVR 8 бит микроконтроллерAdvanced RISC-архитектуры
32 x 8 GeneralPurposeWorkingRegisters
512Bytes EEPROM
Обширный On-chipDebugSupport
Шесть Sleep режимах: Idle, ADC NoiseReduction, Powersave, Powerdown, Standby и ExtendedStandby
I/O и пакеты
2.7 - 5.5 V
Скорость Марок
0 - 16MHz
Потребляемая мощность @ 1 МГц, 3В, 25°C
Active: 0.6 мА
1. Конфигурация Контактов
Рис. 1-1.
Распиновка ATmega16A
2. Обзор
На ATmega16A-это lowpower CMOS 8 разрядный микроконтроллер на основе Atmel AVR enhanced
RISC архитектура. Выполнение сложных инструкций за один такт, ATmega16A достигает
производительности приближается 1MIPS на МГц, что позволяет разработчикам систем
оптимизировать энергопотребление в сравнении с обработкой скорость.
2.1
Блок-Схема
Рис. 2-1.
Блок-Схема
Atmel AVR ядро объединяет в себе богатый набор инструкций с 32 generalpurposeworkingregisters. Все 32
регистры непосредственно связаны арифметическо-логическое устройство (Алу), позволяя двух
независимых регистров
взято в одной инструкции выполняются в один такт. Результирующая архитектура-это более эффективный
код при достижении производительности до десяти раз быстрее, чем обычные CISC микроконтроллерами.
На ATmega16A предоставляет следующие возможности: 16Kbytes InSystemProgrammableFlash программа
памяти на чтение, а на запись; 512bytes EEPROM; 1Kbyte SRAM; 32 generalpurpose I/O линий,
32 generalpurposeworkingregisters; интерфейс JTAG для Граничного сканирования; поддержка отладки на
кристалле и программирования; три гибких таймера/счетчики с сравнить режимы; Внутренние и внешние
прерывания; серийный программируемый USART; байт-ориентированный двухпроводной
последовательный интерфейс, 8 каналов; 10 битный АЦП с опциональным дифференциальный входной
каскад с программируемым коэффициентом усиления (корпусе TQFP); программируемый сторожевой
таймер с Внутренний генератор; SPI последовательный порт; шесть программный выбор режимов
энергосбережения. В режиме ожидания на остановках CPU, позволяя USART; двухпроводной интерфейс;
конвертер A/D; SRAM; Таймер/счетчики; SPI порт; и система прерываний, чтобы продолжать
функционировать. В Powerdownmode сохраняет содержимое регистров, но замораживает
Генератор, отключая все остальные микросхемы функции до следующего внешнего прерывания или
аппаратного сброса. В Powersave режим, асинхронный Таймер продолжает работать, позволяя
пользователю сохранять Таймер базы, а остальные устройство спит. ADC NoiseReductionmode
останавливает ЦПУ и все модули ввода/вывода, за исключением асинхронного
Таймер и АЦП, для минимизации шумов при коммутации АЦП во время преобразования. В режиме
ожидания, кристалл/резонатор Генератор работает, а остальные устройства спит. Это позволяет очень
быстро запустить в сочетании с низким энергопотребление. В расширенный режим ожидания, как главного
генератора и асинхронного таймера продолжить для запуска.
Устройство изготавливается с использованием Atmels энергонезависимой памяти высокой плотности по
технологии. На чип ISP Flash позволяет программе памяти, чтобы быть перепрограммирован в системе
через последовательный интерфейс SPI, с помощью обычных энергонезависимой памяти, программист, или
на чип, загрузки, программа, работающая на AVR ядро. Программа загрузки может использовать любой
интерфейс для загрузки прикладной программы в память приложений. Программное обеспечение в
BootFlashsection будем продолжать запускать, а приложение Flash обновлен раздел, предоставление
достоверной читать Во время операции записи. Объединив 8-битный RISC-процессор с системой Self
программируемой флэш-памяти на монолитный чип Atmel ATmega16A является
мощныммикроконтроллером, который обеспечивает очень гибкое и экономически эффективное решение
для многих встраиваемых приложений управления.
На ATmega16A поддерживается полным набором программных и системных инструментов для разработки,
включая: компиляторы C, макро-ассемблеры, программа отладчик/тренажеры, в цепи эмуляторы и
оценочные наборы.
2.2
Описания Выводов
2.2.1
VCC
Цифровой Напряжение питания.
2.2.2
GND
Земля.
2.2.3
Port A (PA7:PA0)
Порт служит в качестве аналоговых входов A/D конвертер.
Порт также служит 8-бит bi-directional I/O порт, если АЦП не используется. Порта ввода / вывода может
обеспечить внутренние резисторы " pullup " (выбирается для каждого бита). Порт выходной буферы имеют
симметричные характеристики привода с высокой раковиной и источник возможностей. Когда штыри PA0
PA7 используются в качестве входов и внешне вытащил низкие, они будут источником тока если внутренний
pullup резисторы активируются. Порт в кегли, когда tristated условия сброса становится активной, даже если
тактирование не работает.
2.2.4
PortB (PB7:PB0)
Порт B √ 8-разр. порт двунаправленного ввода-вывода с внутренними подтягивающими к плюсу
резисторами (выбираются раздельно для каждого разряда). Выходные буферы порта В имеют
симметричную выходную характеристику с одинаковыми втекающим и вытекающим токами. При вводе,
линии порта B будут действовать как источник тока, если внешне действует низкий уровень и включены
подтягивающие резисторы. Выводы порта B находятся в третьем (высокоимпедансном) состоянии при
выполнении условия сброса, даже если синхронизация не запущена. Порт В также выполняет некоторые
специальные функции ATmega16A, как указано на стр. 57.
2.2.5
PortC (PC7:PC0)
Порт C 8-бит bi-directional порт ввода/вывода с внутренним pullup резисторы (выбирается для каждого бита).
Порт C выход буферы имеют симметричные характеристики привода с высокой раковиной и источник
возможностей. Как входы, разъем C пен что внешне низко надвинута на лоб будет источник тока, если
резисторы " pullup " активируются. Порта C выводы tristated когда условия сброса становится активной, даже
если тактирование не работает. Если JTAG-интерфейс включен, pullup резисторы на контакты PC5(TDI),
PC3(TMS) и PC2(TCK) будет активирован, даже если сброс происходит.Порт C также выполняет функции
JTAG интерфейс и другие особенности ATmega16A, как указано на стр. 59.
2.2.6
PortD (PD7:PD0)
Порт D 8-бит bi-directional порт ввода/вывода с внутренним pullup резисторы (выбирается для каждого бита).
Порт вывода D буферы имеют симметричные характеристики привода с высокой раковиной и источник
возможностей. Как входы, порт D-пен что внешне низко надвинута на лоб будет источник тока, если
резисторы " pullup " активируются. Порта D выводы tristated когда условия сброса становится активной, даже
если тактирование не работает.Порт D также предлагает функции различных специальных функций
ATmega16A, как указано на стр. 62.
2.2.7
RESET
Вход Сброса. Низкий уровень сигнала на этом контакте дольше, чем минимальная длина импульса будет
генерировать сброс, даже если тактирование не работает. Минимальная длина импульса приведены в
таблице 27. 2 на стр. 282. Более короткие импульсы не гарантированно генерировать сброс.
2.2.8
XTAL1
Вход инвертирующий усилитель генератора и вход на внутренние тактирование операционной цепи.
2.2.9
XTAL2
Выход из инвертирующий усилитель генератора.
2.2.10
AVCC
AVCC-Напряжение питания pin для порта A и A/D конвертер. Она должна быть внешне подключен к VCC,
даже если АЦП не используется. Если АЦП используется, он должен быть подключен к VCC через фильтр
низких частот.
2.2.11
AREF
AREF-это аналоговое задание pin для A/D конвертер.
3.Ресурсов
Полный набор инструментов разработки, указания по применению и спецификации доступны для
скачивания на http://www.atmel.com/avr.
4.Хранения Данных
Надежность квалификация результаты показывают, что прогнозируемые хранения данных отказов
значительно меньше, чем 1 PPM в течение
20 лет при 85°C или 100 лет при 25°C.
5.О Примерах Кода
Эта документация содержит простые примеры кода, в которых кратко показано, как использовать различные
части устройства. Эти примеры предполагают, что часть конкретных заголовочный файл включается перед
компиляцией. Имейте в виду, что не все C поставщиками компиляторов включают бит определений в
файлах заголовков и обработки прерываний в C компилятор зависимые. Пожалуйста, подтвердите, C
компилятор, документацию для подробностей.
6.AVR CPU
6.1Обзор
В этом разделе обсуждаются Atmel AVR ядро архитектуры в целом. Основная функция процессора-core
обеспечить правильность выполнения программы. ЦП должен, следовательно, иметь возможность доступа
воспоминания, выполнять расчеты, контроль периферийных устройств и обрабатывать прерывания.
Рис. 6-1.
Блок-схема AVR MCU архитектура
В целях достижения максимальной производительности и параллелелизма у AVR-микроконтроллеров
используется Гарвардская архитектура с раздельными памятью и шинами программ и данных. Команды
в памяти программ выполняются с одноуровневой конвейеризацией. В процессе выполнения одной
инструкции следующая предварительно считывается из памяти программ. Данная концепция позволяет
выполнять одну инструкцию за один машинный цикл. Память программ представляет собой
внутрисистемно программируемую флэш-память.
Регистровый файл с быстрым доступом содержит 32 x 8-разр = 256. рабочих регистров общего назначения с
однотактовым циклом доступа. Благодаря этому достигнута однотактность работы арифметико-
логического устройства (АЛУ). При обычной работе АЛУ сначала из регистрового файла загружается два
операнда, затем выполняется операция, а после результат отправляется обратно в регистровый файл и
все это происходит за один машинный цикл.
6 регистров из 32 могут использоваться как три 16-разр. регистра косвенного адреса для эффективной
адресации в пределах памяти данных. Один из этих указателей адреса может также использоваться как
указатель адреса для доступа к таблице преобразования во флэш-памяти программ. Данные 16-разр.
регистры называются X-регистр, Y-регистр и Z-регистр и описываются далее в этом разделе.
АЛУ поддерживает арифметические и логические операции между регистрами, а также между
константой и регистром. Кроме того, АЛУ поддерживает действия с одним регистром. После выполнения
арифметической операции регистр статуса обновляется для отображения результата выполнения
операции.
Для ветвления программы поддерживаются инструкции условных и безусловных переходов и вызовов
процедур, позволяющих непосредственно адресоваться в пределах адресного пространства.
Большинство инструкций представляют собой одно 16-разр. слово. Каждый адрес памяти программ
содержит 16- или 32-разр. инструкцию. Флэш-память программ разделена на две секции: секция
программы начальной загрузки и секция прикладной программы. Обе секции имеют раздельные биты
защиты от записи и чтения/записи. Инструкция SPM (запись в секцию прикладной программы) должна
использоваться только внутри секции программы начальной загрузки.
При генерации прерывания и вызове подпрограмм адрес возврата из программного счетчика
записывается в стек. Стек эффективно распределен в статическом ОЗУ памяти данных и,
следовательно, размер стека ограничен общим размером статического ОЗУ и используемым его
объемом. В любой программе сразу после сброса должна быть выполнена инициализация указателя
стека (SP) (т.е. перед выполнением процедур обработки прерываний или вызовом подпрограмм).
Указатель стека √ SP √ доступен на чтение и запись в пространстве ввода-вывода. Доступ к статическому
ОЗУ данных может быть легко осуществлен через 5 различных режимов адресации архитектуры AVR.
Гибкий модуль прерываний содержит свои управляющие регистры в пространстве ввода-вывода и имеет
дополнительный бит общего разрешения работы системы прерываний в регистре статуса. У всех
прерываний имеется свой вектор прерывания в соответствии с таблицей векторов прерываний.
Прерывания имеют приоритет в соответствии с позицией их вектора. Прерывания с меньшим адресом
прерывания имеют более высокий приоритет.
I/O памяти содержит 64 адресов для периферийных функций процессора, как управляющие регистры, SPI и
другие Функции ввода/вывода.
Память I/O может быть доступна непосредственно, или в качестве пространства данных местах после
RegisterFile, $20 - $5F.
($20(32)-$5F(95)=63 адреса)
• Bit 6 – T: BitCopyStorage
Разряд 6 √ T: Хранение копируемого бита
Специальные битовые операции BLD (копирование из Т-бита) и BST (копирование в Т-бит) используют в
качестве источника и получателя данных бит T. Любой бит из регистрового файла может быть
скопирован в бит T инструкцией BST, а также содержимое бита Т может быть скопировано в любой бит
регистрового файла с помощью инструкции BLD.
• Bit 5 – H: HalfCarryFlag
Разряд 5 √ H: Флаг половинного переноса
Данный флаг устанавливается при выполнении некоторых арифметических инструкций и индицирует о
возникновении половинного переноса. Как правило половинный перенос широко используется в двоично-
десятичной арифметике. Более подробная информация приведена в описании набора инструкций.
В разделе “InstructionSetDescription” для подробной информации.
• Bit 2 – N: NegativeFlag
Разряд 2 √ N: Флаг отрицательного результата
Флаг отрицательного результата N индицирует, что результатом выполнения арифметической или
логической операции является отрицательное значение. Более подробная информация приведена в
описании набора инструкций. В разделе “InstructionSet Описание” для подробной информации.
• Bit 1 – Z: ZeroFlag
Разряд 1 √ Z: Флаг нулевого результата
Флаг нулевого результата Z индицирует, что результатом выполнения арифметической или логической
операции является ноль. Более подробная информация приведена в описании набора инструкций. В
разделе “InstructionSet описание” для получения подробной информации.
• Bit 0 – C: CarryFlag
Разряд 0 √ C: Флаг переноса
Флаг переноса C индицирует о возникновении переноса в результате выполнения арифметической или
логической операции. Более подробная информация приведена в описании набора инструкций.В разделе
“InstructionSet описание” подробную информацию.
Рис. 6-3.
X-, Y-, и Z-регистры
В различных режимах адресации данные адресные регистры выполняют функции фиксированного
смещения, автоматического инкрементирования и автоматического декрементирования (см. описание
набора инструкций для более подробного изучения).(см. Instruction Set Reference").
6.5УказательСтека
Стек обычно используется для хранения временных данных, для хранения локальных переменных и для
хранения адресов возврата при прерываниях и вызовах подпрограмм. Регистр указателя стека указывает
на вершину стека.
Указатель стека указывает на область стека в статическом ОЗУ данных, где размещены стеки
прерываний и подпрограммы.
Данная область стека в статическом ОЗУ памяти данных должна бытьопределена программно до вызова любой
процедуры или разрешения прерываний.
Начальное значение указателя стека равно последний адрес из внутренней SRAM и стек Указатель должен быть
установлен в точке выше начала SRAM, см. рис. 7-2 на стр. 17.
Таблица 6-1.
Рис. 6-5 иллюстрирует концепцию внутренней временной диаграммы для регистрового файла. За один
такт синхронизации АЛУ выполняет действие над двухрегистровым операндом и возвращает результат
обратно в регистр-получатель.
Рис. 6-5. Один цикл операции ALU
6.7 сброс и обработка прерываний
AVR-микроконтроллеры поддерживают несколько различных источников прерываний. Все прерывания, а
также сброс имеют свой индивидуальный вектор в памяти программ. Для каждого прерывания имеется
собственный бит разрешения. Кроме того, имеется возможность общего разрешения работы прерываний
с помощью управления соответствующим битом в статусном регистре. В зависимости от значения
программного счетчика прерывания могут быть автоматически отключены, если запрограммировать биты
защиты загрузочного сектора BLB02 или BLB12. Данная функция улучшает защиту программы. См.
раздел ⌠Программирование памяти■ для уточнения деталей. на стр. 251
Наименьшие адреса в памяти программ по умолчанию определены как вектора сброса и прерываний.
Полный перечень векторов приведен в разделе "Прерывания"на стр. 44. В перечне также определяется уровень
приоритетов различных прерываний. Меньшие адреса обладают более высоким уровнем приоритетом.
Сброс (RESET) имеет наивысший приоритет, за ним следует INT0 √ запрос на внешнее прерывание по
входу INT0. Векторы прерывания могут быть перемещены в начало загрузочного сектора флэш-памяти
установкой бита IVSEL в регистре управления микроконтроллером GeneralInterruptControlRegister (GICR). См.
раздел "Прерывания■на стр. 44для более подробного ознакомления. Вектор сброса может быть также
перемещен в начало загрузочногосектора флэш-памяти путем программирования конфигурационного бита
BOOTRST (см.на стр. 237⌠Само программирование из сектора начальной загрузки с поддержкой чтения во время
записи■). После возникновения прерывания бит I общего разрешения прерываний сбрасывается и все
прерываниязапрещаются. Пользователь может программно записать лог. 1 в бит I для разрешения вложенных
прерываний. В этом случае все разрешенные прерывания могут прервать текущую процедуру обработки
прерываний. Бит I автоматически устанавливается после выполнения инструкции выхода из прерывания
RETI.
Имеется два основных типа прерываний. Первый тип прерываний активизируется событием, которое
приводит к установке флага прерываний.
Пример кода на Си
char cSREG;
cSREG = SREG; /* Запоминаем значение SREG */
/* Отключение прерываний на время задания временной последовательности */
_CLI();
EECR |= (1<<EEMWE); /* Старт записи в ЭСППЗУ EEPROM */
EECR |= (1<<EEWE);
SREG = cSREG; /* Восстанавливаем значение SREG (бит I) */
Для разрешения прерываний используется инструкция SEI, а следующая за SEI инструкция будет
выполнена перед отработкой любого отложенного прерывания, как показано в примере.
Реакция на отработку запроса на прерывание длится минимум 4 машинных цикла. По истечении этого
времени программа продолжает свое выполнение с вектора соответствующего прерывания. В течение 4
машинных циклов состояние программного счетчика помещается в стек. Как правило, по адресу вектора
прерываний хранится команда перехода на процедуру обработку прерываний, а на данный переход
затрачивается еще 3 машинных цикла. Если запрос на прерывание возникает в процессе исполнения
инструкции, требующей более 1 машинного цикла на выполнение, то прерывание будет обработано
только после выполнения этой инструкции. Если прерывание возникает во время нахождения
микроконтроллера в режиме сна, то реакция на прерывание увеличится еще на 4 цикла. Данная
задержка связана с временем старта из выбранного режима сна.
Выход из процедуры обработки прерывания требует 4 машинных цикла. В течение этого времени
двухбайтный программный счетчик извлекается из стека, указатель стека дважды инкрементируется и
устанавливается бит I в регистре статуса SREG
7. AVR Память
7.1 Обзор
В данном разделе описываются различные виды памяти ATmega116. В соответствии с гарвардской
архитектурой память AVR-микроконтроллера разделена на две области: память данных и память
программ. Кроме того, ATmega16 содержит память на ЭСППЗУ(EEPROM) для энергонезависимого хранения
данных. Все три области памяти являются линейными и равномерными.
Первые 1120 ячеек памяти данных относятся к файлу регистров, памяти ввода-вывода, расширенной памяти
ввода-вывода и встроенному статическому ОЗУ данных.
Память и внутренней SRAM данных.
Первые 96 ячейках расположен файл регистров и стандартная память ввода-вывода,
следующих 1024 занимает внутреннее ОЗУ данных.
Реализовано пять различных способов адресации для охвата всей памяти: прямая, косвенная со
смещением, косвенная, косвенная с предварительным декрементом и косвенная с последующим
инкрементом. Регистры R26┘R31 из файла регистров используются как регистры-указатели для
косвенной адресации.
ATmega16 содержит 512 байт памяти данных на ЭСППЗУ(EEPROM). Она организована как отдельная область
памяти данных, в которой один байт может быть записан и считан. ЭСППЗУ(EEPROM) характеризуется
износостойкостью 100000 циклов чтения/записи.
В разделе ⌠Программирование памяти на страницах 262,267, 254 содержится детальное описание
программирование ЭСППЗУ(EEPROM) через интерфейсы SPI, JTAG или параллельное программирование.
Если микроконтроллер переводится в режим выключения (Power Down) командой sleep в процессе
выполнения операции записи в ЭСППЗУ(EEPROM), то операция записи будет продолжена и завершится по
истечении требуемого времени доступа для записи. Однако, по завершении операции записи кварцевый
генератор будет продолжать работу, и как следствие, микроконтроллер будет переведен в режим
снижения мощности не полностью. С учетом этого, рекомендуется проверять окончание операции записи
в ЭСППЗУ(EEPROM) перед переводом в режим выключения (Power-down).
В те моменты, когда напряжение VCC находится на уровне недостаточном для корректной работы ЦПУ и
ЭСППЗУ(EEPROM), содержимое ЭСППЗУ(EEPROM) может быть нарушено. Данные проблемы аналогичны
устройствам, использующих отдельное ЭСППЗУ(EEPROM), поэтому, в данном случае необходимо применить те
же меры. При сниженном напряжении питания может быть две причины нарушения содержимого
ЭСППЗУ(EEPROM). Первая причина состоит в возможности корректной регулярной записи в ЭСППЗУ только при
определенном напряжении питания. Вторая состоит в возможности некорректного выполнения программы
микроконтроллером при чрезмерном низком уровне питания.
Повреждение данных в ЭСППЗУ(EEPROM) может быть легко предотвращено, если придерживаться следующих
рекомендаций:
Микроконтроллер необходимо удерживать в состоянии сброса (низкий уровень на выводе RESET) при
недостаточности уровня питания. Аналогично это можно выполнить, разрешив работу встроенного
детектора питания (BOD). Если пороговый уровень встроенного детектора питания не соответствует
необходимому порогу, то следует применить внешнюю схему сброса при снижении VCC (супервизор
питания). Если сброс возникает во время действия операции записи, то запись будет завершена при
условии достаточности уровня питания.
Некоторые флаги статуса сбрасываются путем записи в них лог. 1. Инструкции CBI и SBI работают только
с регистрами по адресам $00-$1F.
Регистры управления вводом-выводом и периферийными устройствами описываются в следующих
разделах.
Сигнал разрешения чтения из ЭСППЗУ(EEPROM) EERE является стробом чтения ЭСППЗУ(EEPROM). После
записи корректного адреса в регистр адреса EEAR бит EERE должен быть установлен к лог.1 для запуска
механизма чтения ЭСППЗУ(EEPROM). Чтение из ЭСППЗУ(EEPROM) выполняется одновременно с инструкцией,
поэтому, запрашиваемые данные готовы для считывания сразу по ее завершении. После чтения из
ЭСППЗУ(EEPROM) ЦПУ задерживается на четыре машинных цикла, а только затем выполняет следующую
инструкцию. Пользователь должен опросить флаг EEWE до начала операции чтения. Если осуществляется
операция записи, то невозможно не только считать ЭСППЗУ, но и изменить регистр адреса EEAR. Во время
доступа к ЭСППЗУ используется калиброванный генератор. В таблице 2 приведено типичное время
программирования ЭСППЗУ(EEPROM) через ЦПУ.
Далее представлены примеры кодов функций записи в ЭСППЗУ(EEPROM) на языках Ассемблер и Си. В данных
примерах предполагается, что прерывания работают таким образом, что ни одно не возникает в процессе
выполнения данных функций (например, путем общего отключения прерываний). Кроме того, считается, что из
загрузочного сектора не выполняется программирование флэш-памяти. В противном случае функция записи в
ЭСППЗУ(EEPROM) должна ожидать окончания действия инструкции SPM.
Пример кода на Си
void EEPROM_write(unsigned int uiAddress, unsigned char ucData)
{
/* Ожидаем окончание предыдущей записи */
while(EECR & (1<<EEWE))
;
/* Указание адреса и данных */
EEAR = uiAddress;
EEDR = ucData;
/* Запись лог. 1 в EEMWE */
EECR |= (1<<EEMWE);
/* Запуск записи в ЭСППЗУ путем установки EEWE */
EECR |= (1<<EEWE);
}
EEPROM_read:
; Ожидание завершения предыдущей записи
sbic EECR,EEWE
rjmp EEPROM_read
; Установка адреса (r18:r17) в адресном регистре
out EEARH, r18
out EEARL, r17
; Запуск чтения ЭСППЗУ путем установки EERE
sbi EECR,EERE
; Считывание данных из регистра данных ЭСППЗУ
in r16,EEDR
ret
Пример кода на Си
Синхронизация ЦПУ подключается к модулям микроконтроллера, которые связаны с работой ядра AVR.
Примерами таких модулей являются файл регистров общего назначения, регистр статуса и память
данных, выполняющая функцию стека. Остановка синхронизации ЦПУ приводит к прекращению
выполнения ядром любых действий и вычислений.
Осциллятор может работать в трех различных режимах, каждый оптимизированный для определенного
частотного диапазона.
рабочий режим выбран предохранителями CKSEL3:1 как показано в Таблице 8-3.
Примечание:
1. Данная опция должна задаваться только при использовании керамического резонатора, а не
кварцевого.
Конфигурационные биты CKSEL0 совместно с битами SUT1..0 выбирают время старта в соответствии с
таблицей 8-4.
Table 8-4.
Временая задержка при запуске для различных настроек кварцевого генератора
Прим.:
1. Данные опции допускается использовать, только если микроконтроллер работает не на частоте
близкой к максимальной рабочей, а также, если стабильность частоты при старте не важна для
данного приложения. Данные опции не приемлемы при использовании кварцевых резонаторов.
2. Данные опции реализованы для использования керамических резонаторов и гарантируют
стабильность частоты после запуска. При данных установках допускается использовать
кварцевый резонатор, но при условии, что рабочая частота микроконтроллера меньше
максимальной, а также, если стабильность частоты во время запуска не важна для данного
приложения.
Для использования тактирования кварцевого резонатора 32.768 кГц в качестве источника синхронизации
необходимо выбрать низкочастотный кварцевый генератор путем установки конфигурационных бит CKSEL
равными “1001”. Подключение кварцевого резонатора показано на рисунке 8-2. Путем
программирования конфигурационного бита пользователь может разрешить подключение встроенных
конденсаторов к выводам XTAL1 и XTAL2, тем самым исключая необходимость применения внешних
конденсаторов. Внутренние конденсаторы имеют номинал 36 пФ. После выбора данного генератора,
длительности задержек при старте определяются конфигурационными битами SUT как показано в
таблице 8-5.
Таблица 8-5 √ Длительности задержек при старте для низкочастотного кварцевого резонатора
SUT1..0 Длительность задержки Дополнительная задержка Рекомендуемая область
при выходе из режима после сброса (VCC= 5.0В) применения
выключения и
экономичного режима
00 1K CK(1) 4.1 мс Быстро нарастающее
питание или включен
детектор питания BOD
01 1K CK(1) 65 мс Медленно нарастающее
питание
10 32K CK 65 мс Стабильная частота при
старте
00 Зарезервировано
Примечание:
1. Данные опции необходимо использовать, если стабильность частоты при старте не важна для приложения.
Генератор может работать в четырех различных режимах, каждый из которых ориентирован на специфический
частотный диапазон. Рабочий режим выбирается конфигурационными битами CKSEL3..0 (см. табл. 8-6).
Таблица 8-6 √ Рабочие режимы внешнего RC-генератора
После разрешения работы данного генератора длительность задержки при старте определяется установками
конфигурационных бит SUT как показано в (см. табл. 8-7).
Таблица 8-7 Длительность задержек при старте после выбора внешнего RC-генератора.
Примечание:
1. Данная опция не должна использоваться на тактовых частотах близких к максимальной.
Встроенный калиброванный RC-генератор формирует фиксированные тактовые частоты 1.0, 2.0, 4.0 или
8.0 МГц. Данные значения частот являются номинальными и определены для напряжения питания 5В
при 25 ° C. Одна из этих частот может быть выбрана в качестве тактовой, если запрограммировать
конфигурационные биты CKSEL в соответствии с таблицей 8-8. После выбора микроконтроллер будет
работать без внешних компонентов. Конфигурационный бит CKOPT должен быть всегда
незапрограммированным, если используется внутренний RC-генератор. В процессе сброса
калибровочный байт аппаратно записывается регистр OSCCAL, тем самым автоматически выполняя
калибровку RC-генератора. При питании 5В, температуре 25 ° C и выбранной частоте генератора 1.0 МГц
данный метод калибровки обеспечивает погрешность генерации частоты не хуже +/-3% от номинального
значения. Использование методов калибровки во время работы микроконтроллера позволяет достичь
точности +/-1% при любой заданной температуре и напряжении VCC (см. рекомендации по применению
www.atmel.com/avr). При использовании данного генератора в качестве тактового генератор сторожевого
таймера также останется использоваться для тактирования сторожевого таймера и для задания
длительности задержки при сбросе. Более подробная информация о предварительно
запрограммированном калибровочном значении приведена в разделе ⌠Калибровочный байт на стр 253].
После выбора данного источника синхронизации длительность задержки при запуске определяется
конфигурационными битами SUT как показано в таблице 8-10.
Таблица 8-10 Длительность задержки при запуске при выборе внешней синхронизации
После подключения внешнего тактового источника необходимо избегать внезапных изменений его
частоты для гарантирования стабильности работы микроконтроллера. Если на следующем такте частота
изменится более чем на 2% по сравнению с предыдущим, то поведение микроконтроллера может стать
непредсказуемым. Данный механизм реализован для гарантирования нахождения микроконтроллера в
состоянии сброса в процессе таких изменений тактовой частоты.
Примечание:
Осциллятор Таймера/Счетчика используют то же тип кварцевого генератора(crystal oscillator) как низкочастотный
осциллятор(Low-Frequency Oscillator) и внутреннее конденсаторы имеют тот же номинал значения 36pF.
9.1 Обзор
Для перевода микроконтроллера в один из шести режимов сна необходимо предварительно установить
бит SE в регистре MCUCR, а затем выполнить инструкцию SLEEP. Биты SM2, SM1 и SM0 регистра
MCUCR задают в какой именно режим будет переведен микроконтроллер (холостой ход "Idle",
уменьшение шумов АЦП "ADC Noise Reduction", выключение "Power-down", экономичный "Power-save",
дежурный "Standby" или расширенный дежурный "Extended Standby") после выполнения команды SLEEP
(см. табл. 17). Выход из режима сна происходит при возникновении разрешенного прерывания. В этом
случае, помимо времени старта микроконтроллер приостанавливается на 4 машинных цикла, выполняет
процедуру обработки прерывания и продолжает выполнять команды следующие за SLEEP. Содержимое
файла регистров и статического ОЗУ остается неизменным после выхода из режима сна. Если во время
действия режима сна возникает условие сброса, то микроконтроллер пробуждается и исполняет код
программы по вектору сброса.
Table 9-1 Активные тактируемые модули и источники пробуждения в различных режимах сна
Примечания:
1.
Внешних кварцевых или керамических резонаторов, выбранный как генератор тактовых импульсов.
2.
Если бит AS2 в ASSR установлен.
3.
Только INT2 или прерывание уровня INT1 и INT0.
Выберите любые из шести режима ожидания, SE бит в MCUCR должен быть записан к логическому 1 и
инструкция сна должен быть выполнена.
SM2, SM1 и SM0 биты в MCUCR Регистре выбрать какой режим сна
(IDLE(Неактивный), ADC noise (шумоподавление), Power-down (выключение питания), Power-save (сохранение
питания), Standby (резервное устройство) или Extended Standby(расширенное резервное устройство)),
будет активирован в инструкцию сна.
MCU тогда остановится на 4 цикла в дополнение ко времени запуска это выполнит подпрограмму прерывания и
выполнит инструкции после сна.
Содержимое файла Регистра и SRAM будут находится неизменно когда устройство пробудится от сна.
Если Сброс происходит во время режима ожидания, MCU просыпается и выполняется Вектор Сброса (Reset
Vector).
В режиме холостого хода допускается пробуждение от любого внешнего или внутреннего прерывания,
например, при переполнении таймера или завершении передачи УСАПП(USART). Если пробуждение по
прерыванию аналогового компаратора не требуется, то аналоговый компаратор может быть отключен
путем установки бита ACD в регистре управления и состояния аналогового компаратора ACSR. Это
позволит уменьшить потребляемый ток в режиме холостого хода. Если разрешена работа АЦП(ADC), то
преобразование автоматически запускается после перевода в данный режим.
Когда биты SM2:0 записаны в 010, инструкция SLEEP заставляет MCU ввести режим Выключения питания.
В этом режиме остановлен Внешний Осциллятор, в то время как Внешние прерывания, Двухпроводное
тактирование адреса Последовательного интерфейса и Сторожевой таймер продолжают работать (если
включено).
Только Внешний Сброс, Сторожевой Сброс, Сброс Снижения напряжения, Двухпроводное прерывание
соответствия адреса Последовательного интерфейса, Внешнее прерывание уровня на INT0 или INT1, или
Внешнее прерывание на INT2 могут разбудить MCU.
Этот режим ожидания(Sleep) в основном останавливает все сгенерированные такты, позволяя работу только
асинхронных модулей.
Обратите внимание на то, что, если инициированное прерывание уровня используется для пробуждения от
режима Выключения питания, измененный уровень, как должно сохраниться, в течение некоторого времени будит
MCU.
При пробуждении от режима Выключения питания есть задержка от условия пробуждения, происходит, пока
пробуждение не вступает в силу.
Период пробуждения определен теми же Fuses CKSEL, которые определяют период тайм-аута сброса, как
описано в “Генераторах тактовых импульсов” на странице 25.
Если таймер-счетчик2 тактируется асинхронно, т.е., бит AS2 установлен в регистре ASSR, то таймер-счетчик2
будет работать во время сна.
Выход из режима сна возможен как по переполнению
таймера, так и при выполнении условия сравнения, если соответствующее прерывание для таймера-счетчика2
разрешено в регистре TIMSK, а также установлен бит общего разрешения прерываний в регистре SREG.
В данном режиме сна останавливаются все тактовые источники за исключением асинхронных (clkASY),
работающих только совместно с асинхронными модулями, в т.ч. таймер-счетчик2 с разрешенной опцией
асинхронного тактирования.
Если АЦП был активизирован, то он останется активным и во всех режимах сна. Для снижения мощности
рекомендуется отключать АЦП перед переводом в режим сна. Если АЦП был отключен, а затем снова
включен, то следующее преобразование будет расширенным (см. ⌠Аналогово-цифровой преобразователь on
page 196").
Перед входом в режим холостого хода аналоговый компаратор необходимо выключить, если он не
используется. Перед входом в режим уменьшения шумов АЦП аналоговый компаратор должен быть
отключен. При входе в другие режимы сна аналоговый компаратор отключается автоматически. Однако,
если к неинвертирующему входу аналогового компаратора выбрано подключение встроенного источника
опорного напряжения, то перед входом в любой режим сна аналоговый компаратор необходимо
отключать. В противном случае встроенный источник опорного напряжения останется включенным
независимо от режима сна (см. также ⌠Аналоговый компаратор на стр 193).
•Сброс при подаче питания. Микроконтроллер переходит в состояние сброса, если напряжение питания ниже
порога сброса при подаче питания (VPOT).
•Внешний сброс. Микроконтроллер переходит в состояние сброса, если на вывод RESET подать низкий
логический уровень на время дольше, чем минимальная длительность импульса сброса.
•Сброс по сторожевому таймеру. Если разрешена работа сторожевого таймера и истек период его срабатывания,
то микроконтроллер сбрасывается.
•Сброс при снижении питания. Микроконтроллер сбрасывается, если напряжение питания VCC становится ниже
порогового значения (VBOT) и разрешена работа схемы контроля питания BOD.
•Сброс через интерфейс JTAG. Микроконтроллер находится в состоянии сброса до тех пор, пока в регистре
сброса записана лог. 1 в одной из сканируемых цепей JTAG-системы. См. раздел ⌠Граничное сканирование IEEE
1149.1 (JTAG) на стр 219.
10.1.2 Сброс при подаче питания
Импульс сброса при подаче питания (POR) генерируется встроенной схемой. Пороговый уровень сброса
приведен в таблице 10-2. POR инициируется всякий раз, когда VCC ниже порогового уровня. На стр “System and
Reset Characteristics” on page 282.
Схема POR может использоваться для запуска микроконтроллера, а также для выявления нарушения режима
питания.
Функцией схемы сброса при подаче питания (POR) является удержание микроконтроллера в состоянии
сброса в течение определенного времени после того, как напряжение достигло уровня сброса при подаче
питания. Если напряжение питания снизится ниже определенного уровня, то микроконтроллер снова
сбросится без всяких задержек.
Figure 10-2.
MCU Start-up, RESET Tied to VCC.
Рисунок 10-3 Запуск микроконтроллера (RESET соединен с VCC).
ATmega16 содержит встроенную схему контроля питания (BOD), которая выполняет сравнение уровня
VCC с фиксированным пороговым значением. Порог срабатывания схемы BOD может выбираться с
помощью конфигурационного бита BODLEVEL. Порог равен 2.7В, когда BODLEVEL незапрограммирован,
или 4.0В, когда BODLEVEL запрограммирован. Для исключения автоколебательного режима схема BOD
характеризуется гистерезисом. С учетом гистерезиса результирующие пороги срабатывания следующие:
VBOT+ = VBOT + VHYST/2 и VBOT- = VBOT - VHYST/2.
Схема BOD может быть включена или отключена с помощью конфигурационного бита BODEN. Если
разрешена работа BOD (BODEN запрограммирован) и уровень VCC снизился ниже порога срабатывания
(VBOT- на рисунке 10-5), то схема BOD переводит микроконтроллер в состояние сброса. Когда VCC
достигает значения выше порога срабатывания (VBOT+ на рисунке 10-5), то запускается счетчик задержки
и микроконтроллер начнет работу по истечении времени tTOUT.
Схема BOD реагирует на снижение VCC, если напряжение остается меньшим порога срабатывания
дольше чем период времени tBOD (см. “System and Reset Characteristics” on page 282.)
Рисунок 10-5 Сброс микроконтроллера схемой контроля питания
When the Watchdog times out, it will generate a short reset pulse of one CK cycle duration. On the falling edge
of this pulse, the delay timer starts counting the Time-out period tTOUT. For details, refer to “Watchdog Timer” on
page 40.
Figure 10-6.
Watchdog Reset During Operation
ИОН характеризуется задержкой при включении, которая может оказать негативное влияние, если не
будет учтена.
Время задержки дано в “Системе и Характеристиках Сброса” на странице 282.
Для оптимизации энергопотребления ИОН не всегда находится во включенном состоянии. ИОН остается во
включенном состоянии в следующих случаях:
1. Когда разрешена работа схемы контроля питания BOD (запрограммирован конфигурационный бит BODEN).
2. Если ИОН подключен ко входу аналогового компаратора (установлен бит ACBG в ACSR).
3. Если разрешена работа АЦП.
Следовательно, когда работа BOD запрещена и установлен бит ACBG или разрешена работа АЦП,
программист должен предусмотреть задержку на время запуска ИОН перед использованием выходных
данных аналогового компаратора или АЦП. В целях снижения потребляемой мощности в режиме
выключения (Power-down) программист должен избежать приведенных выше трех условий для
гарантирования, что ИОН будет отключен после перевода микроконтроллера в режим выключения.
The MCU Control and Status Register provides information on which reset source caused an MCU Re
The MCU Control and Status Register provides information on which reset source caused an MCU Reset.
• Разряд 4 √ JTRF: Флаг индикации сброса через JTAG-интерфейс
Данный бит принимает единичное состояние, если сброс был вызван записью лог. 1 в регистр JTAG
Reset JTAG-инструкцией AVR_RESET. Данный бит сбрасывается автоматически при подаче питания или
путем непосредственной записи лог. 0 в данный флаг.
Если флаги сброса необходимо использовать для определения причины сброса, то программист должен
предусмотреть сброс значений флагов MCUCSR желательно сразу после опроса их значений. Если
регистр очищается перед возникновением другого сброса, то источник данного сброса может быть
найден среди флагов сброса.
В следующих примерах приведены функции выключения сторожевого таймера на Ассемблере и Си. В примерах
предполагается, что система прерываний настроена таким образом, чтобы во время выполнения функции не
возникло прерывание (например, с помощью общего запрета прерываний инструкцией cli ).
WDT_off:
; Запись лог. 1 в WDCE и WDE
ldi r16, (1<<WDCE)|(1<<WDE)
out WDTCR, r16
; Выкл. сторожевого таймера
ldi r16, (0<<WDE)
out WDTCR, r16
ret
Пример кода на Си
void WDT_off(void)
{
/* Запись лог. 1 в WDCE и WDE */
WDTCR = (1<<WDCE) | (1<<WDE);
/* Выкл. сторожевого таймера */
WDTCR = 0x00;
}
11. Прерывания
11.1 Обзор
В этом разделе описываются специфические особенности обработки прерываний, как выполнено в ATmega16A.
Общее описание обработки прерываний приведено в разделе ⌠Сброс и обработка прерываний на странице 13.
Прим.:
1. Если конфигурационный бит BOOTRST запрограммирован, то микроконтроллер выполняет
переход на адрес сброса в загрузочном секторе, см. ⌠ Самопрограммирование из сектора начальной загрузки с
поддержкой чтения во время записи на стр 237
2. Если установлен бит IVSEL в регистре GICR(MCUCR), то векторы прерываний перемещаются в начало
загрузочного сектор флэш-памяти. В этом случае к адресу каждого вектора прерывания из
таблицы прибавляется стартовый адрес загрузочного сектора флэш-памяти.
Прим. :
1
Адрес сброса загрузочного сектора показан в таблице 25-6 на сто 249.
Для конфигурационного бита BOOTRST =1 означает незапрограммированное состояние,
0- запрограммированное.
Ниже приведено большинство типичных и общих программных установок адресов сброса и векторов
прерываний у ATmega16A:
11.2.2 GICR – General Interrupt Control Register (Общий регистр команд прерывания)
Разряд 1 √ IVSEL: Выбор вектора прерывания
Если бит IVSEL сброшен (=0), то векторы прерываний размещаются в начале флэш-памяти. Если
данный бит установлен (=1), то векторы прерываний перемещаются в начало загрузочного сектора
флэш-памяти. Фактический адрес начала загрузочного сектора определяется значением
конфигурационных бит BOOTSZ.
См. раздел ⌠Самопрограммирование из сектора начальной загрузки с поддержкой чтения во время записи для
выяснения подробностей.
Boot Loader Support – Read-While-Write Self-Programming” on page 237 for details
Во избежание несанкционированных
изменений таблицы векторов прерываний необходимо выполнить специальную последовательность
записи при изменении бита IVSEL:
1. Записать лог. 1 в бит разрешения изменения вектора прерывания (IVCE).
2. В течение четырех машинных циклов записать желаемое значение в IVSEL, при этом записывая
лог.0 в IVCE.
Прерывания будут автоматически отключены при выполнении такой последовательности. Прерывания
отключаются во время установки IVCE и останутся отключенными до перехода к инструкции следующей
за инструкцией записи в IVSEL. Если IVSEL не записан, то прерывания будет находиться в отключенном
состоянии 4 такта синхронизации. Состояние бита I в регистре статуса не затрагивается при
автоматическом отключении прерываний.
Прим. : Если векторы прерываний помещаются в загрузочный сектор и бит защиты загрузочного сектора
BLB02 запрограммирован, то прерывания будут отключены при выполнения программы с секторе
прикладной программы. Если векторы прерываний размещены в прикладном секторе и бит защиты
BLB12 запрограммирован, то прерывания становятся отключенными при выполнении программы в
загрузочном секторе.
См. также ⌠ Самопрограммирование из сектора начальной загрузки с поддержкой чтения во время записи для
более подробного изучения бит защиты.
“Boot Loader Support – Read-While-Write Self-Programming” on page 237
Ссылки на регистры и биты регистров в данном разделе даны в общей форме. При этом, символ “x”
заменяет наименование ПВВ, а символ ”n” заменяет номер разряда ПВВ. Однако при составлении
программы необходимо использовать точную форму записи. Например, PORTB3, означающий разряд 3
порта B, в данном документе записывается как PORTxn. Адреса физических регистров ввода-вывода и
распределение их разрядов приведены в разделе ⌠Описание регистров портов ввода-вывода". На стр 64
Для каждого порта ввода-вывода в памяти ввода-вывода зарезервировано три ячейки: одна под регистр
данных PORTx, другая под регистр направления данных DDRx и третья под состояние входов порта PINx. Ячейка,
хранящая состояние на входах портов, доступна только для чтения, а регистры данных и направления данных
имеют двунаправленный доступ. Кроме того, установка бита выключения подтягивающих резисторов PUD
регистра SFIOR отключает функцию подтягивания на всех выводах всех портов.
Обратите внимание, что для некоторых портов разрешение альтернативных функций некоторых выводов
делает невозможным использование других выводов для универсального цифрового ввода-вывода.
Прим. 1: Сигналы WPx, WDx, RRx, RPx и RDx являются общими в пределах одного порта. Сигналы clkI/O,
SLEEP, и PUD являются общими для всех портов.
Режим и состояние для каждого вывода определяется значением соответствующих разрядов трех
регистров: DDxn, PORTxn и PINxn. Как показано в ⌠Описании регистров портов ввода-вывода доступ к
битам DDxn возможен по адресу DDRx в пространстве ввода-вывода и, соответственно, к битам PORTxn
по адресу PORTx, а к битам PINxn по адресу PINx.
Биты DDxn регистра DDRx определяют направленность линии ввода-вывода. Если DDxn = 1, то Pxn
конфигурируется на вывод. Если DDxn=0, то Pxn конфигурируется на ввод.
Если PORTxn = 1 при конфигурации линии порта на ввод, то разрешается подключение подтягивающего
резистора. Для выключения данного резистора необходимо записать в PORTxn лог. 0 или настроить
линию порта на вывод. Во время сброса все линии портов находятся в третьем (высокоимпедансном)
состоянии, даже если не работает синхронизация.
Если PORTxn = 1 при конфигурации линии порта на вывод, то состояние выхода будет определяться
значением PORTxn. Подтягивающий резистор включен.
Если PORTxn = 0 когда pin_ сконфигурирован как выходной pin, port pin управляется низким (0).
Подтягивающий резистор выключен.
.
Поскольку одновременная запись в регистры DDRx и PORTx невозможна, то при переключении между
третьим состоянием ({DDxn, PORTxn} = 0b00) и выводом лог. 1 ({DDxn, PORTxn} = 0b11) должно
возникнуть промежуточное состояние или с подключенным подтягивающим резистором ({DDxn, PORTxn}
= 0b01) или с выводом лог. 0 ({DDxn, PORTxn} = 0b10). Как правило, переход через состояние с
подключением подтягивающего резистора эквивалентно состоянию вывода лог.1, если вывод
микроконтроллера связан с высокоимпедансным входом. В противном случае, необходимо установить
бит PUD регистра SFIOR для выключения всех подтягивающих резисторов на всех портах
Независимо от значения бита направления данных DDxn состояние вывода порта может быть опрошено
через регистровый бит PINxn. Как показано на рисунке 12-2 регистровый бит PINxn и предшествующая ему
триггерная защелка составляют синхронизатор. Данный подход позволяет избежать метастабильности,
если изменение состояния на выводе произошло около фронта внутренней синхронизации. Однако
такой подход связан с возникновением задержки. На рисунке 12-3 представлена временная диаграмма
синхронизации во время опроса внешне приложенного к выводу уровня. Длительности минимальной и
максимальной задержек на распространение сигнала обозначены как tpd,max и tpd,min, соответственно.
Рассмотрите период тактирования, запускающийся вскоре после первого падающего края системного
тактирования. Фиксатор закрыт, когда такты низки, и идут прозрачные, когда такты высоки, как обозначены
теневой областью сигнала “SYNCLATCH”. Сигнальное значение фиксируют, когда системные такты идут низко.
Это синхронизировано в Регистр PINxn в последующем положительном краю тактирования. Как обозначено этими
двумя стрелками tpd, максимальный и tpd, минута, единственный сигнальный переход на контакте будет
задержан между ½ и 1½ системными периодами тактирования в зависимости от времени утверждения.
Когда чтение назад программного обеспечения присваивало значение контакта, только для указанных целей,
инструкция должна быть вставлена как обозначено в рисунке 12-4. Наборы команд “СИНХРОНИЗАЦИЯ
ФИКСИРУЮТ” сигнал в положительном краю тактирования. В этом случае задержка tpd через синхронизатор
является одним системным периодом тактирования.
Рисунок 12-4.
Синхронизация, Читая программное обеспечение Присвоенное Значение Контакта
В следующих примерах показано как установить на линиях 0 и 1 порта В уровень лог. 1, а на линиях 2 и 3
лог. 0, а также как настроить линии 4-7 на ввод с подключением подтягивающих резисторов на линиях
6 и 7. Результирующее состояние линий считываются обратно, но, с учетом сказанного выше, включена
инструкция “nop” для обеспечения возможности обратного считывания только что назначенного состояния
некоторых выводов.
unsigned char i;
...
/* Разрешаем подтягивание и устанавливаем высокие выходные уровни */
/* Определяем направления данных линий портов */
PORTB = (1<<PB7)|(1<<PB6)|(1<<PB1)|(1<<PB0);
DDRB = (1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0);
/* Вставляем инструкцию nop для синхронизации */
_NOP();
/* Опрос состояния выводов порта*/
i = PINB;
...
Прим. 1: В программе на Ассемблере используются два временных регистра для минимизации
интервала времени от настройки подтягивающих резисторов на разрядах 0, 1, 6 и 7 до корректной
установки бит направления, разрешающих вывод лог. 0 на линиях 2 и 3 и заменяющих высокий уровень
на разрядах 0 и 1, образованный за счет подключения подтягивающих резисторов, на высокий уровень
сильноточного драйвера.
Как показано на рисунке 12-2 входной цифровой сигнал может быть зашунтирован к общему на входе
триггера Шмита. Сигнал, обозначенный на рисунке как SLEEP, устанавливается при переводе
микроконтроллера в режим выключения (Power-down), экономичный режим, дежурный режим и
расширенный дежурный режим. Это позволяет избежать повышения потребляемого тока в случае, если
некоторые входные сигналы окажутся в плавающем состоянии или уровень входного аналогового
сигнала будет близок к VCC/2.
Сигнал SLEEP игнорируется по входам внешних прерываний. Если запросы на внешнее прерывание
отключены, то SLEEP действует и на эти выводы. SLEEP также игнорируется на некоторых других входах
при выполнении их альтернативных функций (см. ⌠Альтернативные функции порта на стр 53).
У большинства контактов порта есть альтернативные функции в дополнение к тому, чтобы быть Общим
Цифровым I/Os. Рисунок 12-5 показывает, как управляющие сигналы контакта порта от упрощенного рисунка 12-2
могут быть переопределены альтернативными функциями. Сигналы переопределения могут не присутствовать
во всех контактах порта, но число служит обобщенным описанием, применимым ко всем контактам порта в
семействе микроконтроллера AVR.
Прим. 1: Сигналы WPx, WDx, RLx, RPx и RDx являются общими в пределах одного порта. Сигналы clkI/O,
SLEEP, и PUD являются общими для всех портов. Все остальные сигналы индивидуальны для каждого
вывода.
В таблице 12-2 подытожены функции отключающих сигналов для активизации альтернативных функций.
Указатели на выводы и порты с рисунка 12-5 не показаны в итоговых таблицах. Отключающие сигналы
генерируются внутренне в модулях, поддерживающих альтернативные функции.
У порта A есть альтернативная функция как аналоговый вход для ADC как показано в Таблице 12-3. Если немного
Портируют, контакты сконфигурированы как выводы, важно, что они не переключаются, когда преобразование
происходит. Это могло бы повредить результат преобразования.
Таблица 12.3 Альтернативные функции выводов порта А
В таблицах 12-4 и 12-5 приведена связь отключающих сигналов, представленных на рис. 12-5, и
альтернативных функций выводов порта А.
MISO ввод данных в режиме ведущего, вывод данных в режиме подчиненного интерфейса SPI. Если
разрешена работа SPI как ведущего (мастера), то данный вывод настраивается на ввод независимо от
состояния DDB6. Если работа SPI разрешена как подчиненного, то направление передачи данных
задается DDB6. Если вывод принудительно настраивается на ввод, то подключение подтягивающего
резистора останется под управлением бита PORTB6.
MOSI вывод данных в режиме ведущего, ввод данных в режиме подчиненного интерфейса SPI. Если
работа SPI разрешена как подчиненного, то данный вывод настраивается на ввод независимо от
значения DDB5. Если работа SPI разрешена как ведущего (мастера), направление передачи данных
определяется DDB5. Если вывод принудительно настраивается как вход, то подключение
подтягивающего резистора останется под управлением PORTB5.
• SS – Port B, Bit 4
SS - вход выбора подчиненного порта. Если работа SPI разрешена как подчиненного, то данный вывод
настраивается на ввод независимо от установки DDB4. Работа SPI как подчиненного активизируется,
если подать низкий уровень на этот вход. Если работа SPI разрешена как ведущего, то направление
передачи данных на этом выводе задается DDB4. Если вывод принудительно настроить как вход, то
подключение подтягивающего резистора управляется битом PORTB4.
• AIN1/OC0 – Port B, Bit 3
AIN1, Аналоговый Компаратор Отрицательный Ввод. Сконфигурируйте контакт порта как введено с внутренним
получением по запросу, выключенным, чтобы избежать цифровой функции порта от вмешательства с функцией
аналогового компаратора.
AIN1 инвертирующий вход аналогового компаратора. Данный вывод непосредственно подключен к
инвертирующему входу аналогового компаратора.
OC0, Вывод Сравнивает вывод Соответствия: контакт PB3 может служить внешним выводом для Таймера /
Счетчик 0 Сравнивает Соответствие.
Контакт PB3 должен быть сконфигурирован как вывод (DDB3 устанавливают (один)) служить этой функции.
Контакт OC0 является также выходным контактом для таймерной функции режима PWM.
• T1 – Port B, Bit 1
T1 счетный вход таймера-счетчика 1.
XCK1 внешняя синхронизация USART. Регистр направления данных (DDB0) задает является ли
синхронизация выходной (DDB0=1) или входной (DDB0=0). Вывод XCK активен только если USART
работает в синхронном режиме.
Таблица 12-7 и Таблица 12-8 связывают альтернативные функции Порта B к сигналам переопределения,
показанным в рисунке 12-5 на странице 54.
SPI MSTR INPUT и SPI SLAVE OUTPUT составе MISO сигналом, в то время как MOSI разделен на SPI MSTR
OUTPUT и SPI SLAVE INPUT.
Table 12-7.
Переопределение сигналов для альтернативных функций в PB7:PB4
Table 12-8. Переопределение сигналов для альтернативных функций в PB3:PB0
Порт C контакты с альтернативными функциями показывают в Таблице 12-9. Если интерфейс JTAG включен,
получение по запросу резисторы на контактах PC5 (TDI), PC3 (TMS) и PC2 (TCK) будут активированы, даже если
сброс произойдет.
Таблица 12-9.
TOSC2 2-ой вывод генератора таймера. После установки бита AS2 в регистре ASSR разрешается
работа асинхронного тактирования таймера-счетчика 2, а вывод PC7 отключается от порта и становится
инвертированным выходом усилителя генератора. В этом режиме кварцевый резонатор подключен к
выводу PC7, который теперь не может использоваться как линия ввода-вывода.
TOSC1, контакт Осциллятора Таймера 1: То, когда бит AS2 в ASSR установлен в 1, чтобы включить асинхронной
синхронизации Таймера / Счетчик 2, прикрепить PC6, разъединено от порта и становится вводом усилителя
Осциллятора инвертирования. В этом режиме Кристаллический Осциллятор соединен с этим контактом, и контакт
не может использоваться в качестве контакта ввода-вывода.
TOSC1 1-ый вывод генератора таймера. После установки бита AS2 в регистре ASSR разрешается
работа асинхронного тактирования таймера-счетчика 2, а вывод PC7 отключается от порта и становится
входом инвертирующего усилителя генератора. В этом режиме кварцевый резонатор подключен к выводу
PC7, который теперь не может использоваться как линия ввода-вывода.
TDI Ввод данных при JTAG-тестировании. Последовательный ввод данных происходит в регистр
инструкций или регистр данных (сканируемые звенья). После разрешения работы JTAG-интерфейса
данный вывод не может использоваться в качестве линии ввода-вывода.
TMS Выбор режима JTAG тестирования. Данный вывод используется для управления цифровым
автоматом TAP-контроллера. После разрешения работы JTAG-интерфейса данный вывод не может
использоваться в качестве линии ввода-вывода.
SDA ввод-вывод данных двухпроводного последовательного интерфейса TWI. После установки бита
TWEN в регистре TWCR разрешается работа двухпроводного последовательного интерфейса, вывод
PC1 отключается от порта и становится линией ввода-вывода последовательных данных двухпроводного
последовательного интерфейса. В этом режиме на входе активизируется помехоподавляющий фильтр,
который не реагирует на входные импульсы длительностью менее 50 нс, а передача организована
драйвером с открытым стоком и ограниченной скоростью изменения сигнала. Когда этот контакт используется
Двухпроводным Последовательным Интерфейсом, получением по запросу может все еще управлять бит
PORTC1.
Таблица 12-10 и Таблица 12-11 связывают альтернативные функции Порта C к сигналам переопределения,
показанным в рисунке 12-5 на странице 54.
Примечание:
1. Когда включено, Двухпроводный Последовательный Интерфейс включает средствам управления скорости
просмотра на выходном PC0 контактов и PC1. Это не показан в числе. Кроме того, фильтры шипа соединены
между выводами AIO, показанными в порту фигурируйте и цифровая логика модуля TWI.
OC2 выход компаратора таймера-счетчика 2. Для выполнения данной функции вывод PB7
конфигурируется как выход (DDD7 = 1). Вывод OC2 также выполняет функцию выхода, когда таймер
переводится в режим ШИМ.
RXD прием данных (ввод данных для УСАПП(USART)). Если работа приемника УСАПП(USART) разрешена, то
данный вывод настраивается на ввод независимо от значения DDD0. После перевода УСАППом(USART) данного
вывода на вход, управление подтягивающим резистором осуществляется битом PORTD0.
Таблица 12-13 и Таблица 12-14 связывают альтернативные функции Порта D к сигналам переопределения,
показанным в иллюстрации 12-5 на странице 54.
Внешние прерывания могут генерироваться по подающему или нарастающему фронту, а также по низкому лог.
уровню. (INT2 является только инициируемым фронтом сигнала прерыванием).
Это установлено как обозначено в спецификации MCU Control Register – MCUCR и MCU Control и Status Register
– MCUCSR.
Обратите внимание, что для распознавания падающего или нарастающего фронтов на INT0 и INT1
необходимо наличие синхронизации ввода-вывода, описанной в разделе ⌠Источники синхронизации и их
распределение" на стр 24.
Это означает, что данные прерывания могут использоваться для пробуждения микроконтроллера из режимов
глубокого сна. Синхронизация ввода-вывода останавливается во всех режимах сна за исключением
режима холостого хода (Idle).
Обратите внимание, что при использовании прерывания по уровню для пробуждения микроконтроллера
из режима выключения (Power-down), только после удержания изменившегося уровня в течение
определенного времени генерируется прерывание.
Оценка изменения состояния уровня выполняется по двум его выборкам с интервалом равным периоду
сторожевого таймера, который равен 1 мкс(µs) (номинальное значение) при 5.0В и 25°C.
Частота сторожевого таймера зависит от напряжения (см. ⌠Электрические характеристики■). на странице 279.
Пробуждение микроконтроллера наступает, если на входе присутствует требуемый уровень в процессе выборок
или если он удерживается до окончания задержки при запуске синхронизации (возникает при выходе из режимов
сна). Время запуска определяется конфигурационными битами SUT (см. ⌠ Источники
синхронизации и их распределение ). на странице 24.
Если дважды выполнена выборка уровня с синхронизацией сторожевым таймером, но по истечении времени
запуска этот уровень исчез, то пробуждение микроконтроллера наступит, но прерывание не будет сгенерировано.
Для того чтобы активизировать прерывание по уровню необходимо, чтобы этот уровень удерживался в течение
достаточного для пробуждения микроконтроллера времени.
Регистр команд MCU(микроконтроллера) содержит биты управления для управления смыслом прерывания и
общих функций MCU(микроконтроллера).
Прерывание от внешнего устройства 1 активировано внешним контактом INT1 если SREG I-bit и соответствующая
маска прерываний в GICR установлены. Уровень и края на внешнем контакте INT1, которые активируют
прерывание, определены в Таблице 13-1. Значение на контакте INT1 выбрано прежде, чем обнаружить края.
Если прерывание края или переключателя выбрано, импульсы, которые длятся более длинные чем один такт,
генерируют прерывание. Короче импульсы, как гарантируют, не генерируют прерывание. Если низкоуровневое
прерывание выбрано, низкий уровень, как должно сохраниться, до завершения в настоящий момент
выполняющейся инструкции генерирует прерывание.
Прерывание от внешнего устройства 0 активировано внешним контактом INT0, если I-флаг SREG и
соответствующая маска прерываний установлены. Уровень и края на внешнем контакте INT0, которые
активируют прерывание, определены в Таблице 13-2. Значение на контакте INT0 выбрано прежде, чем
обнаружить края. Если прерывание края или переключателя выбрано, импульсы, которые длятся более длинные,
чем один такт генерирует прерывание. Короче импульсы, как гарантируют, не генерируют прерывание. Если
низкоуровневое прерывание выбрано, низкий уровень, как должно сохраниться, до завершения в настоящий
момент выполняющейся инструкции генерирует прерывание.
Асинхронное Прерывание от внешнего устройства 2 активировано внешним контактом INT2, если SREG I-bit и
соответствующая маска прерываний в GICR установлены. Если ISC2 записан, чтобы обнулить, убывающий фронт
на INT2 активирует прерывание. Если ISC2 записан одному, нарастающий фронт на INT2 активирует прерывание.
Края на INT2 зарегистрированы асинхронно. Импульсы на INT2 шире чем минимальная ширина импульса,
уступленная “Характеристики Прерываний от внешнего устройства” на странице 283, генерируют прерывание.
Короче импульсы, как гарантируют, не генерируют прерывание. Изменяя бит ISC2, прерывание может
встречаться. Поэтому, рекомендуется сначала отключить INT2, очищая его бит Разрешения прерывания в
Регистре GICR. Затем, бит ISC2 может быть изменен. Наконец, Флаг прерывания INT2 должен быть очищен при
записи логической единицы в ее бит Флага прерывания (INTF2) в Регистре GIFR прежде, чем прерывание будет
повторно включено.
Когда бит INT1 установлен в (один) и I-bit в регистр состояния (SREG) установлен в (один), то внешнее
прерывание контакта включено.
Смысл Прерывания Control1 биты 1/0 (ISC11 и ISC10) в MCU(микроконтроллере) Общий Управляющий регистр
(MCUCR) определяют Внешнее ли Прерывание на повышении(1) от внешнего устройства (и / или) активировано
убывающий(0) фронт контакта INT1 или уровень обнаружения.
Действие на контакте вызовет четный запрос на прерывание если INT1 сконфигурирован как вывод.
Соответствующее прерывание Запроса Прерывания от внешнего устройства 1 выполняется от вектора
прерывания INT1.
Когда бит INT0 установлен в (один) и I-bit в Регистре состояния (SREG) установлен в (один), внешнее прерывание
контакта включено.
Смысл Прерывания биты Control0 1/0 (ISC01 и ISC00) в MCU(микроконтроллере) Общий управляющий регистр
General Control Register (MCUCR) определите ли активирован на повышении(1) прерывание от внешнего
устройства (и / или) убывающий(0) фронт контакта INT0 или обнаружающий уровень.
Действие на контакте будет вызывать четный запрос на прерывание если INT0 сконфигурирован как вывод.
Соответствующее прерывание из Запроса Прерывания от внешнего устройства 0 выполняется от INT0 вектор
прерывания.
Когда бит INT2 установлен (один), и I-bit в Регистре состояния (SREG) установлен (один), внешнее прерывание
контакта включено. Бит Control2 Смысла Прерывания (ISC2) в Регистре управления и состояния MCU (MCUCSR)
определяет, активировано ли Прерывание от внешнего устройства на нарастающем или убывающем фронте
контакта INT2. Действие на контакте вызовет запрос на прерывание, даже если INT2 будет сконфигурирован как
вывод. Соответствующее прерывание Запроса Прерывания от внешнего устройства 2 выполняется от Вектора
прерывания INT2.
Когда бит INT2 установлен в (один) и I-bit в Регистре состояния Status Register (SREG) установлен в (один),
внешнее прерывание контакта включено.
Смысл Прерывания бит Control2 (ISC2) в управлении MCU(микроконтроллера) и регистр состояния Status Register
(MCUCSR) определяет ли Прерывание от внешнего устройства активировано(1) на повышении или убывающий(0)
фронт контакта INT2.
Действие на контакте вызовет четный запрос на прерывание, если INT2 сконфигурирован как вывод.
Соответствующее прерывание Запроса Прерывания от внешнего устройства 2 выполняется от Вектора
прерывания INT2.
Когда край или логическое изменение на контакте INT1 инициировали запрос на прерывание,, INTF1 становится
установленным в 1. Если I-bit в SREG и бит INT1 в GICR установлены в (один), MCU (микроконтроллера)
перейдет к соответствующему Вектору прерывания. Флаг очищен когда прерывание подпрограмма выполняется.
Либо, флаг может быть очищен при записи логической единицы в него. Этот флаг всегда очищенный, когда INT1
сконфигурирован на уровне прерывания.
Когда край или логическое изменение на контакте INT0 инициировали запрос на прерывание, INTF0 становится
установленным в 1. Если I-bit в SREG и бит INT0 в GICR будут установлены (один), то MCU перейдет к
соответствующему вектору прерывания. Флаг очищен, когда подпрограмма прерывания выполняется. Либо, флаг
может быть очищен при записи логической единицы в него. Этот флаг всегда очищается, когда INT0
сконфигурирован как прерывание уровня. Когда край или логическое изменение на INT0 прикрепляют триггеры
запроса на прерывание, INTF0 становится установленным в 1. Если I-bit в SREG и бит INT0 в GICR установлены в
(один), MCU (микроконтроллер) перейдет к соответствующему вектору прерывания. Флаг очищен когда
подпрограмма прерывания выполняется. Либо, флаг может быть очищен при записи логической единицы в него.
Этот флаг всегда очищается когда INT0 сконфигурирован на уровне прерывания.
Таймер / Счетчик 0 общая цель, единственный сравнивают модуль, 8-разрядный Таймер / Счетчик модуль.
Упрощенный блок схема 8-разрядного Таймер / Счетчик показана в рисунке 14-1.
Для фактического размещения из контактов ввода-вывода, обратитесь к “Pinout ATmega16A” на странице 3.
Регистры ввода-вывода, а также биты или линии ввода-вывода, к которым организован доступ от ЦПУ, выделены
жирной линией.
Специфичный для устройства Регистр ввода-вывода и местоположения бита перечислены в “Описании
Регистра” на странице 79.
14.2.2 Определения
Многие регистры, и разряды в этом документе записаны в общей форме. Нижний регистр “n” заменяет Число
таймера/Счетчика, в этом случае 0. Однако, при использовании регистра или бита определяет в программе,
точная форма должна использоваться то есть, TCNT0 для того, чтобы получить доступ к значению счетчика
Timer/Counter0 и так далее.
Завися используемого режима работы, счетчик очищен, инкрементный, или постепенно декрементный в каждых
тактах таймера (clkT0). clkT0 может быть сгенерирован от внешнего или внутренний источник тактирования,
выбранный битами Выбора Тактирования (CS02:0). Когда никакой источник тактирования не выбран (CS02:0 = 0)
таймер остановлен.
Однако, к значению TCNT0 может получить доступ ЦП, независимо от присутствия или нет clkT0.
Запись ЦП переопределяет (имеет приоритет), весь четкий счетчиков или операций количества.
Последовательность подсчета определен установкой WGM01 и расположенных битов WGM00 в
Таймере/Счетчике Регистр команд (TCCR0).
Есть близкие соединения между как счетчик ведет себя (рассчитывает) и как формы волны сгенерированы на
выводе сравниваются вывод OC0.
The waveform generator uses the match signal to generate an output according to operating mode set by the WGM01:0
bits and Compare Output mode (COM01:0) bits.
The max and bottom signals are used by the waveform generator for handling the special cases of the extreme values in
some modes of operation (See “Modes of Operation” on page 73.).
Генератор формы волны использует сигнал соответствия генерировать вывод согласно рабочему режиму,
установленному битами WGM01:0 и режим (Сравнения вывода) Compare Output (COM01:0) бит.
Максимальные сигналы и нижние сигналы используются генератором формы волны для того, чтобы обработать
особые случаи экстремумов в некоторых режимах работы (См. "Режимы работы" на странице 73.). Рисунок 14-3
показывает, что блок-схема модуля вывода сравнивнения.
Рисунок 14-3.
Модуль сравнивает выводы, блок-схема
Регистр OCR0 двойной буферизованный при использовании любой Широтно Импульсной Модуляции
(PWM/ШИМ) режим. Для нормального и (Clear Timer на Compare (CTC))/(Очищенного Таймера на Сравнении
(CTC)) режима из работы, двойная буферизация отключена.
Двойная буферизация синхронизирует, обновление OCR0 Compare Register к вершине или к нижней части
последовательного подсчета.
В режимах генерации импульсов без ШИМ в формирователе импульсов результат сравнения может быть
установлен непосредственно через бит принудительной установки результата сравнения FOC0.
Принудительная установка результата сравнения компаратора не приводит к установке флага OCF0 или
сбросу/перезагрузке таймера, но влияет на состояние вывода OC0, который будет устанавливаться,
сбрасываться или переключаться (инвертироваться) в зависимости от выбранной установки
(настройки битов COM01:0 определяют, установлен ли контакт OC0, очищен или переключен).
Поскольку запись в TCNT0 блокирует любые действия по результату сравнения на один такт синхронизации
таймера независимо от режима работы, то при изменении TCNT0 при использовании канала сравнения
(независимо работает синхронизация таймера или нет) необходимо учесть следующие особенности.
Если в регистр TCNT0 записано значение равное OCR0, то игнорирование совпадения приведет к генерации
некорректной формы сигнала.
По аналогии следует избегать записи в TCNT0 значения равного нижнему пределу (0x00), если счетчик работает
как вычитающий.
Установка OC0 должна быть выполнена перед настройкой линии ввода-вывода на вывод в регистре направления
данных.
Самый легкий путь установки значения OC0 - использование бита принудительной установки результата
сравнения (FOC0) в нормальном режиме.
Регистр OC0 сохраняет его значение, даже если происходит изменение режима работы таймера.
Учтите, что биты COM01, COM00 не содержат схемы двойной буферизации и на любые изменения реагируют
мгновенно.
Биты задания режима формирования выходного сигнала (COM01:0) имеют двойное назначение.
С одной стороны биты COM01 используются формирователем сигнала и определяют какое логическое
состояние должно быть на выходе OC0 при возникновении следующего совпадения.
Кроме того, биты COM01:0 управляют выходным источником контакта OC0. Рисунок 14-4 показывает упрощенную
схематическую из логики, на которую влияет разрядная установка COM01:0. Регистры ввода-вывода, биты ввода-
вывода и контакты ввода-вывода в на рисунке показывают полужирным. Только части общих Регистров команд
порта ввода-вывода (DDR и PORT), на которые влияют биты COM01:0, показывают. Обращаясь к состоянию OC0,
ссылка для внутреннего Регистра OC0, не контакта OC0. Если Системный Сброс происходит, Регистр OC0
сброшен к “0”.
Генератор Формы волны использует биты COM01:0 по-другому в нормальном, CTC и режимах PWM(ШИМ). Для
всех режимов, устанавливая COM01:0 = 0 говорит генератору формы волны, что никакое действие на Регистре
OC0 не должно быть выполнено на следующем, сравнивают соответствие. Для сравниваются, выходные
действия в не ШИМ режимах см. Таблицу 14-3 на странице 80. Для быстрого режима PWM(ШИМ) обратитесь к
Таблице 14-4 на странице 80, и для корректного PWM фазы обращаются к Таблице 14-5 на странице 81.
Изменение состояния битов COM01:0 будет иметь эффект в первом, сравнивают соответствие после того, как
биты записаны. Для не ШИМ режимов действие может быть вынуждено иметь непосредственный эффект при
использовании битов строба FOC0.
Режим работы, то есть, поведение Таймера/Счетчика и Вывода Сравнивает контакты, определённую комбинацию
режима Генерации Формы волны (WGM01:0), и Режим Сравнения вывода (COM01:0) бит.
Сравнить биты Режима вывода не влияют на последовательность подсчета, в то время как режимы бита
Генерации Формы волны делают.
Биты COM01:0 управления, должны ли сгенерированный вывод PWM(ШИМ) быть инвертирован или не
(инвертированный или не инвертированный PWM(ШИМ)). Для не-ШИМ режимов управление битами COM01:0,
должен ли вывод быть установлен, очищен или переключится в сравнение соответствия (См., "Сравнивают
Выходной Модуль Соответствия” на странице 72.).
Для подробной синхронизации информация обращаются к рисунку 14-8, рисунку 14-9, рисунку 14-10 и рисунку 14-
11 в “Схемах Синхронизации Таймера/Счетчика” на странице 77.
В режиме СТС (WGM01 = 0b10) регистр OCR0 используется для задания разрешающей способности счетчика.
Если задан режим CTC и значение счетчика (TCNT0) совпадает со значением регистра OCR0, то счетчик
обнуляется (TCNT0=0). Таким образом, OCR0 задает вершину счета счетчика, а, следовательно, и его
разрешающую способность. В данном режиме обеспечивается более широкий диапазон регулировки частоты
генерируемых прямоугольных импульсов. Он также упрощает работу счетчика внешних событий.
По достижении верхнего предела счета может генерироваться прерывание с помощью флагов OCF0,
соответствующим используемым регистрам для задания верхнего предела счета.
Если прерывание разрешено, то процедура обработки прерывания может использоваться для обновления
верхнего предела счета.
Однако, задание значения вершины счета близкого к значению нижнего предела счета, когда счетчик работает
без предделения или с малым значением предделения, необходимо выполнять с особой осторожностью, т.к. в
режиме СТС нет двойной буферизации.
Если значение, записанное в OCR0, меньше текущего значения TCNT0, то счетчика будет пропускать
сравниваемое значение.
Счетчик должен будет затем рассчитать к его максимальному значению (0xFF) и перенести запуск в 0x00 прежде,
чем сравнение соответствия сможет встретится.
Для того, чтобы генерировать вывод волны в режиме CTC, вывод OC0 может быть установлен, чтобы
переключить его логический уровень на каждом сравнении соответствия, устанавливая Режима Compare Output
бита, чтобы переключить режим (COM01:0 = 1).
Значение OC0 не будет видимо на контакте порта, если направление данных для контакта не будет установлено
на выходной.
У сгенерированной волны будет максимальная частота
, когда OCR0 будет установлен на нуль (0x00).
Частота волны определена следующим уравнением:
где переменная N задает коэффициент деления предделителя (1, 8, 64, 256, или 1024).
Также как и для нормального режима работы, флаг TOV0 устанавливается на том же такте таймера,
когда его значение изменяется с 0xFF на 0x00.
Режим быстрой широтно-импульсной модуляции (ШИМ) (WGM0:1 = 0b11) предназначен для генерации ШИМ-
импульсов повышенной частоты. В отличие от других режимов работы в этом используется однонаправленная
работа счетчика. Счет выполняется в направлении от нижнего к верхнему пределу счета.
Быстрая Импульсная Модуляция Ширины или быстрый режим PWM(ШИМ) (WGM01:0 = 0b11) предоставляют
высокочастотную возможность генерации формы волны PWM.
В инвертировании Сравнивают Режим вывода, вывод установлен на, сравнение соответствия и очищенный В
НИЖНЕМ ПРЕДЕЛЕ.
Из-за одно-направленной работы, операционная частоты быстрого режима PWM(ШИМ) может быть дважды
более высокой, чем фазовый корректный режим ШИМ, который использует наклонную работу.
Это высокочастотное делает быстрый режим ШИМ хорошо удовлетворенным для регулирования мощности,
спрямления и DAC приложений.
Высокочастотный позволяет физически малые размерные внешние компоненты (обмотки, конденсаторы), и
поэтому уменьшает полную системную стоимость.
В режиме быстрой ШИМ счетчик инкрементируется до совпадения его значения с одним из фиксированных
значений МАКСИМАЛЬНОМУ значению, а затем сбрасывается следующим тактом синхронизации таймера.
Временная диаграмма для режима быстрой ШИМ представлена на рисунке 14-6.
Значение TCNTn на временной диаграмме показано в виде графика функции для иллюстрации
однонаправленности счета.
Схема включает не инвертированные и инвертированные выводы ШИМ.
Малые метки горизонтальной линии на склонах TCNT0 представляют, сравнивают соответствия между OCR0 и
TCNT0.
Рисунок 14-6. Быстрый режим (ШИМ)PWM, схема синхронизации.
Флаг переполнения таймера-счетчика (TOVn) устанавливается всякий раз, когда счетчик достигает
верхнего предела.
Если одно из этих прерываний разрешено, то в процедуре обработки
прерывания может быть выполнено обновление верхнего предела счета и порогов сравнения.
В режиме быстрой ШИМ блоки сравнения позволяют генерировать ШИМ-сигналы на выводах OC0. Если
COM01:0 =0b10 иои (2), то задается ШИМ без инверсии выхода, а если COM01:0 = 0b11 или (3), то задается
режим ШИМ с инверсией на выходе (См. Таблицу 14-4 на странице 80).
Фактическое значение OC0 только будет видимо на контакте порта, если направление данных для контакта порта
будет установлено как выведено.
Форма волны PWM(ШИМ) сгенерирована, устанавливая (или очищая) OC0 Регистр в сравнить соответствии
между OCR0 и TCNT0, и очищая (или устанавливая) регистра OC0 вместе со сбросом счетчика (переход с
верхнего предела на нижний предел). Частота ШИМ выходного сигнала для заданного значения верхнего
предела (ВП) определяется выражением:
где N √ переменная, которая задает значение коэффициента предделения (1, 8, 64, 256, или 1024).
Запись предельных значений в регистр OCRnx связана с особыми случаями в генерации ШИМ-
импульсов.
Если OCRnx установить равным нижнему пределу (0x00), то на выходе будет возникать
короткий импульс каждый (ВП+1)-ый такт синхронизации таймера.
Запись в OCR0 значения равного верхнему пределу приведет к установке постоянного уровня лог. 1 или 0 на
выходе (зависит от выбранной с помощью бит COM01:0 полярности выходного сигнала).
Если требуется генерация меандра (прямоугольные импульсы со скважностью 2 или заполнением 50%)
высокой частоты, то необходимо использовать режим быстрой ШИМ с установкой бит COM01:0 = 0b01 или (1),
которая вызывает переключение (инвертирование) логического уровня на выходе OC0 при каждом
совпадении.
У сгенерированной формы волны будет максимальная частота , когда OCR0 будет обнулен.
Эта функция подобна переключателю OC0 в режиме CTC, кроме двойной буферной функции вывода
сравниваются, модуль включен в быстром режиме (ШИМ)PWM.
14.7.4 Режим широтно-импульсной модуляции с фазовой коррекцией
Фаза исправляет режим PWM(ШИМ) (WGM01:0 = 0b01 или (1)) предназначен для генерации ШИМ сигнала с
фазовой коррекцией и высокой разрешающей способностью.
При двунаправленной работе максимальная частота ШИМ-сигнала меньше, чем при однонаправленной
работе, однако, за счет такой особенности, как симметричность в режимах ШИМ с двунаправленной
работой, данные режимы предпочитают использовать при решении задач управления приводами.
Разрешение PWM для корректного режима фазы PWM фиксировано к восьми битам.
В корректном режиме фазы PWM(ШИМ) счетчик постепенно увеличен до встречных максимальных соответствий
значения.
Когда счетчик достигает МАКСИМУМА, он изменяет направление количества.
Значение TCNT0 будет равно МАКСИМАЛЬНОМУ для одного такта таймера.
Схему синхронизации для корректного режима фазы PWM показывают на рисунке 14-7.
Значение TCNT0 находится в схеме синхронизации, показанной как гистограмма для того, чтобы иллюстрировать
двойную наклонную работу.
Схема включает неинвертированные и инвертированные выводы PWM.
Маленькие горизонтальные метки строки на наклонах TCNT0 представляют, сравнивают соответствия между
OCR0 и TCNT0.
Маленькие горизонтальные метки строки на наклонах TCNT0 представляют, сравнивают соответствия между
OCR0 и TCNT0.
где N коэффициент деления предделителя (1, 8, 32, 64, 128, 256 или 1024).
Запись предельных значений в регистр OCR0 связано с особыми случаями в генерации ШИМ-сигналов
в режиме ШИМ с фазовой коррекцией. Если задать режим ШИМ без инверсии и OCR0 установить равным
нижнему пределу, то на выходе непрерывно будет установлен лог. 0, а если равным верхнему пределу, то на
выходе постоянно присутствует лог. 1. Для ШИМ с инверсией указанные уровни необходимо заменить
противоположными.
В очень запускаются Периода 2 в рисунке 14-7, от которого у OCn есть переход высоко до низкого даже при том,
что есть, не Сравнивают Соответствие. Точка этого перехода должна гарантировать симметрию вокруг НИЖНЕЙ
ЧАСТИ.
Есть два случая, которые дают переходу вне всякого сравнения Соответствие:
Таймер начинает рассчитывать от значения выше чем то в OCR0A, и по этой причине пропускает Сравнение
Соответствия и следовательно изменение OCn, которое произошло бы на пути.
Таймер/Счетчик является синхронным проектом, и тактирование таймера (clkT0) поэтому показывают как
включение тактирования сигнал в следующих числах. Числа включают информацию о том, когда Флаги
прерывания установлены.
Рисунок 14-8 содержит данные синхронизации для основной работы Таймера/Счетчика. Данные показывают
последовательность количества близко к МАКСИМАЛЬНОМУ
значение во всех режимах кроме фазы исправляет режим (ШИМ)PWM.
Рисунок 14-10 показывает установку OCF0 во всех режимах кроме режима CTC.
Рисунок 14-10. Схема Синхронизации таймера/Счетчика, Установка OCF0, с Делителем частоты (fclk_I/O/8)
Рисунок 14-11 показывает установку OCF0 и очистку от TCNT0 в режиме CTC
Рисунок 14-11. Схема синхронизации таймера/счетчика, очистите таймер на, режим сравнения
соответствия, с делителем частоты (fclk_I/O/8)
Примечание:
1. CTC0 и ШИМ0 разрядные имена определения являются теперь устаревшими. Используйте определения
WGM01:0. Однако, функциональность и расположение этих битов являются совместимыми с предыдущими
версиями таймера.
Таблица 14-4 показывает разрядную функциональность COM01:0, когда биты WGM01:0 установлены в быстрый
режим ШИМ.
Таблица 14-5.
Сравните режим вывода, фаза исправляют режим ШИМ (1)
Примечание:
1. Особый случай происходит, когда OCR0 равняется верхнему значению, и COM01 установлен. В этом случае
сравнение соответствия проигнорировано, но набор или четкий сделан в верхнее значение. См., "что Фаза
Исправляет Режим ШИМ” на странице 76 для получения дополнительной информации.
• Бит 2:0 – CS02:0: Выбор Тактирования
Три бита Выбора Тактирования выбирают источник тактирования, который будет использоваться
Таймером/Счетчиком.
Таблица 14-6. Выбор тактирования Разрядное Описание
Если внешние режимы контакта будут использоваться для Таймера / Счетчик 0, то переходы на контакте T0
синхронизируют счетчик, даже если контакт будет сконфигурирован как вывод. Эта функция позволяет
управление программным обеспечением подсчета.
Регистр Таймер / Счетчика предоставляет прямой доступ, и для операций чтения и для операций записи, к
Таймер/ Счетчику модуль 8-разрядный счетчик. Запись в блоки Регистра TCNT0 (удаляет) сравнить соответствие
на следующих тактах таймера.
Изменение счетчика (TCNT0), в то время как счетчик работает, представляет риск без вести пропавших сравнить
соответствия между TCNT0 и Регистром OCR0.
14.9.3
OCR0 – Регистр вывода сравнения
Регистр вывода сравнения содержит 8-разрядное значение, которое является непрерывым по сравнению со
встречным значением (TCNT0).
Соответствие может использоваться, чтобы генерировать вывод, сравнивнение прерываний, или генерировать
вывод формы сигнала на контакте OC0.
14.9.5
TIFR qP Таймер / Счетчик Регистр флага прерывания
Делитель частоты является свободным ходом, то есть, работает независимо от логики выбора тактирования
Таймера/Счетчика, и это совместно использованный Таймер/Счетчик1 и Таймер/Счетчик0.
Так как на делитель частоты не влияет выбор тактирования Таймера/Счетчика, у состояния делителя частоты
будут импликации для ситуаций, где предварительно масштабируемые такты используются.
Один пример предварительно масштабирующихся артефактов происходит, когда таймер включен и
синхронизирован делителем частоты (6> CSn2:0> 1).
Число системных тактов от того, когда таймер включен к первому количеству, происходит, может быть от 1 до
системных тактов N+1, где N равняется делителю делителя частоты (8, 64, 256, или 1024).
Возможно использовать Сброс Делителя частоты для того, чтобы синхронизировать Таймер/Счетчик к
выполнению программы.
Однако, забота должна быть проявлена, если другой Таймер/Счетчик, который совместно использует тот же
самый делитель частоты также, использует предварительное масштабирование.
Сброс делителя частоты будет влиять на период делителя частоты для всех Таймер/Счетчиков, с которым оно
соединено.
Источник внешнего таймера применялся к контакту T1/T0, может использоваться в качестве тактирования
Таймера/Счетчика (clkT1/clkT0).
Контакт T1/T0 выбран однажды каждый системный такт логикой синхронизации контакта.
Синхронизируемый (выбранный) сигнал тогда передают через граничный детектор.
Рисунок 15-1 показывает блок-схему функционального эквивалента синхронизации T1/T0 и граничной логики
детектора.
Регистры синхронизированы в положительном краю внутренних системных тактов (clkI/O).
Фиксатор прозрачен в высокий период внутренних системных тактов.
Граничный детектор генерирует один clkT1/clkT0 импульс для каждого положительного (CSn2:0 = 7) или
отрицательный (CSn2:0 = 6) край, который это обнаруживает.
Логика детектора синхронизации и края представляет задержку 2.5 к 3.5 системным тактам от края, был применен
к контакту T1/T0 к счетчику, обновлен.
Включение и отключение ввода тактов должны быть сделаны, когда T1/T0 был устойчив по крайней мере для
одного системного такта, иначе это - риск, что сгенерирован ложный импульс такта Таймера/Счетчика.
Каждая половина периода примененного внешнего таймера должна быть более длинной чем один системный
такт, чтобы гарантировать корректную выборку.
У внешнего таймера, как должны гарантировать, будет меньше чем половина системной частоты такта
(fExtClk <fclk_I/O/2) данный 50/50 рабочий цикл %.
Так как граничный детектор использует выборку, максимальная частота внешнего таймера, который это может
обнаружить, является половиной частоты выборки (теорема отсчетов Nyquist).
Однако, из-за изменения системы синхронизируют частоту и рабочий цикл, вызванный источником Осциллятора
(кристалл, резонатор и конденсаторы) допуски, рекомендуется, чтобы максимальная частота источника внешнего
таймера была меньше чем fclk_I/O/2.5.
Note:
1.
Refer to Figure 1-1 on page 3, Table 12-6 on page 57, and Table 12-12 on page 62 for Timer/Counter1 pin
placement and description.
16.2.1
Registers
The Timer/Counter (TCNT1), Output Compare Registers (OCR1A/B), and Input Capture Register (ICR1) are all
16-bit registers. Special procedures must be followed when accessing the 16-bit registers. These procedures
are described in the section “Accessing 16-bit Registers” on page 87. The Timer/Counter Control Registers
(TCCR1A/B) are 8-bit registers and have no CPU access restrictions. Interrupt requests (abbreviated to Int.Req.
in the figure) signals are all visible in the Timer Interrupt Flag Register (TIFR). All interrupts are individually
masked with the Timer Interrupt Mask Register (TIMSK). TIFR and TIMSK are not shown in the figure since
these registers are shared by other timer units.
The Timer/Counter can be clocked internally, via the prescaler, or by an external clock source on the T1 pin.
The Clock Select logic block controls which clock source and edge the Timer/Counter uses to increment (or
decrement) its value. The Timer/Counter is inactive when no clock source is selected. The output from the clock
select logic is referred to as the timer clock (clkT1).
The double buffered Output Compare Registers (OCR1A/B) are compared with the Timer/Counter value at all
time. The result of the compare can be used by the Waveform Generator to generate a PWM or variable
frequency output on the Output Compare pin (OC1A/B). See “Output Compare Units” on page 93. The compare
match event will also set the Compare Match Flag (OCF1A/B) which can be used to generate an output
compare interrupt request.
The Input Capture Register can capture the Timer/Counter value at a given external (edge triggered) event on
either the Input Capture Pin (ICP1) or on the Analog Comparator pins (See “Analog Comparator” on page 193.)
The Input Capture unit includes a digital filtering unit (Noise Canceler) for reducing the chance of capturing
noise spikes.
The TOP value, or maximum Timer/Counter value, can in some modes of operation be defined by either the
OCR1A Register, the ICR1 Register, or by a set of fixed values. When using OCR1A as TOP value in a PWM
mode, the OCR1A Register can not be used for generating a PWM output. However, the TOP value will in this
case be double buffered allowing the TOP value to be changed in run time. If a fixed TOP value is required, the
ICR1 Register can be used as an alternative, freeing the OCR1A to be used as PWM output.
16.2.2
Definitions
The following definitions are used extensively throughout the document:
16.2.3
Compatibility
The 16-bit Timer/Counter has been updated and improved from previous versions of the 16-bit AVR
Timer/Counter. This 16-bit Timer/Counter is fully compatible with the earlier version regarding:
•
All 16-bit Timer/Counter related I/O Register address locations, including Timer Interrupt Registers.
•
Bit locations inside all 16-bit Timer/Counter Registers, including Timer Interrupt Registers.
•
Interrupt Vectors.
The following control bits have changed name, but have same functionality and register location:
•
PWM10 is changed to WGM10.
•
PWM11 is changed to WGM11.
•
CTC1 is changed to WGM12.
The following bits are added to the 16-bit Timer/Counter Control Registers:
•
FOC1A and FOC1B are added to TCCR1A.
•
WGM13 is added to TCCR1B.
The 16-bit Timer/Counter has improvements that will affect the compatibility in some special cases.
16.3
Accessing 16-bit Registers
The TCNT1, OCR1A/B, and ICR1 are 16-bit registers that can be accessed by the AVR CPU via the 8-bit data
bus. The 16-bit register must be byte accessed using two read or write operations. Each 16-bit timer has a
single 8-bit register for temporary storing of the High byte of the 16-bit access. The same temporary register is
shared between all 16-bit registers within each 16-bit timer. Accessing the Low byte triggers the 16-bit read or
write operation. When the Low byte of a 16-bit register is written by the CPU, the High byte stored in the
temporary register, and the Low byte written are both copied into the 16-bit register in the same clock cycle.
When the Low byte of a 16-bit register is read by the CPU, the High byte of the 16-bit register is copied into the
temporary register in the same clock cycle as the Low byte is read.
Not all 16-bit accesses uses the temporary register for the High byte. Reading the OCR1A/B 16-bit registers
does not involve using the temporary register.
To do a 16-bit write, the High byte must be written before the Low byte. For a 16-bit read, the Low byte must be
read before the High byte.
The following code examples show how to access the 16-bit Timer Registers assuming that no interrupts
updates the temporary register. The same principle can be used directly for accessing the OCR1A/B and ICR1
Registers. Note that when using “C”, the compiler handles the 16-bit access.
C Code Example(1)
unsigned int i;
:.
/* Set TCNT1 to 0x01FF */
TCNT1 = 0x1FF;
/* Read TCNT1 into i */
i = TCNT1;
:.
Note:
1. See “About Code Examples” on page 7.
The assembly code example returns the TCNT1 value in the r17:r16 register pair.
It is important to notice that accessing 16-bit registers are atomic operations. If an interrupt occurs between the
two instructions accessing the 16-bit register, and the interrupt code updates the temporary register by
accessing the same or any other of the 16-bit Timer Registers, then the result of the access outside the interrupt
will be corrupted. Therefore, when both the main code and the interrupt code update the temporary register, the
main code must disable the interrupts during the 16-bit access.
The following code examples show how to do an atomic read of the TCNT1 Register contents. Reading any of
the OCR1A/B or ICR1 Registers can be done by using the same principle
C Code Example(1)
unsigned int TIM16_ReadTCNT1( void )
{
unsigned char sreg;
unsigned int i;
/* Save global interrupt flag */
sreg = SREG;
/* Disable interrupts */
_CLI();
/* Read TCNT1 into i */
i = TCNT1;
/* Restore global interrupt flag */
SREG = sreg;
return i;
}
Note:
1.
See “About Code Examples” on page 7.
The assembly code example returns the TCNT1 value in the r17:r16 register pair.
The following code examples show how to do an atomic write of the TCNT1 Register contents. Writing any of
the OCR1A/B or ICR1 Registers can be done by using the same principle.
C Code Example(1)
void TIM16_WriteTCNT1 ( unsigned int i )
{
unsigned char sreg;
unsigned int i;
/* Save global interrupt flag */
sreg = SREG;
/* Disable interrupts */
_CLI();
/* Set TCNT1 to i */
TCNT1 = i;
/* Restore global interrupt flag */
SREG = sreg;
}
Note:
1.
See “About Code Examples” on page 7.
The assembly code example requires that the r17:r16 register pair contains the value to be written to TCNT1.
16.3.1
Reusing the Temporary High Byte Register
If writing to more than one 16-bit register where the High byte is the same for all registers written, then the High
byte only needs to be written once. However, note that the same rule of atomic operation described previously
also applies in this case.
16.4
Timer/Counter Clock Sources
The Timer/Counter can be clocked by an internal or an external clock source. The clock source is selected by
the Clock Select logic which is controlled by the Clock Select (CS12:0) bits located in the Timer/Counter Control
Register B (TCCR1B). For details on clock sources and prescaler, see “Timer/Counter0 and Timer/Counter1
Prescalers” on page 83.
16.5
Counter Unit
The main part of the 16-bit Timer/Counter is the programmable 16-bit bi-directional counter unit. Figure 16-2
shows a block diagram of the counter and its surroundings.
Figure 16-2. Counter Unit Block Diagram
The Input Capture unit is illustrated by the block diagram shown in Figure 16-3. The elements of the block
diagram that are not directly a part of the Input Capture unit are gray shaded. The small “n” in register and bit
names indicates the Timer/Counter number.
When a change of the logic level (an event) occurs on the Input Capture pin (ICP1), alternatively on the Analog
Comparator output (ACO), and this change confirms to the setting of the edge detector, a capture will be
triggered. When a capture is triggered, the 16-bit value of the counter (TCNT1) is written to the Input Capture
Register (ICR1). The Input Capture Flag (ICF1) is set at the same system clock as the TCNT1 value is copied
into ICR1 Register. If enabled (TICIE1 = 1), the Input Capture Flag generates an Input Capture Interrupt. The
ICF1 Flag is automatically cleared when the interrupt is executed. Alternatively the ICF1 Flag can be cleared by
software by writing a logical one to its I/O bit location.
Reading the 16-bit value in the Input Capture Register (ICR1) is done by first reading the Low byte (ICR1L) and
then the High byte (ICR1H). When the Low byte is read the High byte is copied into the High byte temporary
register (TEMP). When the CPU reads the ICR1H I/O location it will access the TEMP Register.
The ICR1 Register can only be written when using a Waveform Generation mode that utilizes the ICR1 Register
for defining the counter’s TOP value. In these cases the Waveform Generation mode (WGM13:0) bits must be
set before the TOP value can be written to the ICR1 Register. When writing the ICR1 Register the High byte
must be written to the ICR1H I/O location before the Low byte is written to ICR1L.
For more information on how to access the 16-bit registers refer to “Accessing 16-bit Registers” on page 87.
16.6.1
Input Capture Pin Source
The main trigger source for the Input Capture unit is the Input Capture pin (ICP1). Timer/Counter1 can
alternatively use the Analog Comparator output as trigger source for the Input Capture unit. The Analog
Comparator is selected as trigger source by setting the Analog Comparator Input Capture (ACIC) bit in the
Analog Comparator Control and Status Register (ACSR). Be aware that changing trigger source can trigger a
capture. The Input Capture Flag must therefore be cleared after the change.
Both the Input Capture pin (ICP1) and the Analog Comparator output (ACO) inputs are sampled using the same
technique as for the T1 pin (Figure 15-1 on page 83). The edge detector is also identical. However, when the
noise canceler is enabled, additional logic is inserted before the edge detector, which increases the delay by
four system clock cycles. Note that the input of the noise canceler and edge detector is always enabled unless
the Timer/Counter is set in a waveform generation mode that uses ICR1 to define TOP.
An Input Capture can be triggered by software by controlling the port of the ICP1 pin.
16.6.2
Noise Canceler
The noise canceler improves noise immunity by using a simple digital filtering scheme. The noise canceler input
is monitored over four samples, and all four must be equal for changing the output that in turn is used by the
edge detector.
The noise canceler is enabled by setting the Input Capture Noise Canceler (ICNC1) bit in Timer/Counter Control
Register B (TCCR1B). When enabled the noise canceler introduces additional four system clock cycles of delay
from a change applied to the input, to the update of the ICR1 Register. The noise canceler uses the system
clock and is therefore not affected by the prescaler.
16.6.3
Using the Input Capture Unit
The main challenge when using the Input Capture unit is to assign enough processor capacity for handling the
incoming events. The time between two events is critical. If the processor has not read the captured value in the
ICR1 Register before the next event occurs, the ICR1 will be overwritten with a new value. In this case the result
of the capture will be incorrect.
When using the Input Capture Interrupt, the ICR1 Register should be read as early in the interrupt handler
routine as possible. Even though the Input Capture Interrupt has relatively high priority, the maximum interrupt
response time is dependent on the maximum number of clock cycles it takes to handle any of the other interrupt
requests.
Using the Input Capture unit in any mode of operation when the TOP value (resolution) is actively changed
during operation, is not recommended.
Measurement of an external signal’s duty cycle requires that the trigger edge is changed after each capture.
Changing the edge sensing must be done as early as possible after the ICR1 Register has been read. After a
change of the edge, the Input Capture Flag (ICF1) must be cleared by software (writing a logical one to the I/O
bit location). For measuring frequency only, the clearing of the ICF1 Flag is not required (if an interrupt handler
is used).
16.7
Output Compare Units
The 16-bit comparator continuously compares TCNT1 with the Output Compare Register (OCR1x). If TCNT
equals OCR1x the comparator signals a match. A match will set the Output Compare Flag (OCF1x) at the next
timer clock cycle. If enabled (OCIE1x = 1), the Output Compare Flag generates an output compare interrupt.
The OCF1x Flag is automatically cleared when the interrupt is executed. Alternatively the OCF1x Flag can be
cleared by software by writing a logical one to its I/O bit location. The Waveform Generator uses the match
signal to generate an output according to operating mode set by the Waveform Generation mode (WGM13:0)
bits and Compare Output mode (COM1x1:0) bits. The TOP and BOTTOM signals are used by the Waveform
Generator for handling the special cases of the extreme values in some modes of operation (See “Modes of
Operation” on page 96.)
A special feature of output compare unit A allows it to define the Timer/Counter TOP value (i.e., counter
resolution). In addition to the counter resolution, the TOP value defines the period time for waveforms generated
by the Waveform Generator.
Figure 16-4 shows a block diagram of the output compare unit. The small “n” in the register and bit names
indicates the device number (n = 1 for Timer/Counter1), and the “x” indicates output compare unit (A/B). The
elements of the block diagram that are not directly a part of the output compare unit are gray shaded.
16.7.2
Compare Match Blocking by TCNT1 Write
All CPU writes to the TCNT1 Register will block any compare match that occurs in the next timer clock cycle,
even when the timer is stopped. This feature allows OCR1x to be initialized to the same value as TCNT1 without
triggering an interrupt when the Timer/Counter clock is enabled.
16.7.3
Using the Output Compare Unit
Since writing TCNT1 in any mode of operation will block all compare matches for one timer clock cycle, there
are risks involved when changing TCNT1 when using any of the output compare units, independent of whether
the Timer/Counter is running or not. If the value written to TCNT1 equals the OCR1x value, the compare match
will be missed, resulting in incorrect waveform generation. Do not write the TCNT1 equal to TOP in PWM modes
with variable TOP values. The compare match for the TOP will be ignored and the counter will continue to
0xFFFF. Similarly, do not write the TCNT1 value equal to BOTTOM when the counter is downcounting.
The setup of the OC1x should be performed before setting the Data Direction Register for the port pin to output.
The easiest way of setting the OC1x value is to use the force output compare (FOC1x) strobe bits in Normal
mode. The OC1x Register keeps its value even when changing between waveform generation modes.
Be aware that the COM1x1:0 bits are not double buffered together with the compare value. Changing the
COM1x1:0 bits will take effect immediately.
16.8
Compare Match Output Unit
The Compare Output mode (COM1x1:0) bits have two functions. The Waveform Generator uses the COM1x1:0
bits for defining the Output Compare (OC1x) state at the next compare match. Secondly the COM1x1:0 bits
control the OC1x pin output source. Figure 16-5 shows a simplified schematic of the logic affected by the
COM1x1:0 bit setting. The I/O Registers, I/O bits, and I/O pins in the figure are shown in bold. Only the parts of
the general I/O Port Control Registers (DDR and PORT) that are affected by the COM1x1:0 bits are shown.
When referring to the OC1x state, the reference is for the internal OC1x Register, not the OC1x pin. If a System
Reset occur, the OC1x Register is reset to “0”.