Вы находитесь на странице: 1из 93

ВНИМАНИЕ!!!

Данный даташит является не официальным переводом, переводился абы кем и абы как. Перевод бесплатный
и распространяется бесплатно его продажа запрещена. Авторы перевода не несут абсолютно никаких
гарантий и ответственности за качество и правильность перевода. ПРЕДУПРЕЖДАЕМ ЧТО ПЕРЕВОД КОРЯВЫЙ.
Вы его читаете только на собственный страх и риск. Данный даташит переводился без знания английского
языка и в нем могут быть ошибки даже там-где вы их не ожидаете, по этому сгоревшие и уничтоженные
микроконтроллеры, понесенные убытки из-за неправильного перевода, это ВАША И ТОЛЬКО ВАША ВИНА и
больше ничья!!!

Оригинальный текст на английском


http://www.atmel.com/Images/Atmel-8154-8-bit-AVR-ATmega16A_Datasheet.pdf

При переводе данного текста использовался ATmega128rus даташит.


http://usbsergdev.narod.ru/DOC/ATmega128rus.pdf

версия перевода №0.4.

Перевод заморожен на 16 главе и возможно больше не будет переводиться.


Вы можете сами до перевести и выложить в сеть данный даташит.

Особенности
Highperformance, LowpowerAtmel AVR 8 бит микроконтроллерAdvanced RISC-архитектуры

131 мощных инструкций - большинство SingleclockCycleExecution

32 x 8 GeneralPurposeWorkingRegisters

Полностью Статическая Работа

До 16MIPS пропускной способности на 16MHz

На чип 2 цикла множитель


Высокая выносливость энергонезависимой памяти сегментов

16KBytes в системе самостоятельного программируемой Flash памяти программ

512Bytes EEPROM

1KByte внутренней SRAM


Write / EraseCycles: 10,000 Flash/100,000 EEPROM

Хранение данных: 20 лет при 85°C/100 лет при 25°C(1)

Опциональный загрузочный код секции с независимым замком Бит


In-SystemProgrammingOn-chipBoot программа
Правда Читать Во Время Операции Записи

Программирование блокировки для безопасности программного обеспечения


JTAG (IEEE std. 1149.1 Совместимый) Интерфейс

Boundary-scan возможности по JTAG-стандарт

Обширный On-chipDebugSupport

Программирование Flash, EEPROM, Fuses и LockBitsthroughthe JTAG


Интерфейс
Периферийные Характеристики

Два 8-разрядных таймеров/счетчиков с отдельным Prescalers и сравнить режимы

Один 16-разрядный Таймер/счетчик с отдельным Предделитель, режим сравнения, и


Режим Съемки

Счетчик реального времени с отдельным Осциллятором

Четыре канала ШИМ

8-канальный, 10 разрядный АЦП


8 несимметричных каналов
7 дифференциальных каналов в корпусе TQFP только
2 дифференциальных канала с программируемым коэффициентом на 1x, 10x, или 200x

Байт-ориентированный двухпроводной последовательный интерфейс

Программируемый последовательный USART

Master/Slave SPI последовательный интерфейс

Программируемый сторожевой таймер с отдельным On-chipOscillator

На микросхеме аналогового компаратора


Специальные Характеристики Микроконтроллера

Схема сброса при включении питания и программируемый BrownoutDetection

Внутренний калиброванный RC-генератор

Внешние и внутренние источники прерываний

Шесть Sleep режимах: Idle, ADC NoiseReduction, Powersave, Powerdown, Standby и ExtendedStandby
I/O и пакеты

32 Программируемых Линий Ввода/Вывода


40-pin PDIP, 44-выводный TQFP, и 44-pad QFN/MLF
Рабочее Напряжение

2.7 - 5.5 V
Скорость Марок

0 - 16MHz
Потребляемая мощность @ 1 МГц, 3В, 25°C

Active: 0.6 мА

Режиме ожидания: 0,2 мА

Режим выключения питания: < 1 мкА

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 адреса)

6.2ALU -Арифметико-логическое устройство


АЛУ √ арифметико-логическое устройство
Высокопроизводительное АЛУ AVR-микроконтроллеров работает в непосредственной связи со всеми 32
универсальными рабочими регистрами. АЛУ позволяет выполнить за один машинный цикл операцию
между двумя регистрами или между регистром и константой. Операции АЛУ могут быть
классифицированы на три группы: арифметические, логические и битовые. Кроме того, архитектурой
ATmega16A поддерживаются операции умножения со знаком и без знака и дробным форматом. См.
В разделе “InstructionSet” подробное описание.
6.3Регистр статуса
Регистр статуса содержит информацию о результате только что выполненной арифметической
инструкции. Данная информация может использоваться для ветвления программы по условию. Следует
понимать, что регистр статуса обновляется после выполнения всех операций АЛУ в объеме
предусмотренном для каждой конкретной инструкции (см. раздел Флаги в таблице инструкций). Флаги
этого регистра в большинстве случаев позволяют отказаться от использования инструкций сравнения,
делая код программы более компактным и быстрым.
Обратите внимание, что состояние регистра статуса автоматически не запоминается при вызове
процедуры обработки прерываний и не восстанавливается при выходе из нее. Это необходимо
выполнить программно.

6.3.1SREG –AVR регистрСтатуса (сброс/хранение/перенос/исключающая или/Деление на 0/перенос


результата).

• Bit 7 – I: Global Interrupt Enable


Разряд 7 √ I: Общееразрешениепрерываний
Бит общего разрешения прерываний используется для активизации работы системы прерываний.
Разрешение отдельных прерываний осуществляется в соответствующих управляющих регистрах. Если
бит общего разрешения прерываний сбросить, то ни одно из прерываний не будет активным независимо
от их индивидуальной конфигурации. Бит I сбрасывается в 0 аппаратно после генерации запроса на
прерывание, а после выполнения инструкции возврата из прерывания RETI снова устанавливается к 1
для выполнения последующих прерываний. Бит I может также сбрасываться и устанавливаться с
помощью инструкций CLI и SEI, соответственно. как описано в instructionsetreference".

• Bit 6 – T: BitCopyStorage
Разряд 6 √ T: Хранение копируемого бита
Специальные битовые операции BLD (копирование из Т-бита) и BST (копирование в Т-бит) используют в
качестве источника и получателя данных бит T. Любой бит из регистрового файла может быть
скопирован в бит T инструкцией BST, а также содержимое бита Т может быть скопировано в любой бит
регистрового файла с помощью инструкции BLD.

• Bit 5 – H: HalfCarryFlag
Разряд 5 √ H: Флаг половинного переноса
Данный флаг устанавливается при выполнении некоторых арифметических инструкций и индицирует о
возникновении половинного переноса. Как правило половинный перенос широко используется в двоично-
десятичной арифметике. Более подробная информация приведена в описании набора инструкций.
В разделе “InstructionSetDescription” для подробной информации.

• Bit 4 – S: Sign Bit, S = N ⊕ V

Разряд 4 √ S: бит знака, S = Искл. ИЛИ (N⊕V)


Бит S √ результат выполнения логической операции исключающего ИЛИ между флагом отрицательного
результата N и флагом переполнения двоичного дополнения V. Более подробная информация приведена
в описании набора инструкций. В разделе “InstructionSetDescription” для подробной информации.
• Bit3 – V: Two’sComplementOverflowFlag
Разряд 3 √ V: Флаг переполнения двоичного дополнения
Флаг переполнения двоичного дополнения V поддерживает арифметику с двоичным дополнением. Более
подробная информация приведена в описании набора инструкций. В разделе “InstructionSet Описание” для
подробной информации.

• 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.4 Файл регистров общего назначения


Файл регистров оптимизирован под расширенный набор инструкций AVR-микроконтроллеров. В целях
достижения требуемой производительности и гибкости файлом регистров поддерживаются следующие
схемы ввода-вывода:

Один 8-разр. операнд и один 8-разр. результат

Два 8-разр. операнда и один 8-разр. результат

Два 8-разр. операнда и один 16-разр. результат

Один 16-разр. операнд и один 16-разр. результат

Рисунок 6-2 показывает структуру 32 рабочих регистров общего назначения в ЦПУ.


Большинство инструкций работающих с файлом регистров имеют непосредственный доступ ко всем
регистрам, чем достигается выполнение их за один машинный цикл.
Как показано на рисунке 6-2, каждый регистр имеет свой адрес в области памяти данных, для чего
отведено там первые 32 позиции. Не смотря на физическую реализацию не по адресам статического
ОЗУ, данная архитектура памяти обеспечивает высокую гибкость доступа к регистрам, например,
регистры-указатели X, Y и Z могут быть установлены для присвоения индекса любому регистру в файле.
X-регистр, Y-регистр и Z-регистр
Регистры R26..R31 обладают некоторым дополнительными функциями для их общецелевого
использования. Данные регистры являются 16-разр. указателями адреса для косвенной адресации в
пределах памяти данных.
Три регистра косвенной адресации X, Y и Z представлены на рисунке 6-3.

Рис. 6-3.
X-, Y-, и Z-регистры
В различных режимах адресации данные адресные регистры выполняют функции фиксированного
смещения, автоматического инкрементирования и автоматического декрементирования (см. описание
набора инструкций для более подробного изучения).(см. Instruction Set Reference").

6.5УказательСтека

Стек обычно используется для хранения временных данных, для хранения локальных переменных и для
хранения адресов возврата при прерываниях и вызовах подпрограмм. Регистр указателя стека указывает
на вершину стека.

Обратите внимание на организацию стека, который направляется от старших в более


младшие позиции статического ОЗУ. Это означает, что команда помещения в стек PUSH уменьшает
значение указателя стека.

Указатель стека указывает на область стека в статическом ОЗУ данных, где размещены стеки
прерываний и подпрограммы.

Данная область стека в статическом ОЗУ памяти данных должна бытьопределена программно до вызова любой
процедуры или разрешения прерываний.

Начальное значение указателя стека равно последний адрес из внутренней SRAM и стек Указатель должен быть
установлен в точке выше начала SRAM, см. рис. 7-2 на стр. 17.

См. таблицу 6-1 для указателя стека детали.

Таблица 6-1.

Указатель стека инструкции


Указатель стека реализован как два 8-разр. регистра в области ввода-вывода. Число фактически
используемых разрядов зависит от типа микроконтроллера. Обратите внимание, что у некоторых AVR-
микроконтроллеров область памяти данных настолько мала, что достаточно только регистра SPL.
В этом случае регистр SPH отсутствует.

6.5.1 SPH и SPL - указатель стека высокого и низкого регистра

6.6Инструкция Выполнения Сроков

ЦПУ AVR-микроконтроллера тактируется сигналом CLKЦПУ (CPU clockclkCPU), который непосредственно


генерируетсявыбранным источником синхронизации. Внутреннее деление тактовой частоты не используется.
Рис. 6-4показывает параллельность выборок и исполнения инструкций, что обеспечивается
Гарвардской архитектурой и концепцией регистрового файла с быстрым доступом. Данная концепция
конвейеризации обеспечивает удельную производительности 1 млн.оп в сек./МГц(1 MIPS на МГц) и
предоставляетуникальное соотношение числа функций на стоимость, число функций на такт синхронизации и
числа функций на Вт потребляемой мощности.
Рис.6.4.Параллельные выборки и исполнения инструкций

Рис. 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.

Имеется два основных типа прерываний. Первый тип прерываний активизируется событием, которое
приводит к установке флага прерываний.

Для данных прерываний программный счетчик изменяется на


соответствующий вектор прерывания для выполнения процедуры его обработки и затем аппаратно
очищает флаг прерывания. Флаги прерывания также сбрасываются путем записи лог.1 в
соответствующий разряд. Если возникает условие прерывания, но данное прерывание запрещено, то
флаг устанавливается и запоминается до разрешения этого прерывания или сбрасывается программно.
Аналогично, если возникает одно и более условий прерываний при сброшенном флаге общего
разрешения прерываний, то соответствующий флаг устанавливается и запоминается до возобновления
работы прерываний, а затем прерывания будут выполнены в соответствии с приоритетом.
Второй тип прерываний активизируется сразу после выполнения условия прерывания. Данные
прерывания не обязательно имеют флаги прерываний. Если условие прерывания исчезает до его
разрешения, то данный запрос игнорируется.

После выхода из прерывания AVR-микроконтроллер возвращается к выполнению основной программы и


выполняет еще одну инструкцию до обслуживания любого из отложенных прерываний.
Обратите внимание, что регистр статуса автоматически не запоминается при вызове процедуры
обработки прерывания и не восстанавливается при выходе из этой процедуры. Данные действия
необходимо выполнить программно.
При выполнении инструкции CLI все прерывания запрещаются. Запрос на прерывание не будет
отработан после выполнения инструкции CLI, даже если оно возникает одновременно с выполнением
команды CLI. В следующем примере показано как избежать прерываний во время выполнения
временной последовательности записи в ЭСППЗУ (EEPROM).

Пример кода на Ассемблере


in r16, SREG ; Запомнили состояние регистра статуса SREG
cli ; отключаем все прерывания во время отработки временной последовательности
sbi EECR, EEMWE ; Разрешаем запись в ЭСППЗУ(EEPROM)
sbi EECR, EEWE
out SREG, r16 ; Восстанавливаем значение SREG (бит I)

Пример кода на Си
char cSREG;
cSREG = SREG; /* Запоминаем значение SREG */
/* Отключение прерываний на время задания временной последовательности */
_CLI();
EECR |= (1<<EEMWE); /* Старт записи в ЭСППЗУ EEPROM */
EECR |= (1<<EEWE);
SREG = cSREG; /* Восстанавливаем значение SREG (бит I) */

Для разрешения прерываний используется инструкция SEI, а следующая за SEI инструкция будет
выполнена перед отработкой любого отложенного прерывания, как показано в примере.

Пример кода на Ассемблере


sei ; Общее разрешение прерываний
sleep ; перевод в режим ожидания прерывания
; Прим.: Режим ожидания будет введен прежде чем запустится отработка отложенного прерывания
Пример кода на Си
_SEI(); /* Общее разрешение прерываний */
_SLEEP(); /* перевод в режим ожидания прерывания */
/* Прим.: Режим ожидания будет введен прежде чем запустится отработка отложенного прерывания */

6.7.1 Время реакции на прерывание

Реакция на отработку запроса на прерывание длится минимум 4 машинных цикла. По истечении этого
времени программа продолжает свое выполнение с вектора соответствующего прерывания. В течение 4
машинных циклов состояние программного счетчика помещается в стек. Как правило, по адресу вектора
прерываний хранится команда перехода на процедуру обработку прерываний, а на данный переход
затрачивается еще 3 машинных цикла. Если запрос на прерывание возникает в процессе исполнения
инструкции, требующей более 1 машинного цикла на выполнение, то прерывание будет обработано
только после выполнения этой инструкции. Если прерывание возникает во время нахождения
микроконтроллера в режиме сна, то реакция на прерывание увеличится еще на 4 цикла. Данная
задержка связана с временем старта из выбранного режима сна.
Выход из процедуры обработки прерывания требует 4 машинных цикла. В течение этого времени
двухбайтный программный счетчик извлекается из стека, указатель стека дважды инкрементируется и
устанавливается бит I в регистре статуса SREG

7. AVR Память
7.1 Обзор
В данном разделе описываются различные виды памяти ATmega116. В соответствии с гарвардской
архитектурой память AVR-микроконтроллера разделена на две области: память данных и память
программ. Кроме того, ATmega16 содержит память на ЭСППЗУ(EEPROM) для энергонезависимого хранения
данных. Все три области памяти являются линейными и равномерными.

7.2 Внутрисистемно программируемая флэш-память программ


ATmega16 содержит 16 кбайт внутренней внутрисистемно перепрограммируемой флэш-памяти для хранения
программы. Поскольку все AVR-инструкции являются 16 или 32-разр., то флэш-память организована как 8 кбит х
16. Для программной защиты флэш-память программ разделена на два сектора: сектор программы начальной
загрузки и сектор прикладной программы.
Флэш-память характеризуется износостойкостью не менее 10000 циклов запись/стирание. ATmega16A
Программный счетчик РС у ATmega16 является 13-разр., поэтому, позволяет адресоваться к 8 кбайт памяти
программ. Работа сектора программы начальной загрузки и связанных с ним бит защиты программы
детально описана в разделе ⌠Самопрограммирование из сектора начальной загрузки с поддержкой
чтения во время записи на странице 237. В разделе ⌠Программирование памяти на странице 251.

детально описывается параллельное программирование флэш-памяти и последовательное программирование


через интерфейсы SPI, JTAG.
Таблицы констант могут располагаться в пределах всего пространства памяти программ (см. описание
инструкции чтения из памяти программ LPM и расширенного чтения из памяти программ ELPM).
Временные диаграммы выборки и исполнения инструкций представлены в разделе ⌠Временная
диаграмма выполнения инструкции на стр 12.

Рисунок 7-1. Карта памяти программ

Первые 1120 ячеек памяти данных относятся к файлу регистров, памяти ввода-вывода, расширенной памяти
ввода-вывода и встроенному статическому ОЗУ данных.
Память и внутренней SRAM данных.
Первые 96 ячейках расположен файл регистров и стандартная память ввода-вывода,
следующих 1024 занимает внутреннее ОЗУ данных.

Реализовано пять различных способов адресации для охвата всей памяти: прямая, косвенная со
смещением, косвенная, косвенная с предварительным декрементом и косвенная с последующим
инкрементом. Регистры R26┘R31 из файла регистров используются как регистры-указатели для
косвенной адресации.

Прямая адресация позволяет адресоваться ко всей памяти данных.

Косвенная адресация со смещением позволяет адресовать 63 ячейки, начиная с адреса указанного в


регистрах Y или Z.

При использовании инструкции косвенной адресации с предварительным декрементом и последующим


инкрементом значения адресных регистров X, Y и Z, соответственно декрементируются до или
инкрементируются после выполнения инструкции.
32 рабочих регистров общего назначения, 64 регистра ввода-вывода и 1024 байт внутреннего
статического ОЗУ данных в ATmega16 доступны с помощью всех этих режимов адресации. Файл
регистров описывается в разделе ⌠Файл регистров общего назначения на странице 10.
Рисунок 7-2. Карта памяти данных

7.3.1. Данные памяти доступ времени.

Временная диаграмма доступа к памяти


В данном разделе описывается общая концепция доступа к внутренней памяти.
Доступ к внутреннему статическому ОЗУ выполняется за два машинных цикла в соответствии с рисунком 7-3

Рисунок 7-3 Временная диаграмма доступа к встроенному статическому ОЗУ данных

7.4. Память данных на ЭСППЗУ(EEPROM)

ATmega16 содержит 512 байт памяти данных на ЭСППЗУ(EEPROM). Она организована как отдельная область
памяти данных, в которой один байт может быть записан и считан. ЭСППЗУ(EEPROM) характеризуется
износостойкостью 100000 циклов чтения/записи.
В разделе ⌠Программирование памяти на страницах 262,267, 254 содержится детальное описание
программирование ЭСППЗУ(EEPROM) через интерфейсы SPI, JTAG или параллельное программирование.

7.4.1. Чтение и запись ЭСППЗУ(EEPROM)

Доступ к ЭСППЗУ(EEPROM) осуществляется через специальные регистры, расположенные в пространстве


ввода-вывода.
Время записи в ЭСППЗУ(EEPROM) приведено в табл. 2. Функция самосинхронизации позволяет программно
определить возможность записи следующего байта. Если код программы содержит инструкции записи в
ЭСППЗУ(EEPROM), то должны быть приняты следующие меры предосторожности. У источников питания с
хорошей
фильтрацией напряжение VCC медленно нарастает/спадает при подаче/снятии питания. По этой причине
микроконтроллер в течение некоторого периода времени может оказаться под меньшим напряжением
питания, чем требуется для заданной тактовой частоты. См. раздел ⌠Предотвращение повреждения
данных в ЭСППЗУ(EEPROM) для детального изучения методов разрешения данной проблемы.
В целях предотвращения неумышленной записи в ЭСППЗУ должна быть выполнена специфическая
процедура записи. Детально этот вопрос рассматривается при описании Управляющего регистра
ЭСППЗУ(EEPROM) .
Когда происходит считывание ЭСППЗУ(EEPROM) ЦПУ задерживается на 4 машинных цикла до выполнения
следующей инструкции.
Во время записи в ЭСППЗУ(EEPROM) ЦПУ задерживается на два машинных цикла до выполнения следующей
инструкции.

7.4.2 Запись EEPROM во время режима ожидания выключения питания

Если микроконтроллер переводится в режим выключения (Power Down) командой sleep в процессе
выполнения операции записи в ЭСППЗУ(EEPROM), то операция записи будет продолжена и завершится по
истечении требуемого времени доступа для записи. Однако, по завершении операции записи кварцевый
генератор будет продолжать работу, и как следствие, микроконтроллер будет переведен в режим
снижения мощности не полностью. С учетом этого, рекомендуется проверять окончание операции записи
в ЭСППЗУ(EEPROM) перед переводом в режим выключения (Power-down).

7.4.3 Меры предотвращения повреждения данных в ЭСППЗУ(EEPROM)

В те моменты, когда напряжение VCC находится на уровне недостаточном для корректной работы ЦПУ и
ЭСППЗУ(EEPROM), содержимое ЭСППЗУ(EEPROM) может быть нарушено. Данные проблемы аналогичны
устройствам, использующих отдельное ЭСППЗУ(EEPROM), поэтому, в данном случае необходимо применить те
же меры. При сниженном напряжении питания может быть две причины нарушения содержимого
ЭСППЗУ(EEPROM). Первая причина состоит в возможности корректной регулярной записи в ЭСППЗУ только при
определенном напряжении питания. Вторая состоит в возможности некорректного выполнения программы
микроконтроллером при чрезмерном низком уровне питания.
Повреждение данных в ЭСППЗУ(EEPROM) может быть легко предотвращено, если придерживаться следующих
рекомендаций:
Микроконтроллер необходимо удерживать в состоянии сброса (низкий уровень на выводе RESET) при
недостаточности уровня питания. Аналогично это можно выполнить, разрешив работу встроенного
детектора питания (BOD). Если пороговый уровень встроенного детектора питания не соответствует
необходимому порогу, то следует применить внешнюю схему сброса при снижении VCC (супервизор
питания). Если сброс возникает во время действия операции записи, то запись будет завершена при
условии достаточности уровня питания.

7.5 Память ввода-вывода

Существующее пространство ввода-вывода для ATmega16 показано в разделе ⌠Сводная таблица


Регистров на стр 319.
Все порты ввода-вывода и периферийные устройства в ATmega16 размещены в пространстве ввода-
вывода. Путем передачи данных между одним из 32-х универсальным рабочим регистром и
памятью ввода-вывода. Регистры ввода-вывода с адресами $00 - $1F могут побитно адресоваться с
помощью инструкций SBI и CBI. Состояние одного из разрядов в этих регистрах может тестироваться с
помощью инструкций SBIS и SBIC. При использовании специфических команд ввода-вывода IN и OUT
необходимо использовать адреса $00 - $3F. Если адресоваться к регистрам ввода-вывода как к памяти
данных с помощью инструкций LD и ST, то к указанным выше адресам необходимо прибавить $20.

ATmega16 является сложным микроконтроллером, для которого 64 адреса, зарезервированных в кодах


операций IN и OUT, не достаточно для поддержки всех имеющихся периферийных устройств.

Если осуществляется доступ к зарезервированным разрядам, то в целях совместимости с


последующими микроконтроллерами в них необходимо записывать лог. 0.
Не должна производиться запись в ячейки по зарезервированным адресам в пространстве ввода-
вывода.

Некоторые флаги статуса сбрасываются путем записи в них лог. 1. Инструкции CBI и SBI работают только
с регистрами по адресам $00-$1F.
Регистры управления вводом-выводом и периферийными устройствами описываются в следующих
разделах.

7.6 Register Description


7.6.1 EEARH and EEARL – The EEPROM Address Register

• Bits 15:9 – Res: Reserved Bits


В ATmega16A Данные зарезервированные разряды считываются как 0. При записи в данных разрядах
необходимо указывать нули для совместимости с новыми версиями микроконтроллеров.

• Bits 8:0 – EEAR8:0: EEPROM Address


Регистры адреса ЭСППЗУ(EEPROM) √ EEARH и EEARL √ определяют адрес ячейки ЭСППЗУ(EEPROM) в 512
байтном пространстве. Байтные ячейки ЭСППЗУ(EEPROM) адресуются линейно в диапазоне адресов 0-511.
Начальное значение EEAR неопределенное. Необходимое значение адреса должно быть записано до начала
доступа к ЭСППЗУ(EEPROM).

7.6.2. Регистр данных ЭСППЗУ(EEPROM) EEDR

Разряды 7-0 EEDR 7-0: Данные ЭСППЗУ(EEPROM)


Для выполнения записи в ЭСППЗУ(EEPROM) в регистр EEDR необходимо указать записываемые данные,
которые будут записаны по адресу, указанному в регистре EEAR. После выполнения чтения из ЭСППЗУ
(EEPROM) в регистре EEDR содержатся считанные данные из ячейки по адресу указанному в EEAR.

7.6.3 Регистр управления ЭСППЗУ √ EECR

Разряды 7-4 Резерв


Данные разряды у ATmega16 зарезервированы и считываются как 0.
Разряд 3 EERIE: Разрешение прерывания по готовности ЭСППЗУ(EEPROM)
Запись в EERIE 1 разрешает прерывание по готовности ЭСППЗУ(EEPROM), если кроме того установлен бит I в
регистре SREG. Запись в EERIE нуля отключает это прерывание. Прерывание по готовности ЭСППЗУ(EEPROM)
генерируется, если бит EEWE сброшен.
Разряд 2 EEMWE: Главное разрешение записи в ЭСППЗУ(EEPROM) Бит EEMWE разрешает установку бита
EEWE, инициирующего запись в ЭСППЗУ(EEPROM). Данные будут записаны в ЭСППЗУ(EEPROM) по указанному
адресу, если в EEMWE записать 1, а затем в течение 4 машинных циклов записать 1 в EEWE. Если EEMWE=0, то
запись в EEWE лог. 1 не вызовет никаких действий. После программной установки бита EEMWE он
автоматически сбрасывается аппаратно по истечении четырех машинных циклов.
Разряд 1 EEWE: Разрешение записи в ЭСППЗУ(EEPROM) Сигнал разрешения записи EEWE является
стробирующим сигналом записи для ЭСППЗУ(EEPROM). Для записи в ЭСППЗУ(EEPROM) после корректной
установки адреса и данных необходимо установить бит EEWE. Перед установкой бита EEWE должен быть
установлен бит EEWE, иначе запись в ЭСППЗУ(EEPROM) не произойдет. При выполнении операции записи в
ЭСППЗУ(EEPROM) необходимо руководствоваться следующей последовательностью (порядок шагов 3 и 4 не
важен):
1. Ожидание пока EEWE станет равным нулю.
2. Ожидание равенства нулю бита SPMEN в регистре SPMCSR.
3. Запись нового адреса ЭСППЗУ в EEAR (опционально).
4. Запись новых данных в регистр EEDR для записи в ЭСППЗУ (опционально).
5. Запись лог. 1 в EEMWE, когда в EEWE регистра EECR записан ноль.
6. Запись лог. 1 в EEWE в течение четырех машинных циклов после установки EEMWE.
ЭСППЗУ(EEPROM) нельзя программировать во время записи флэш-памяти из ЦПУ. С учетом этого, перед
началом новой записи в ЭСППЗУ(EEPROM) необходимо проверить завершение программирования флэш-
памяти. Шаг 2 необходимо выполнять, если в приложении используется программирование из загрузочного
сектора. Если программирование флэш-памяти под управлением ЦПУ не предусмотрено, то шаг 2 может быть
исключен. См. ⌠Самопрограммирование из сектора начальной загрузки с поддержкой чтения во время
записи стр 237. для детального изучения программирования из загрузочного сектора.
Предостережения: Прерывание между шагами 5 и 6 может нарушить цикл записи из-за превышения
установленного предела времени на выполнение этих шагов. Если процедура обработки прерывания,
осуществляющая доступ к ЭСППЗУ(EEPROM), прерывается другим доступом к ЭСППЗУ(EEPROM), то EEAR или
EEDR будут изменены, вызывая сбой прерванного цикла доступа. Во избежание этих проблем рекомендуется
сбрасывать флаг общего разрешения прерываний при выполнении последних четырех шагов.
По окончании записи бит EEWE сбрасывается аппаратно. Данный бит может опрашиваться программно
для определения возможности записи следующего байта (нулевое значение). После установки EEWE
ЦПУ останавливается на два машинных цикла перед выполнением следующей инструкции.

Разряд 0 √ EERE: Разрешение чтения из ЭСППЗУ(EEPROM)

Сигнал разрешения чтения из ЭСППЗУ(EEPROM) EERE является стробом чтения ЭСППЗУ(EEPROM). После
записи корректного адреса в регистр адреса EEAR бит EERE должен быть установлен к лог.1 для запуска
механизма чтения ЭСППЗУ(EEPROM). Чтение из ЭСППЗУ(EEPROM) выполняется одновременно с инструкцией,
поэтому, запрашиваемые данные готовы для считывания сразу по ее завершении. После чтения из
ЭСППЗУ(EEPROM) ЦПУ задерживается на четыре машинных цикла, а только затем выполняет следующую
инструкцию. Пользователь должен опросить флаг EEWE до начала операции чтения. Если осуществляется
операция записи, то невозможно не только считать ЭСППЗУ, но и изменить регистр адреса EEAR. Во время
доступа к ЭСППЗУ используется калиброванный генератор. В таблице 2 приведено типичное время
программирования ЭСППЗУ(EEPROM) через ЦПУ.

Table 7-1. Время программирования ЭСППЗУ(EEPROM)

Операция Количество периодов Типичное время


калиброванного RC-генератора (1). программирования

Запись ЭСППЗУ (через ЦПУ) 8448 8.5 мс

Прим 1. Используется частота 1 МГц независимо от установки конфигурационного бита CKSEL

Далее представлены примеры кодов функций записи в ЭСППЗУ(EEPROM) на языках Ассемблер и Си. В данных
примерах предполагается, что прерывания работают таким образом, что ни одно не возникает в процессе
выполнения данных функций (например, путем общего отключения прерываний). Кроме того, считается, что из
загрузочного сектора не выполняется программирование флэш-памяти. В противном случае функция записи в
ЭСППЗУ(EEPROM) должна ожидать окончания действия инструкции SPM.

Пример кода на Ассемблере


EEPROM_write:
; Ожидаем окончание предыдущей записи
sbic EECR,EEWE
rjmp EEPROM_write
; Записываем адрес (r18:r17) в адресный регистр ЭСППЗУ
out EEARH, r18
out EEARL, r17
; Записываем данные (r16) в регистр данных ЭСППЗУ
out EEDR,r16
; Записывает лог. 1 в EEMWE
sbi EECR,EEMWE
; Запуск записи в ЭСППУ установкой EEWE
sbi EECR,EEWE
ret

Пример кода на Си
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). При


разработке примеров учитывалось управление прерываниями таким образом, что ни одно из них не
возникает в процессе выполнения этих функций.

Пример кода на Ассемблере

EEPROM_read:
; Ожидание завершения предыдущей записи
sbic EECR,EEWE
rjmp EEPROM_read
; Установка адреса (r18:r17) в адресном регистре
out EEARH, r18
out EEARL, r17
; Запуск чтения ЭСППЗУ путем установки EERE
sbi EECR,EERE
; Считывание данных из регистра данных ЭСППЗУ
in r16,EEDR
ret

Пример кода на Си

unsigned char EEPROM_read(unsigned int uiAddress)


{
/* Ожидание завершения предыдущей записи*/
while(EECR & (1<<EEWE))
;
/* Установка адресного регистра */
EEAR = uiAddress;
/* Разрешение чтения из ЭППЗУ путем установки EERE */
EECR |= (1<<EERE);
/* Возврат данных из регистра данных ЭСППЗУ*/
return EEDR;
}

8. Системная синхронизация и тактовые источники

8.1 Источники синхронизации и их распределение

На рисунке 8-1 представлены источники синхронизации и распределение синхроимпульсов к встроенным


блокам ATmega16. Не обязательно вся синхронизация должна работать в одно и тоже время. В целях
снижения энергопотребления тактирование неиспользуемых модулей может быть прекращено путем
перевода в различные режимы сна командой sleep (см. ⌠Управление энергопотреблением и режимы
сна на стр 31).
Рисунок 8-1 Распределение синхронизирующих импульсов

8.1.1 Синхронизация ЦПУ clkCPU

Синхронизация ЦПУ подключается к модулям микроконтроллера, которые связаны с работой ядра AVR.
Примерами таких модулей являются файл регистров общего назначения, регистр статуса и память
данных, выполняющая функцию стека. Остановка синхронизации ЦПУ приводит к прекращению
выполнения ядром любых действий и вычислений.

8.1.2 Синхронизация ввода-вывода √ clkI/O

Синхронизация ввода-вывода используется основными модулями ввода-вывода, в т.ч. таймеры-счетчики,


SPI и УСАПП(USART). Она также используется модулем внешних прерываний, но в некоторых случаях внешние
прерывания детектируются в асинхронном режиме для поддержки работоспособности внешних
прерываний даже при отключенной синхронизации. Также обратите внимание, что после отключения
данной синхронизации (во всех режимах сна) двухпроводной интерфейс TWI продолжает наблюдать за
передаваемым по шине адресом асинхронно.

8.1.3 Синхронизация флэш-памяти clkFLASH

Синхронизация флэш-памяти тактирует работу интерфейса флэш-памяти. Обычно эта синхронизация


работает одновременно с синхронизацией ЦПУ.
8.1.4 Синхронизация асинхронного таймера √ clkASY
Синхронизация асинхронного таймера используется для тактирования асинхронного таймера-счетчика
внешним кварцевым резонатором частотой 32 кГц. Данный тактовый генератор позволяет использовать
таймер-счетчик как счетчик реального времени, даже при переводе микроконтроллера в режим сна.

8.1.5 Синхронизация АЦП clkADC

АЦП(ADC) тактируется обособленным блоком синхронизации. Это позволяет остановить работу


синхронизации ЦПУ и ввода-вывода на время преобразования АЦП в целях снижения влияния
цифрового шума на результат преобразования. С помощью этого достигается более точный результат
преобразования.

8.2 Источники синхронизации

С помощью конфигурационных бит имеется возможность выбора нескольких источников синхронизации.


Сигнал синхронизации выбранного источника является входным для тактового генератора AVR и затем
подключается к соответствующим модулям.

Table 8-1. Выбор опций синхронизации микроконтроллера

Источники синхронизации CKSEL3..0(1)


Внешний кварцевый/керамический резонатор 1111 - 1010
Внешний низкочастотный кварцевый резонатор 1001
Внешний RC-генератор 1000 - 0101
Встроенный калиброванный RC-генератор 0100 - 0001
Внешняя синхронизация 0000

Прим. 1: Для всех конфигурационных(fuses) бит “1” означает незапрограммированное состояние, а 0


запрограммированное.
Подробное описание каждой из этих опций приведено в следующих разделах. При выходе ЦПУ из
режима выключения (Power-down) или экономичного режима (Power-save) выбранный источник
синхронизации используется по истечении времени на запуск, тем самым гарантируя стабильность
работы генератора перед первым выполнением инструкции. Запуск микроконтроллера, инициированный
сбросом (reset), сопровождается дополнительной задержкой для достижения питанием стабильного
уровня перед переводом микроконтроллера в нормальный режим работы. Генератор сторожевого
таймера используется для синхронизации данного модуля, который формирует задержку при запуске.
Длительность генерируемой задержки определяется количеством импульсов генератора сторожевого
таймера и для различных случаев приведена в таблице 8-2. Частота генератора сторожевого таймера
зависит от напряжения питания, что показано в разделе ⌠Типовые характеристики ATmega16:
предварительные данные■.
Таблица 8-2 Количество тактов сторожевого таймера

Типичное время переполнения Типичное время переполнения Количество тактов


(VCC = 5.0В) (VCC = 3.0В)
4.1 мс 4.3 мс 4K (4096)
65 мс 69 мс 64K (65536)

8.3 Первоначальный источник синхронизации


Микроконтроллер поставляется с установками CKSEL = “0001” и SUT = “10”. Эти значения
соответствуют выбору в качестве источника синхронизации внутреннего RC-генератора с максимальным
временем старта. Данная настройка гарантирует всем пользователям возможность установить
требуемый источник синхронизации с помощью внутрисистемного или параллельного программатора.

8.4 Кварцевый генератор


XTAL1 и XTAL2 √ вход и выход, соответственно, инвертирующего усилителя, который может быть
настроен для использования в качестве встроенного генератора (см. рисунок 19). Для задания частоты
может использоваться либо кварцевый либо керамический резонатор. Конфигурационный бит CKOPT
выбирает один из двух режимов усилителя генератора. Если CKOPT запрограммирован, то амплитуда
колебаний выходного сигнала генератора будет ограничена уровнями питания. Данный режим
рекомендуется использовать при высоком уровне окружающих шумов или при использовании выхода
XTAL2 в качестве источника синхронизации внешней схемы. Данный режим характеризуется широким
частотным диапазоном. Если CKOPT √ незапрограммирован, то амплитуда выходных колебаний
генератора снижается. Использование данного режима позволяет существенно снизить потребляемую
мощность, но при этом ограничен частотный диапазон и нельзя XTAL2 использовать для внешней
синхронизации.
При использовании резонаторов максимальная частота равна 8 МГц, если CKOPT √
незапрограммирован, и 16 МГц, если CKOPT- запрограммирован. C1 и C2 должны быть всегда равны
независимо от использования кварцевого или керамического резонатора. Оптимальное значение
емкостей конденсаторов зависит от используемого кварцевого или керамического резонатора, от
значения паразитной емкости и от окружающего уровня электромагнитного шума. Рекомендации по
выбору номиналов конденсаторов приведены в таблице 8-3. Для керамических резонаторов необходимо
использовать конденсаторы с номиналом, рекомендуемым производителем.
Таблица 8-3 Рабочие режимы кварцевого генератора

Figure 8-2. Соединения кварцевого генератора

Осциллятор может работать в трех различных режимах, каждый оптимизированный для определенного
частотного диапазона.
рабочий режим выбран предохранителями CKSEL3:1 как показано в Таблице 8-3.

Примечание:
1. Данная опция должна задаваться только при использовании керамического резонатора, а не
кварцевого.

Конфигурационные биты CKSEL0 совместно с битами SUT1..0 выбирают время старта в соответствии с
таблицей 8-4.

Table 8-4.
Временая задержка при запуске для различных настроек кварцевого генератора

CKSEL0 SUT1..0 Длительность задержки Дополнительная Рекомендуемая область применения


при выходе из режима задержка после
выключения и сброса (VCC=
экономичного режима 5.0В)

0 00 258 CK(1) 4.1 мс Керамический резонатор, Быстро


нарастающее питание
0 01 258 CK(1) 65 мс Керамический резонатор, медленно
нарастающее питание
0 10 1K CK(2) - Керамический резонатор, детектор
питания (BOD) включен
0 11 1K CK(2) 4.1 мс Керамический резонатор, быстро
Нарастающее питание
1 00 1K CK(2) 65 мс Керамический резонатор, медленно
нарастающее питание
1 01 16K CK - Кварцевый генератор, детектор
питания (BOD) включен
1 10 16K CK 4.1 мс Кварцевый резонатор, быстро
Нарастающее питание
1 11 16K CK 65 мс Кварцевый резонатор, медленно
нарастающее питание

Прим.:
1. Данные опции допускается использовать, только если микроконтроллер работает не на частоте
близкой к максимальной рабочей, а также, если стабильность частоты при старте не важна для
данного приложения. Данные опции не приемлемы при использовании кварцевых резонаторов.
2. Данные опции реализованы для использования керамических резонаторов и гарантируют
стабильность частоты после запуска. При данных установках допускается использовать
кварцевый резонатор, но при условии, что рабочая частота микроконтроллера меньше
максимальной, а также, если стабильность частоты во время запуска не важна для данного
приложения.

8.5 Низкочастотный кварцевый генератор

Для использования тактирования кварцевого резонатора 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. Данные опции необходимо использовать, если стабильность частоты при старте не важна для приложения.

8.6. Внешний RC-генератор


Для приложений некритичных к стабильности временных характеристик в качестве источника синхронизации
может использоваться внешняя RC-цепь, подключение которой показано на рисунке 8-3.
Тактовая частота грубо определяется выражением f = 1/(3RC). Номинал конденсатора C должен быть не
менее 22 пФ. Путем программирования конфигурационного бита CKOPT пользователь может разрешить
подключение внутреннего конденсатора 36 пФ между XTAL1 и GND, тем самым исключая необходимость
применения внешнего конденсатора. Более подробная информация о работе генератора и о выборе
номиналов R и C приведена в рекомендациях по применению внешнего RC-генератора.
Рисунок 8-3 Схема подключения внешней задающей RC-цепи

Генератор может работать в четырех различных режимах, каждый из которых ориентирован на специфический
частотный диапазон. Рабочий режим выбирается конфигурационными битами CKSEL3..0 (см. табл. 8-6).
Таблица 8-6 √ Рабочие режимы внешнего RC-генератора

После разрешения работы данного генератора длительность задержки при старте определяется установками
конфигурационных бит SUT как показано в (см. табл. 8-7).

Таблица 8-7 Длительность задержек при старте после выбора внешнего RC-генератора.

Примечание:
1. Данная опция не должна использоваться на тактовых частотах близких к максимальной.

8.7 Встроенный калиброванный RC-генератор

Встроенный калиброванный 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].

Table 8-8. Режимы встроенного калиброванного RC-генератора

CKSEL3..0 Номинальная частота, МГц


0001(1) 1.0
0010 2.0
0011 4.0
0100 8.0

Прим.: 1. Микроконтроллер поставляется с данной установкой.


После выбора данного генератора длительность задержки при запуске микроконтроллера определяется
установками конфигурационных бит SUT (см. табл. 8-9). Выводы XTAL1 и XTAL2 должны быть оставлены
неподключенными (NC).

Table 8-9. Длительности задержек при запуске с различными настройками встроенного


калиброванного RC-генератора

Прим.: 1. Микроконтроллер поставляется с данной установкой.

8.8 Внешняя синхронизация

Если необходимо тактировать микроконтроллер от внешнего источника, то его необходимо подключить к


выводу XTAL1 (см. рисунок 8-4). В этом случае внешняя синхронизация должна быть разрешена записью
в конфигурационные биты CKSEL значения “0000”. Если запрограммировать конфигурационный бит
CKOPT, то между XTAL1 и GND будет подключен внутренний конденсатор номиналом 36 пФ.
Рисунок 8-4 √ Схема подключения внешнего источника синхронизации

После выбора данного источника синхронизации длительность задержки при запуске определяется
конфигурационными битами SUT как показано в таблице 8-10.
Таблица 8-10 Длительность задержки при запуске при выборе внешней синхронизации

После подключения внешнего тактового источника необходимо избегать внезапных изменений его
частоты для гарантирования стабильности работы микроконтроллера. Если на следующем такте частота
изменится более чем на 2% по сравнению с предыдущим, то поведение микроконтроллера может стать
непредсказуемым. Данный механизм реализован для гарантирования нахождения микроконтроллера в
состоянии сброса в процессе таких изменений тактовой частоты.

8.9 Генератор таймер-счетчика

Выводы генератора таймера-счетчика TOSC1 и TOSC2 предназначены для непосредственного


подключения кварцевого резонатора. В этом случае не требуются внешние конденсаторы. Генератор
оптимизирован для совместной работы с тактирования кварцевым резонатором 32.768 кГц. Подключение
внешнего тактового источника к выводу TOSC1 не рекомендуется.

Примечание:
Осциллятор Таймера/Счетчика используют то же тип кварцевого генератора(crystal oscillator) как низкочастотный
осциллятор(Low-Frequency Oscillator) и внутреннее конденсаторы имеют тот же номинал значения 36pF.

8.10 Описание регистра


8.10.1 Регистр калибровки генератора OSCCAL

Запись значения калибровочного байта в данный регистр приведет к подстройке генератора на


номинальную частоту.
В процессе сброса калибровочное значение для частоты 1МГц (расположен в старшем байте строки сигнатуры)
автоматически записывается в регистр OSCCAL.
Если встроенный RC-генератор используется на других частотах, то калибровочный байт необходимо записывать
программно.
Для этого необходимо с помощью программатора считать значение калибровочного байта, затем
сохранить его значение во флэш-память или ЭСППЗУ.
После этого, калибровочное значение может быть считано программно, а затем записано в регистр OSCCAL.
Если в регистр OSCCAL записать ноль, то выбирается минимальная частота.
Запись ненулевого значения приводит к повышению частоты генератора.
Запись $FF √ к выбору максимальной частоты.
Калиброванный генератор используется для синхронизации доступа к ЭСППЗУ и флэш-памяти.
Во время выполнения записи в ЭССПЗУ или во флэш-память не следует выполнять калибровку на частоту выше
на 10% от номинальной.
В противном случае, запись в ЭССПЗУ или во флэш-память может быть некорректной.
Обратите внимание, что генератор откалиброван отдельно на частоты 1.0, 2.0, 4.0 или 8.0 МГц.
Результат подстройки при записи различных значений приведен в таблице 8-11.

Table 8-11 Диапазон частот встроенного RC-генератора

9. Управление энергопотреблением и режимы сна

9.1 Обзор

Использование режимов сна позволяет отключать неиспользуемые модули MCU(микроконтроллера), тем


самым уменьшая потребляемую мощность. Микроконтроллер поддерживает несколько режимов сна,
позволяющих программисту оптимизировать энергопотребление под требования приложения.

Для перевода микроконтроллера в один из шести режимов сна необходимо предварительно установить
бит SE в регистре MCUCR, а затем выполнить инструкцию SLEEP. Биты SM2, SM1 и SM0 регистра
MCUCR задают в какой именно режим будет переведен микроконтроллер (холостой ход "Idle",
уменьшение шумов АЦП "ADC Noise Reduction", выключение "Power-down", экономичный "Power-save",
дежурный "Standby" или расширенный дежурный "Extended Standby") после выполнения команды SLEEP
(см. табл. 17). Выход из режима сна происходит при возникновении разрешенного прерывания. В этом
случае, помимо времени старта микроконтроллер приостанавливается на 4 машинных цикла, выполняет
процедуру обработки прерывания и продолжает выполнять команды следующие за SLEEP. Содержимое
файла регистров и статического ОЗУ остается неизменным после выхода из режима сна. Если во время
действия режима сна возникает условие сброса, то микроконтроллер пробуждается и исполняет код
программы по вектору сброса.

9.2 Sleep Modes

На рисунке 18 представлены различные системы синхронизации микроконтроллера ATmega128 и их


распределение. Данный рисунок может быть полезным при выборе соответствующего режима сна.
Регистр управления микроконтроллером √ MCUCR
Регистр управления микроконтроллером содержит биты управления энергопотреблением.
Разряд 5 √ SE: Разрешение перевода в режим сна
В бит SE должна быть записана лог. 1, когда необходимо микроконтроллер перевести в режим сна
командой SLEEP. Во избежание незапланированного программистом перевода микроконтроллера в
режим сна рекомендуется устанавливать этот бит непосредственно перед выполнением инструкции
SLEEP и сбрасывать сразу после пробуждения.
Разряды 4..2 √ SM2..0: Биты 2, 1 и 0 выбора режима сна
На рис 8-1 стр 24 представлены различные системы синхронизации микроконтроллера ATmega16 и их
распределение. Данный рисунок может быть полезным при выборе соответствующего режима сна.

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(расширенное резервное устройство)),
будет активирован в инструкцию сна.

Посмотрите Таблицу 9-2 для сводки.


Если разрешенное прерывание происходит, в то время как MCU находится в режиме ожидания, MCU
просыпается.

MCU тогда остановится на 4 цикла в дополнение ко времени запуска это выполнит подпрограмму прерывания и
выполнит инструкции после сна.

Содержимое файла Регистра и SRAM будут находится неизменно когда устройство пробудится от сна.

Если Сброс происходит во время режима ожидания, MCU просыпается и выполняется Вектор Сброса (Reset
Vector).

9.3 Режим холостого хода (Idle)


Если значение бит SM2-0 присвоить 000, то после выполнения инструкции SLEEP микроконтроллер
переходит в режим холостого хода, в котором останавливается ЦПУ, но продолжают работу
SPI, УСАПП (USART), Analog Comparator, АЦП(ADC), двухпроводной интерфейс (Two-wire Serial Interface), ,
таймеры-счетчики (Timer/Counters), система прерываний (Watchdog),
По сути, в данном режиме останавливается синхронизация ядра ЦПУ(ADC) и флэш-
памяти (clkCPU и clkFLASH), а остальная продолжает работу.

В режиме холостого хода допускается пробуждение от любого внешнего или внутреннего прерывания,
например, при переполнении таймера или завершении передачи УСАПП(USART). Если пробуждение по
прерыванию аналогового компаратора не требуется, то аналоговый компаратор может быть отключен
путем установки бита ACD в регистре управления и состояния аналогового компаратора ACSR. Это
позволит уменьшить потребляемый ток в режиме холостого хода. Если разрешена работа АЦП(ADC), то
преобразование автоматически запускается после перевода в данный режим.

9.4 Режим уменьшения шумов АЦП (ADC Noise Reduction)


Если значениям бит SM2-0 присвоить 001, то выполнение инструкции SLEEP приведет к переводу
микроконтроллера в режим уменьшения шумов АЦП(ADC), в котором останавливается ЦПУ(CPU), но продолжают
работу АЦП(ADC), внешние прерывания, наблюдение за адресом двухпроводной последовательного шины,
таймер-счетчик 0 и сторожевой таймер (конечно, если были предварительно активизированы).
Фактически в данном режиме прекращается синхронизация ввода-вывода (clkI/O), ядра ЦПУ (clkCPU) и
флэш-памяти (clkFLASH), а остальная синхронизация продолжает работу.
В этом режиме создается более благоприятные условия для аналогово-цифрового преобразования с
повышенной разрешающей способностью за счет снижения влияния шумов на результат измерения.
Если разрешена работа АЦП, то преобразование автоматически запускается при переводе в данный
режим. Выход из данного режима допускается не только при генерации запроса на прерывание по
завершению преобразования АЦП, но и при внешнем сбросе, сбросе по сторожевому таймеру, сбросе
при недопустимом снижении питания, прерывании при обнаружении установленного адреса на
двухпроводной последовательной шине, прерывании по таймеру-счетчику 0, прерывании по готовности
SPM/EEPROM, прерывании по внешнему уровню на выводах INT7:4 или внешнем прерывании по входам
INT3:0.

9.5 Режим выключения (Power-down)

Когда биты SM2:0 записаны в 010, инструкция SLEEP заставляет MCU ввести режим Выключения питания.

В этом режиме остановлен Внешний Осциллятор, в то время как Внешние прерывания, Двухпроводное
тактирование адреса Последовательного интерфейса и Сторожевой таймер продолжают работать (если
включено).

Только Внешний Сброс, Сторожевой Сброс, Сброс Снижения напряжения, Двухпроводное прерывание
соответствия адреса Последовательного интерфейса, Внешнее прерывание уровня на INT0 или INT1, или
Внешнее прерывание на INT2 могут разбудить MCU.

Этот режим ожидания(Sleep) в основном останавливает все сгенерированные такты, позволяя работу только
асинхронных модулей.

Обратите внимание на то, что, если инициированное прерывание уровня используется для пробуждения от
режима Выключения питания, измененный уровень, как должно сохраниться, в течение некоторого времени будит
MCU.

Обратитесь к “Внешним Прерываниям” на странице 66 для деталей.

При пробуждении от режима Выключения питания есть задержка от условия пробуждения, происходит, пока
пробуждение не вступает в силу.

Это позволяет тактированию перезапускаться и становиться стабильными, будучи остановленным.

Период пробуждения определен теми же Fuses CKSEL, которые определяют период тайм-аута сброса, как
описано в “Генераторах тактовых импульсов” на странице 25.

9.6 Экономичный режим (Power-save)


Когда биты SM2:0 записаны в 011, инструкция Sleep заставляет MCU войти в Экономичный режим питания.

Этот режим идентичен Выключению питания за одним исключением:

Если таймер-счетчик2 тактируется асинхронно, т.е., бит AS2 установлен в регистре ASSR, то таймер-счетчик2
будет работать во время сна.
Выход из режима сна возможен как по переполнению
таймера, так и при выполнении условия сравнения, если соответствующее прерывание для таймера-счетчика2
разрешено в регистре TIMSK, а также установлен бит общего разрешения прерываний в регистре SREG.

Если для асинхронного таймера НЕ включено асинхронное тактирование, то рекомендуется


использовать режим выключения вместо экономичного, т.к. содержимое регистров асинхронного таймера
должно рассматриваться как неопределенное после выхода из экономичного режима, в котором
значение AS2 было равно 0.

В данном режиме сна останавливаются все тактовые источники за исключением асинхронных (clkASY),
работающих только совместно с асинхронными модулями, в т.ч. таймер-счетчик2 с разрешенной опцией
асинхронного тактирования.

9.7 Дежурный режим (Standby)


После установки значения SM2..0 = 110 и выбора опции тактирования от внешнего кварцевого или
керамического резонатора выполнение инструкции SLEEP приводит к переходу микроконтроллера в
дежурный режим. Данный режим идентичен режиму выключению за исключением того, что генератор
продолжает свою работу. Из дежурного режима микроконтроллер выходит за 6 машинных циклов.

9.8 Расширенный дежурный режим (Extended Standby)


Запись в SM2..0 значения 111 с учетом выбора в качестве тактового источника внешнего кварцевого или
керамического резонатора означает, что после выполнения команды SLEEP микроконтроллер будет
переведен в расширенный дежурный режим. Данный режим идентичен экономичному за исключением
продолжения работы тактового генератора.
Выход из расширенного дежурного режима происходит за шесть машинных циклов.

9.9 Минимизация потребляемой мощности


В процессе оптимизации энергопотребления могут возникнуть некоторые проблемы. В общем случае
необходимо по возможности максимально использовать режимы сна, а собственно режим сна
необходимо выбрать исходя из поддержки только необходимых функций. Все неиспользуемые функции
должны быть отключены. В частности, для следующих модулей в целях достижения наименьше
возможного энергопотребления должны быть учтены некоторые рекомендации

9.9.1 Аналогово-цифровой преобразователь

Если АЦП был активизирован, то он останется активным и во всех режимах сна. Для снижения мощности
рекомендуется отключать АЦП перед переводом в режим сна. Если АЦП был отключен, а затем снова
включен, то следующее преобразование будет расширенным (см. ⌠Аналогово-цифровой преобразователь on
page 196").

9.9.2 Аналоговый компаратор

Перед входом в режим холостого хода аналоговый компаратор необходимо выключить, если он не
используется. Перед входом в режим уменьшения шумов АЦП аналоговый компаратор должен быть
отключен. При входе в другие режимы сна аналоговый компаратор отключается автоматически. Однако,
если к неинвертирующему входу аналогового компаратора выбрано подключение встроенного источника
опорного напряжения, то перед входом в любой режим сна аналоговый компаратор необходимо
отключать. В противном случае встроенный источник опорного напряжения останется включенным
независимо от режима сна (см. также ⌠Аналоговый компаратор на стр 193).

9.9.3 Супервизор питания(Детектор снижения напряжения)


Если нет необходимости использовать супервизор питания, то данный модуль может быть выключен.
Если супервизор питания активизирован конфигурационным битом BODEN, то он также останется
активным и во всех режимах сна и, следовательно, будет постоянно потреблять мощность. При
организации режимов глубокого сна отключение данного модуля позволит существенно уменьшит
потребляемый ток (см. также "Супервизор питания на стр 38).

9.9.4 Встроенный источник опорного напряжения (ИОН)


Работа встроенного источника опорного напряжения разрешается, если необходимо использовать
супервизор питания, аналоговый компаратор или АЦП. Если данные модули будут отключены, то
встроенный ИОН также будет отключен и не будет потреблять мощность. При возобновлении его работы
программист должен учесть задержку на установление выходного напряжения ИОН перед его использованием.
Если ИОН остается включенным в режиме сна, то его можно использовать сразу после
пробуждения (см. также ⌠Встроенный источник опорного напряжения на стр 39 для уточнения времени его
запуска).

9.9.5 Сторожевой таймер


Если нет необходимости в использовании сторожевого таймера, то данный модуль должен быть
отключен. Если разрешить работу сторожевого таймера, то он останется активным во всех режимах сна
и, следовательно, будет потреблять мощность. Если требуются режимы глубокого сна, то данная опция
позволит существенно снизить общий ток (см. также ⌠Сторожевой таймер на стр 40).

9.9.6 Линии портов ввода-вывода


Перед переводом в режим сна все линии портов ввода-вывода должны быть настроены с учетом
потребления минимальной мощности. Основное внимание следует уделить отсутствию резистивных
нагрузок на выводах. В режимах сна, где отключена синхронизация ввода-вывода (clkI/O) и АЦП
(clkADC), входные буферы микроконтроллера отключены. Этим гарантируется отсутствие
энергопотребления неиспользуемой в режиме сна входной логикой. В некоторых случаях входная логика
необходима для определения условия пробуждения и в этом случае должна быть активной (см. также
⌠Разрешение цифрового ввода и режимы сна на стр 53). Если работа входного буфера разрешена, а входной
сигнал оказался отключенным или имеет уровень близкий к VCC/2, то этот входной буфер будет
потреблять повышенную мощность.

9.9.7 Интерфейс JTAG и встроенный блок отладки


Если работа встроенного блока отладки разрешена конфигурационным битом OCDEN, то даже при
переводе микроконтроллера в экономичный режим (Power save) или режим выключения (Power down)
командой sleep основной тактовый источник продолжит работу. В этом случае микроконтроллер будет
потреблять существенный ток даже в этих режимах сна. Избежать этого можно с помощью одного из трех
способов:
• Сбросить конфигурационный бит OCDEN.
• Сбросить конфигурационный бит JTAGEN.
• Установить бит JTD в регистре MCUCSR.
После разрешения работы интерфейса JTAG вывод TDO остается плавающим до тех пор пока JTAG
TAP-контроллер не начнет сдвигать данные. Если связанная с выводом TDO аппаратная часть не
выполняет подтягивание потенциала к плюсу питания, то потребляемая мощность увеличится. Обратите
внимание, что вывод TDI следующего микроконтроллера в сканируемой цепи содержит подтягивающий
резистор для избежания данной проблемы. Запись в бит JTD регистра MCUCSR лог. 1 приводит к
отключению интерфейса JTAG, так же как и незапрограммированное состояние конфигурационного бита
JTAG интерфейса.

9.10 Описание регистра


9.10.1 MCUCR Регистры команд микроконтроллера
Регистр команд MCU(микроконтроллера) содержит биты управления для управления питанием.

• Bits 7, 5, 4 – SM2:0: Биты выбора режима ожидания 2, 1, and 0


Эти биты выбирают между шестью доступными режимами ожидания как показано в Таблице 9-2.
Прим. 1: Дежурный режим и расширенный дежурный режим доступны только при использовании
внешних кварцевых или керамических резонаторов.

• Bit 6 – SE: Включение сна.


SE бит, должен быть записан в логический 1цу, чтобы заставить MCU(МК) ввести режим ожидания, когда
инструкция сна выполняется.
Чтобы избежать сна MCU(МК) если это не цель программиста, рекомендуется записать, что Sleep Enable (SE) бит
одному как раз перед выполнением сна, инструкцию и очистить это сразу после пробуждения.

10. Системное управление и сброс


10.1 Сброс микроконтроллера

В процессе сброса во все регистры ввода-вывода записываются их начальные значения и выполнение


программы начинается с вектора сброса. По вектору сброса должна хранится инструкция абсолютного
перехода JMP на метку процедуры обработки сброса. Если в программе не используются источники
прерывания, то векторы прерываний не используются, а зарезервированные под них ячейки памяти
могут использоваться для равномерного расположения кода программы. Имеется также случай, когда
вектор сброса расположен в секции прикладной программы, а векторы прерываний находятся в
загрузочном секторе или наоборот. На рисунке 10-1 показана схема организации логики сброса.
Система и Сброс haracteristics” на странице 282 определяют электрические параметры схемы сброса.
Порты ввода-вывода AVR-микроконтроллера немедленно возвращаются к их первоначальному
состоянию, как только один из источников сброса становится активным. Для этого не требуется работа
какой-либо синхронизации.
После прекращения действия всех источников сброса вступает в силу счетчик задержки, продлевающий
внутренний сброс. Данная последовательность требуется для гарантирования запуска микроконтроллера
при достижении напряжением питания стабильного уровня. Длительность задержки при старте
определяется конфигурационными битами CKSEL. Различные варианты установок длительностей
задержек представлены в разделе в “Генераторах тактовых импульсов” на странице 25.

10.1.1 Источники сброса


ATmega16 имеет пять источников сброса:

•Сброс при подаче питания. Микроконтроллер переходит в состояние сброса, если напряжение питания ниже
порога сброса при подаче питания (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).

Рисунок 10-4 Запуск микроконтроллера (RESET управляется внешне).

10.1.3 Внешний сброс


Внешний сброс генерируется, если на вход RESET подать низкий уровень. Если подать импульс сброса
длительностью более VRST (see “System and Reset Characteristics” on page 282), то будет генерирован сброс,
даже если синхронизация не запущена. При подаче импульса сброса длительностью менее VRST сброс не
гарантируется. Если сигнал на выводе RESET достигает порогового напряжения сброса VRST на его
положительном фронте, то запускается счетчик задержки и микроконтроллер начнет работу только по истечении
периода tTOUT.

10.1.4 Контроль напряжения питания

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 Сброс микроконтроллера схемой контроля питания

10.1.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

По истечении периода переполнения сторожевого таймера генерируется короткий импульс сброса


длительностью равной одному периоду системной синхронизации (1 CK). Падающим фронтом этого
импульса запускается счетчик задержки tTOUT

Рисунок 10-6 Сброс сторожевым таймером

Регистр управления и статуса микроконтроллера √ MCUCSR


В регистре управления и статуса микроконтроллера хранится информация об источнике, который вызвал
сброс микроконтроллера.

10.2 Встроенный источник опорного напряжения (ИОН)


ATmega16 содержит встроенный источник опорного напряжения (ИОН). ИОН используется схемой
контроля питания и может быть подключен ко входу аналогового компаратора или к АЦП. Опорное
напряжение АЦП 2.56В генерируется встроенным ИОН.

10.2.1 Сигналы разрешения и длительность запуска ИОН

ИОН характеризуется задержкой при включении, которая может оказать негативное влияние, если не
будет учтена.
Время задержки дано в “Системе и Характеристиках Сброса” на странице 282.
Для оптимизации энергопотребления ИОН не всегда находится во включенном состоянии. ИОН остается во
включенном состоянии в следующих случаях:
1. Когда разрешена работа схемы контроля питания BOD (запрограммирован конфигурационный бит BODEN).
2. Если ИОН подключен ко входу аналогового компаратора (установлен бит ACBG в ACSR).
3. Если разрешена работа АЦП.
Следовательно, когда работа BOD запрещена и установлен бит ACBG или разрешена работа АЦП,
программист должен предусмотреть задержку на время запуска ИОН перед использованием выходных
данных аналогового компаратора или АЦП. В целях снижения потребляемой мощности в режиме
выключения (Power-down) программист должен избежать приведенных выше трех условий для
гарантирования, что ИОН будет отключен после перевода микроконтроллера в режим выключения.

10.3 Сторожевой таймер


Сторожевой таймер тактируется от отдельного встроенного генератора частотой 1 МГц. Данное значение
типично для напряжения питания VCC = 5В. Значение частоты при другом напряжении питания см. в
Table 10-1 on page 42. Период переполнения сторожевого таймера можно задавать путем управления
предделителем.
Инструкция WDR выполняет сброс сторожевого таймера. Сторожевой таймер также
сбрасывается при выключении или во время сброса микроконтроллера. Период переполнения
определяют восемь различных коэффициентов деления предделителя. Если инструкция сброса
сторожевого таймера WDR не выполняется в течение времени равного периоду переполнения
сторожевого таймера, то ATmega16 сбрасывается и начинает выполнение программы по вектору
сброса.

Для синхронизации деталей о Сторожевом Сбросе обратитесь к странице 39.

Чтобы предотвратить неумышленное отключение Сторожевого таймера, специальный поворот - от


последовательности должен сопровождаться, когда Сторожевой таймер отключен. Обратитесь к описанию
Сторожевого Регистра команд Таймера для деталей.

Рисунок 10-7 Сторожевой таймер

10.4 Обзор регистра


10.4.1 Регистр управления и статуса микроконтроллера √ MCUCSR

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 в данный флаг.

• Разряд 3 √ WDRF: Флаг индикации сброса сторожевым таймером


Данный бит устанавливается после сброса сторожевым таймером. Данный бит сбрасывается при подаче
питания или путем записи лог. 0 в данный флаг.

• Разряд 2 √ BORF: Флаг индикации сброса схемой контроля напряжения питания


Данный флаг принимает единичное состояние, если схема контроля напряжения питания перевела
микроконтроллер в состояние сброса. Данный бит сбрасывается при подаче питания и путем записи лог.
0 в данный флаг.

• Разряд 1 √ EXTRF: Флаг внешнего сброса


Данный бит устанавливается при возникновении внешнего сброса. Флаг сбрасывается при подаче
питания или путем записи лог. 0 в данный флаг.

• Разряд 0 √ PORF: Флаг сброса при подаче питания


Данный флаг устанавливается, если сброс был инициирован подачей питания. Данный бит сбрасывается
только путем записи лог. 0 в данный флаг.

Если флаги сброса необходимо использовать для определения причины сброса, то программист должен
предусмотреть сброс значений флагов MCUCSR желательно сразу после опроса их значений. Если
регистр очищается перед возникновением другого сброса, то источник данного сброса может быть
найден среди флагов сброса.

10.4.2 Регистр управления сторожевого таймера WDTCR

Разряды 7-5 Зарезервированы


Данные разряды являются зарезервированными в ATmega16A и всегда считываются как 0.

• Bit 4 – WDTOE: Watchdog Turn-off Enable


This bit must be set when the WDE bit is written to logic zero. Otherwise, the Watchdog will not be disabled.
Once written to one, hardware will clear this bit after four clock cycles. Refer to the description of the WDE bit for a
Watchdog disable procedure.

• Бит 4 – WDTOE: сторожевой поворот - прочь включает


Данный бит необходимо установить непосредственно перед записью лог. 0 в бит WDE. В противном
случае запретить работу сторожевого таймере невозможно. После записи в данный бит лог. 1 он
автоматически аппаратно сбросится по истечении четырех тактов синхронизации микроконтроллера.
После того, как записанный в 1, аппаратные средства очистят этот бит после четырех тактов.
Обратитесь к описанию WDE бита для Сторожевого таймера отключение процедуры.

• Разряд 3 WDE: Разрешение сторожевого таймера


Работа сторожевого таймера разрешается (запрещается) путем установки (сброса) бита WDE. Сбросить
бит WDE возможно, только если предварительно установить бит WDCE=1. Для выключения сторожевого
таймера необходимо выполнить следующую последовательность:
1. Записать лог. 1 в WDCE и WDE одной инструкцией. Лог. 1 должна быть записана в бит WDE, даже
если до выполнения данной операции в нем уже была записана лог. 1.
2. В течение следующих четырех тактов записать лог. 0 в WDE, что приводит к отключению
сторожевого таймера.

• Разряд 2-0 WDP2, WDP1, WDP0: Выбор коэффициента деления


Биты WDP2, WDP1 и WDP0 задают коэффициент деления частоты генератора сторожевого таймера
после разрешения работы последнего. Значения коэффициентов деления и соответствующих периодов
переполнения приведены в табл. 10-1.
Таблица 10-1 Настройка предделения генератора сторожевого таймера

В следующих примерах приведены функции выключения сторожевого таймера на Ассемблере и Си. В примерах
предполагается, что система прерываний настроена таким образом, чтобы во время выполнения функции не
возникло прерывание (например, с помощью общего запрета прерываний инструкцией 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.

11.2. Векторы прерываний в ATmega16


Таблица 11-1 Векторы сброса и прерываний

Прим.:
1. Если конфигурационный бит BOOTRST запрограммирован, то микроконтроллер выполняет
переход на адрес сброса в загрузочном секторе, см. ⌠ Самопрограммирование из сектора начальной загрузки с
поддержкой чтения во время записи на стр 237

2. Если установлен бит IVSEL в регистре GICR(MCUCR), то векторы прерываний перемещаются в начало
загрузочного сектор флэш-памяти. В этом случае к адресу каждого вектора прерывания из
таблицы прибавляется стартовый адрес загрузочного сектора флэш-памяти.

В таблице 11-2 показано расположение векторов сброса и прерываний в зависимости от различных


установок BOOTRST и IVSEL. Если программа не использует прерывания, то она может быть размещена
равномерно, используя ячейки с адресами векторов прерываний для хранения программного кода.
Возможен также случай, когда вектор сброса располагается в секторе прикладной программы, а векторы
прерываний в загрузочном секторе или наоборот.
Таблица 11-2 Размещение векторов сброса и прерываний

Прим. :
1
Адрес сброса загрузочного сектора показан в таблице 25-6 на сто 249.
Для конфигурационного бита BOOTRST =1 означает незапрограммированное состояние,
0- запрограммированное.

Ниже приведено большинство типичных и общих программных установок адресов сброса и векторов
прерываний у ATmega16A:

Если конфигурационный бит BOOTRST незапрограммирован, размер загрузочного сектора установлен 2


кбайт и бит IVSEL установлен в регистре GICR(MCUCR), перед разрешением любого прерывания, то можно
использовать следующий пример распределения программы по адресам векторов сброса и прерываний.
Если конфигурационный бит BOOTRST запрограммирован и установлен размер загрузочного сектора 2
кбайт, самая типичная и общая установка программы для Адресов Сброса и Вектора прерывания:

сли конфигурационный бит BOOTRST запрограммирован, размер загрузочного сектора установлен 2


кбайт и бит IVSEL в регистре GICR(MCUCR), установлен перед разрешение любого из прерываний, самая
типичная и общая установка программы для Адресов Сброса и Вектора прерывания:

11.2.1 Перемещение прерываний между пространством приложения и начальной загрузки

Общий регистр управления прерываниями задает размещение таблицы векторов прерываний.

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

Разряд 0 IVCE: Разрешение изменения вектора прерывания


В бит IVCE должна быть записана лог. 1, чтобы разрешить изменение бита IVSEL. IVCE сбрасывается
аппаратно через четыре машинных цикла после записи лог. 1 в IVSEL. Установка бита IVCE приведет к
отключению прерываний, что описано при рассмотрении бита IVSEL выше. Ниже приведен пример кода.

Пример кода на Ассемблере


Move_interrupts:
; Разрешение изменения векторов прерываний
ldi r16, (1<<IVCE)
out MCUCR, r16
; Перемещение векторов в загрузочный сектор флэш-памяти
ldi r16, (1<<IVSEL)
out MCUCR, r16
ret
Пример кода на Си
void Move_interrupts(void)
{
/* Разрешение изменения векторов прерываний */
MCUCR = (1<<IVCE);
/* Перемещение векторов в загрузочной сектор флэш-памяти */
MCUCR = (1<<IVSEL);
}

12. Порты ввода-вывода


12.1 Введение
Все порты ввода-вывода далее по тексту (ПВВ) AVR-микроконтроллеров работают по принципу чтение-
модификация-запись при использовании их в качестве портов универсального ввода-вывода. Это означает, что
изменение направления ввода-вывода одной линии порта командами SBI и CBI будет происходит без
ложных изменений направления ввода-вывода других линий порта. Данное распространяется также и на
изменение логического уровня (если линия порта настроена на вывод) или на включение/отключение
подтягивающих резисторов (если линия настроена на ввод). Каждый выходной буфер имеет
симметричную характеристику управления с высоким втекающим и вытекающим выходными токами.
Выходной драйвер обладает нагрузочной способностью, которая позволяет непосредственно управлять
светодиодными индикаторами. Ко всем линиям портов может быть подключен индивидуальный
выборочный подтягивающий к плюсу питания резистор, сопротивление которого не зависит от
напряжения питания. На всех линиях ПВВ установлены защитные диоды, которые подключены к VCC и
Общему (GND), как показано на рисунке 12-1. Подробный перечень параметров ПВВ приведен в разделе
"Электрические характеристики" на стр 279 для подробного ознакомления.

Рисунок 12-1 Эквивалентная схема линии ПВВ

Ссылки на регистры и биты регистров в данном разделе даны в общей форме. При этом, символ “x”
заменяет наименование ПВВ, а символ ”n” заменяет номер разряда ПВВ. Однако при составлении
программы необходимо использовать точную форму записи. Например, PORTB3, означающий разряд 3
порта B, в данном документе записывается как PORTxn. Адреса физических регистров ввода-вывода и
распределение их разрядов приведены в разделе ⌠Описание регистров портов ввода-вывода". На стр 64

Для каждого порта ввода-вывода в памяти ввода-вывода зарезервировано три ячейки: одна под регистр
данных PORTx, другая под регистр направления данных DDRx и третья под состояние входов порта PINx. Ячейка,
хранящая состояние на входах портов, доступна только для чтения, а регистры данных и направления данных
имеют двунаправленный доступ. Кроме того, установка бита выключения подтягивающих резисторов PUD
регистра SFIOR отключает функцию подтягивания на всех выводах всех портов.

Ниже приведено описание порта ввода-вывода для универсального цифрового ввода-вывода.


Общий Цифровой ввод-вывод описан в “Портах как Общий Цифровой ввод-вывод” на странице 50
Большинство выводов портов поддерживают альтернативные функции встроенных периферийных
устройств микроконтроллера. Описание альтернативных функций приведено далее в подразделе
⌠Альтернативные функции порта на странице 53 (см. также описание функций соответствующих периферийных
модулей).

Обратите внимание, что для некоторых портов разрешение альтернативных функций некоторых выводов
делает невозможным использование других выводов для универсального цифрового ввода-вывода.

12.2 Порты в качестве универсального цифрового ввода-вывода


Все порты являются двунаправленными портами ввода-вывода с опциональными подтягивающими
резисторами. Рисунок 12-2 иллюстрирует функциональную схему одной линии порта ввода-вывода,
обозначенный как Pxn.
рисунок 12-2. Организация универсального цифрового ввода-вывода (1)

Прим. 1: Сигналы WPx, WDx, RRx, RPx и RDx являются общими в пределах одного порта. Сигналы clkI/O,
SLEEP, и PUD являются общими для всех портов.

12.2.1 Настройка выводов

Режим и состояние для каждого вывода определяется значением соответствующих разрядов трех
регистров: 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,
PORTxn} = 0b00) или вывод лог. 1 ({DDxn, PORTxn} = 0b11) в качестве промежуточного шага.

В таблице 25 подытоживается действие управляющих сигналов на состояние вывода.


Таблица 25 √ Настройка вывода порта

Table 12-1 суммирует контрольные сигналы для значения портов.

12.2.2 Считывание состояние вывода

Независимо от значения бита направления данных DDxn состояние вывода порта может быть опрошено
через регистровый бит PINxn. Как показано на рисунке 12-2 регистровый бит PINxn и предшествующая ему
триггерная защелка составляют синхронизатор. Данный подход позволяет избежать метастабильности,
если изменение состояния на выводе произошло около фронта внутренней синхронизации. Однако
такой подход связан с возникновением задержки. На рисунке 12-3 представлена временная диаграмма
синхронизации во время опроса внешне приложенного к выводу уровня. Длительности минимальной и
максимальной задержек на распространение сигнала обозначены как tpd,max и tpd,min, соответственно.

Рисунок 12-3 Синхронизация во время опроса приложенного к выводу порта уровня

Рассмотрите период тактирования, запускающийся вскоре после первого падающего края системного
тактирования. Фиксатор закрыт, когда такты низки, и идут прозрачные, когда такты высоки, как обозначены
теневой областью сигнала “SYNCLATCH”. Сигнальное значение фиксируют, когда системные такты идут низко.
Это синхронизировано в Регистр PINxn в последующем положительном краю тактирования. Как обозначено этими
двумя стрелками tpd, максимальный и tpd, минута, единственный сигнальный переход на контакте будет
задержан между ½ и 1½ системными периодами тактирования в зависимости от времени утверждения.

Когда чтение назад программного обеспечения присваивало значение контакта, только для указанных целей,
инструкция должна быть вставлена как обозначено в рисунке 12-4. Наборы команд “СИНХРОНИЗАЦИЯ
ФИКСИРУЮТ” сигнал в положительном краю тактирования. В этом случае задержка tpd через синхронизатор
является одним системным периодом тактирования.

Рисунок 12-4.
Синхронизация, Читая программное обеспечение Присвоенное Значение Контакта

В следующих примерах показано как установить на линиях 0 и 1 порта В уровень лог. 1, а на линиях 2 и 3
лог. 0, а также как настроить линии 4-7 на ввод с подключением подтягивающих резисторов на линиях
6 и 7. Результирующее состояние линий считываются обратно, но, с учетом сказанного выше, включена
инструкция “nop” для обеспечения возможности обратного считывания только что назначенного состояния
некоторых выводов.

Пример кода на Ассемблере (1)


...
; Разрешаем подтягивание и устанавливаем высокие выходные уровни
; Определяем направления данных линий портов
ldi r16,(1<<PB7)|(1<<PB6)|(1<<PB1)|(1<<PB0)
ldi r17,(1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0)
out PORTB,r16
out DDRB,r17
; Вставляем инструкцию nop для синхронизации
nop
; Опрос состояния выводов порта
in r16,PINB
...

Пример кода на Си (1)

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.3 Разрешение цифрового ввода и режимы сна

Как показано на рисунке 12-2 входной цифровой сигнал может быть зашунтирован к общему на входе
триггера Шмита. Сигнал, обозначенный на рисунке как SLEEP, устанавливается при переводе
микроконтроллера в режим выключения (Power-down), экономичный режим, дежурный режим и
расширенный дежурный режим. Это позволяет избежать повышения потребляемого тока в случае, если
некоторые входные сигналы окажутся в плавающем состоянии или уровень входного аналогового
сигнала будет близок к VCC/2.

Сигнал SLEEP игнорируется по входам внешних прерываний. Если запросы на внешнее прерывание
отключены, то SLEEP действует и на эти выводы. SLEEP также игнорируется на некоторых других входах
при выполнении их альтернативных функций (см. ⌠Альтернативные функции порта на стр 53).

Если на выводе внешнего асинхронного прерывания, настроенный на прерывание по нарастающему


фронту, падающему фронту или на любое изменение, присутствует уровень лог. 1 и при этом внешнее
прерывание не разрешено, то соответствующий флаг внешнего прерывания будет установлен при
выходе из выше упомянутых режимов сна, т.к. функция шунтирования на входе в режимах сна приводит
возникновению логических изменений.

12.2.4. Неподключенные выводы

Если несколько выводов остаются неиспользованными, то рекомендуется гарантировать на них


присутствие определенного логического уровня. Не смотря на то, что большинство цифровых входов
отключены в режимах глубокого сна, как описано выше, необходимо избежать наличия плавающих
входов во избежание повышенного потребления тока во всех других режимах работы микроконтроллера,
где цифровой ввод разрешен (Сброс, Активный режим и режим холостого).

Самым простым методом гарантирования присутствия определенного уровня на неиспользуемом выводе


является разрешение подключения внутреннего подтягивающего резистора. Однако в этом случае в
режиме сброса подтягивающие резисторы будут отключены. Если требуется малое потребление и в
режиме сброса, то необходимо устанавливать внешний подтягивающий резистор к плюсу или к минусу
питания. Подключение выводов непосредственно к VCC или GND не рекомендуется, т.к. может
возникнуть опасный ток при случайной конфигурации такого вывода на вывод данных.

12.3. Порты в качестве универсального цифрового ввода-вывода


(Альтернативные функции порта)

У большинства контактов порта есть альтернативные функции в дополнение к тому, чтобы быть Общим
Цифровым I/Os. Рисунок 12-5 показывает, как управляющие сигналы контакта порта от упрощенного рисунка 12-2
могут быть переопределены альтернативными функциями. Сигналы переопределения могут не присутствовать
во всех контактах порта, но число служит обобщенным описанием, применимым ко всем контактам порта в
семействе микроконтроллера AVR.

Все порты являются двунаправленными портами ввода-вывода с опциональными подтягивающими


резисторами. Рисунок 12-5 иллюстрирует функциональную схему одной линии порта ввода-вывода,
обозначенный как Pxn.
Рисунок 12-5 Альтернативные функции порта (1)

Прим. 1: Сигналы WPx, WDx, RLx, RPx и RDx являются общими в пределах одного порта. Сигналы clkI/O,
SLEEP, и PUD являются общими для всех портов. Все остальные сигналы индивидуальны для каждого
вывода.
В таблице 12-2 подытожены функции отключающих сигналов для активизации альтернативных функций.
Указатели на выводы и порты с рисунка 12-5 не показаны в итоговых таблицах. Отключающие сигналы
генерируются внутренне в модулях, поддерживающих альтернативные функции.

Таблица 26 √ Общее описание отключающих сигналов для активизации альтернативных функций


В следующих подразделах коротко описываются альтернативные функции для каждого порта и связь
отключающих сигналов с альтернативными функциями выводов.
Регистр специальных функций ввода-вывода √ SFIOR

12.3.1. Альтернативные функции порта A


Альтернативной функцией порта А является мультиплексированная младшая шина адреса/шина данных
внешнего интерфейса памяти.

У порта A есть альтернативная функция как аналоговый вход для ADC как показано в Таблице 12-3. Если немного
Портируют, контакты сконфигурированы как выводы, важно, что они не переключаются, когда преобразование
происходит. Это могло бы повредить результат преобразования.
Таблица 12.3 Альтернативные функции выводов порта А

В таблицах 12-4 и 12-5 приведена связь отключающих сигналов, представленных на рис. 12-5, и
альтернативных функций выводов порта А.

Таблица 12-4 Отключающие сигналы для разрешения альтернативных функций на PA7..PA4

Таблица 12-5 Отключающие сигналы для разрешения альтернативных функций на PA3..PA0


Альтернативные функции порта В
Выводы порта В с альтернативными функциями показаны в таблице 12-6.
Таблица 12-6 Альтернативные функции порта В

Ниже дано описание альтернативных функций выводов:

• SCK – Port B, Bit 7

SCK выход синхронизации в режиме ведущего, вход синхронизации в режиме подчиненного


интерфейса SPI. Если работа SPI разрешена как подчиненного, то данный вывод настраивается как вход
независимо от состояния DDB7. Если работа SPI разрешена как ведущего, то направление передачи
данных управляется DDB7. Если вывод принудительно настроен на ввод, то управление
подтягивающими резисторами осуществляется битом PORTB7.

• MISO – Port B, Bit 6

MISO ввод данных в режиме ведущего, вывод данных в режиме подчиненного интерфейса SPI. Если
разрешена работа SPI как ведущего (мастера), то данный вывод настраивается на ввод независимо от
состояния DDB6. Если работа SPI разрешена как подчиненного, то направление передачи данных
задается DDB6. Если вывод принудительно настраивается на ввод, то подключение подтягивающего
резистора останется под управлением бита PORTB6.

• MOSI – Port B, Bit 5

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.

• AIN0/INT2 – Port B, Bit 2


AIN0 неинвертирующий вход аналогового компаратора.
AIN0, Аналоговый Компаратор Положительный ввод. Сконфигурируйте контакт порта как введено с внутренним
получением по запросу, выключенным, чтобы избежать цифровой функции порта от вмешательства с функцией
Аналогового Компаратора.
INT2, Внешний Источник Прерывания 2: контакт PB2 может служить внешним источником прерывания к MCU.

• T1 – Port B, Bit 1
T1 счетный вход таймера-счетчика 1.

• T0/XCK – Port B, Bit 0


T0, Источник Счетчика Timer/Counter0.
XCK, Внешний таймер USART. Регистр Направления Данных (DDB0) управляет, выведены ли такты
( установленный DDB0) или введены (очищенный DDB0).
Контакт XCK является активным только, когда USART работает в Синхронном режиме.

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

12.3.3 Альтернативные функции для Port C

Порт C контакты с альтернативными функциями показывают в Таблице 12-9. Если интерфейс JTAG включен,
получение по запросу резисторы на контактах PC5 (TDI), PC3 (TMS) и PC2 (TCK) будут активированы, даже если
сброс произойдет.

Таблица 12-9.

Альтернативная конфигурация pin следующие:

• TOSC2 – Port C, Bit 7

TOSC2 2-ой вывод генератора таймера. После установки бита AS2 в регистре ASSR разрешается
работа асинхронного тактирования таймера-счетчика 2, а вывод PC7 отключается от порта и становится
инвертированным выходом усилителя генератора. В этом режиме кварцевый резонатор подключен к
выводу PC7, который теперь не может использоваться как линия ввода-вывода.

• TOSC1 – Port C, Bit 6

TOSC1, контакт Осциллятора Таймера 1: То, когда бит AS2 в ASSR установлен в 1, чтобы включить асинхронной
синхронизации Таймера / Счетчик 2, прикрепить PC6, разъединено от порта и становится вводом усилителя
Осциллятора инвертирования. В этом режиме Кристаллический Осциллятор соединен с этим контактом, и контакт
не может использоваться в качестве контакта ввода-вывода.

TOSC1 1-ый вывод генератора таймера. После установки бита AS2 в регистре ASSR разрешается
работа асинхронного тактирования таймера-счетчика 2, а вывод PC7 отключается от порта и становится
входом инвертирующего усилителя генератора. В этом режиме кварцевый резонатор подключен к выводу
PC7, который теперь не может использоваться как линия ввода-вывода.

• TDI – Port C, Bit 5

TDI Ввод данных при JTAG-тестировании. Последовательный ввод данных происходит в регистр
инструкций или регистр данных (сканируемые звенья). После разрешения работы JTAG-интерфейса
данный вывод не может использоваться в качестве линии ввода-вывода.

• TDO – Port C, Bit 4


TDO вывод данных при JTAG-тестировании. Последовательный вывод данных из регистра инструкции
или регистра данных. После разрешения работы JTAG-интерфейса данный вывод не может
использоваться в качестве линии ввода-вывода. Вывод TDO становится тристабильным, если введено
состояние TAP, при котором происходит сдвиг выводимых данных.

• TMS – Port C, Bit 3


TMS, JTAG Test Mode Select: This pin is used for navigating through the TAP-controller state machine. When the JTAG
interface is enabled, this pin can not be used as an I/O pin.

TMS Выбор режима JTAG тестирования. Данный вывод используется для управления цифровым
автоматом TAP-контроллера. После разрешения работы JTAG-интерфейса данный вывод не может
использоваться в качестве линии ввода-вывода.

• TCK – Port C, Bit 2

TCK синхронизация JTAG-тестирования. Работа интерфейса JTAG синхронизирована с TCK. После


разрешения работы JTAG-интерфейса данный вывод не может использоваться в качестве линии ввода-
вывода.

• SDA – Port C, Bit 1

SDA ввод-вывод данных двухпроводного последовательного интерфейса TWI. После установки бита
TWEN в регистре TWCR разрешается работа двухпроводного последовательного интерфейса, вывод
PC1 отключается от порта и становится линией ввода-вывода последовательных данных двухпроводного
последовательного интерфейса. В этом режиме на входе активизируется помехоподавляющий фильтр,
который не реагирует на входные импульсы длительностью менее 50 нс, а передача организована
драйвером с открытым стоком и ограниченной скоростью изменения сигнала. Когда этот контакт используется
Двухпроводным Последовательным Интерфейсом, получением по запросу может все еще управлять бит
PORTC1.

• SCL – Port C, Bit 0

SCL синхронизация двухпроводного последовательного интерфейса. Если установлен в 1 бит TWEN в


регистре TWCR, то разрешается работа двухпроводного последовательного интерфейса, вывод PС0
отключается от порта и становится входом/выходом синхронизации последовательной связи
двухпроводного последовательного интерфейса. В этом режиме на входе активизируется
помехоподавляющий фильтр, который не реагирует на входные импульсы длительностью менее 50 нс, а
передача организована драйвером с открытым стоком и ограниченной скоростью изменения сигнала.
Когда этот контакт используется Двухпроводным Последовательным Интерфейсом, получением по запросу
может все еще управлять бит PORTC0.

Таблица 12-10 и Таблица 12-11 связывают альтернативные функции Порта C к сигналам переопределения,
показанным в рисунке 12-5 на странице 54.

Таблица 12-10. Переопределение сигналов для альтернативных функций в PC7:PC4


Таблица 12-11. Переопределение сигналов для альтернативных функций в PC3:PC0 (1)

Примечание:
1. Когда включено, Двухпроводный Последовательный Интерфейс включает средствам управления скорости
просмотра на выходном PC0 контактов и PC1. Это не показан в числе. Кроме того, фильтры шипа соединены
между выводами AIO, показанными в порту фигурируйте и цифровая логика модуля TWI.

12.3.4 Альтернативные функции порта D


ыводы порта D с альтернативными функциями представлены в таблице 12-12.
Таблица 12-12 Альтернативные функции выводов порта D
• OC2 – Port D, Bit 7

OC2 выход компаратора таймера-счетчика 2. Для выполнения данной функции вывод PB7
конфигурируется как выход (DDD7 = 1). Вывод OC2 также выполняет функцию выхода, когда таймер
переводится в режим ШИМ.

• ICP1 – Port D, Bit 6


ICP1 – Input Capture Pin: The PD6 pin can act as an Input Capture pin for Timer/Counter1.
Таймер-счетчик содержит блок захвата, который запоминает состояние счетчика при возникновении
внешнего события, тем самым определяя время его возникновения. В качестве события/событий
выступает внешний сигнал, подключенный к выводу ICPn.

• OC1A – Port D, Bit 5


OC1A выход компаратора A таймера-счетчика 1. Для выполнения данной функции вывод PD5
настраивается как выход (DDD5 = 1). Вывод OC1A также выполняет функцию выхода, когда таймер
переведен в режим ШИМ.

• OC1B – Port D, Bit 4


OC1B выход компаратора B таймера-счетчика 1. Для выполнения данной функции вывод PD4
настраивается как выход (DDD4 = 1). Вывод OC1B также выполняет функцию выхода, когда таймер
переведен в режим ШИМ.

• INT1 – Port D, Bit 3


INT1 источник внешнего прерывания 1. Вывод PD3 может использоваться как источник внешнего
прерывания микроконтроллера.

• INT0 – Port D, Bit 2


INT0 источник внешнего прерывания 0. Вывод PD2 может использоваться как источник внешнего
прерывания микроконтроллера.

• TXD – Port D, Bit 1


TXD1 передача данных (вывод данных для УСАПП(USART)). Если работа передатчика УСАПП(USART)
разрешена, то данный вывод настраивается как выход независимо от значения DDD1.

• RXD – Port D, Bit 0

RXD прием данных (ввод данных для УСАПП(USART)). Если работа приемника УСАПП(USART) разрешена, то
данный вывод настраивается на ввод независимо от значения DDD0. После перевода УСАППом(USART) данного
вывода на вход, управление подтягивающим резистором осуществляется битом PORTD0.

Таблица 12-13 и Таблица 12-14 связывают альтернативные функции Порта D к сигналам переопределения,
показанным в иллюстрации 12-5 на странице 54.

Таблица 12-13. Сигналы Overiding для альтернативных функций PD7:PD4


Таблица 12-14. Переопределение сигналов для альтернативных функций в PD3:PD0

12.4 Описание регистра

12.4.1 Регистр специальных функций ввода-вывода SFIOR

Разряд 2 √ PUD: Отключение всех подтягивающих резисторов


Если в данный разряд записать лог. 1, то подтягивающие резисторы на всех портах будет отключены,
даже если регистры DDxn и PORTxn настроены на их подключение ({DDxn, PORTxn} = 0b01). См.
⌠ Конфигурирование выводов на стр 50 для детального изучения данной функции.
12.4.2 PORTA – Port A Регистр данных

12.4.3 DDRA – Port A Регистр направления данных

12.4.4 PINA – Port A Входной адрес контактов

12.4.5 PORTB – Port B Регистр данных

12.4.6 DDRB – Port B Регистр направления данных

12.4.7 PINB – Port B Входной адрес контактов

12.4.8 PORTC – Port C Регистр данных

12.4.9 DDRC – Port C Регистр направления данных


12.4.10 PINC – Port C Входной адрес контактов

12.4.11 PORTD – Port D Регистр данных

12.4.12 DDRD – Port D Регистр направления данных

12.4.13 PIND – Port D Входной адрес контактов

13. Внешние прерывания


Внешние Прерывания осуществляются через выводы INT0, INT1 и через выводы INT2.
Обратите внимание, что после разрешения внешние прерывания будут генерироваться, даже если линии INT0:2
настроены как выходы.

Данная особенность может использоваться для программной генерации прерывания.

Внешние прерывания могут генерироваться по подающему или нарастающему фронту, а также по низкому лог.
уровню. (INT2 является только инициируемым фронтом сигнала прерыванием).

Это установлено как обозначено в спецификации MCU Control Register – MCUCR и MCU Control и Status Register
– MCUCSR.

Если внешнее прерывание разрешено и настроено на срабатывание при низком уровне, то


прерывание будет инициироваться постоянно пока уровень (только INT0/INT1) на выводе будет оставаться
низким.

Обратите внимание, что для распознавания падающего или нарастающего фронтов на INT0 и INT1
необходимо наличие синхронизации ввода-вывода, описанной в разделе ⌠Источники синхронизации и их
распределение" на стр 24.

Прерывания по низкому уровню и фронтам на INT0/INT1 определяются асинхронно.

Это означает, что данные прерывания могут использоваться для пробуждения микроконтроллера из режимов
глубокого сна. Синхронизация ввода-вывода останавливается во всех режимах сна за исключением
режима холостого хода (Idle).
Обратите внимание, что при использовании прерывания по уровню для пробуждения микроконтроллера
из режима выключения (Power-down), только после удержания изменившегося уровня в течение
определенного времени генерируется прерывание.

Это делает микроконтроллер менее чувствительным к шумам.

Оценка изменения состояния уровня выполняется по двум его выборкам с интервалом равным периоду
сторожевого таймера, который равен 1 мкс(µs) (номинальное значение) при 5.0В и 25°C.

Частота сторожевого таймера зависит от напряжения (см. ⌠Электрические характеристики■). на странице 279.

Пробуждение микроконтроллера наступает, если на входе присутствует требуемый уровень в процессе выборок
или если он удерживается до окончания задержки при запуске синхронизации (возникает при выходе из режимов
сна). Время запуска определяется конфигурационными битами SUT (см. ⌠ Источники
синхронизации и их распределение ). на странице 24.

Если дважды выполнена выборка уровня с синхронизацией сторожевым таймером, но по истечении времени
запуска этот уровень исчез, то пробуждение микроконтроллера наступит, но прерывание не будет сгенерировано.
Для того чтобы активизировать прерывание по уровню необходимо, чтобы этот уровень удерживался в течение
достаточного для пробуждения микроконтроллера времени.

13.1 Описание регистра


13.1.1 MCUCR – регистр команд MCU(микроконтроллера)

Регистр команд MCU(микроконтроллера) содержит биты управления для управления смыслом прерывания и
общих функций MCU(микроконтроллера).

• Bit 3, 2 – ISC11, ISC10: Interrupt Sense Control 1 Bit 1 and Bit 0

Прерывание от внешнего устройства 1 активировано внешним контактом INT1 если SREG I-bit и соответствующая
маска прерываний в GICR установлены. Уровень и края на внешнем контакте INT1, которые активируют
прерывание, определены в Таблице 13-1. Значение на контакте INT1 выбрано прежде, чем обнаружить края.
Если прерывание края или переключателя выбрано, импульсы, которые длятся более длинные чем один такт,
генерируют прерывание. Короче импульсы, как гарантируют, не генерируют прерывание. Если низкоуровневое
прерывание выбрано, низкий уровень, как должно сохраниться, до завершения в настоящий момент
выполняющейся инструкции генерирует прерывание.

Таблица 13-1. Управление Смыслом прерывания 1

• Bit 1, 0 – ISC01, ISC00: Interrupt Sense Control 0 Bit 1 and Bit 0

Прерывание от внешнего устройства 0 активировано внешним контактом INT0, если I-флаг SREG и
соответствующая маска прерываний установлены. Уровень и края на внешнем контакте INT0, которые
активируют прерывание, определены в Таблице 13-2. Значение на контакте INT0 выбрано прежде, чем
обнаружить края. Если прерывание края или переключателя выбрано, импульсы, которые длятся более длинные,
чем один такт генерирует прерывание. Короче импульсы, как гарантируют, не генерируют прерывание. Если
низкоуровневое прерывание выбрано, низкий уровень, как должно сохраниться, до завершения в настоящий
момент выполняющейся инструкции генерирует прерывание.

Таблица 13-2. Управление Смыслом прерывания 0

13.1.2 MCUCSR – Регистр управления и состояния MCU

• Bit 6 – ISC2: Управление Смыслом прерывания 2

Асинхронное Прерывание от внешнего устройства 2 активировано внешним контактом INT2, если SREG I-bit и
соответствующая маска прерываний в GICR установлены. Если ISC2 записан, чтобы обнулить, убывающий фронт
на INT2 активирует прерывание. Если ISC2 записан одному, нарастающий фронт на INT2 активирует прерывание.
Края на INT2 зарегистрированы асинхронно. Импульсы на INT2 шире чем минимальная ширина импульса,
уступленная “Характеристики Прерываний от внешнего устройства” на странице 283, генерируют прерывание.
Короче импульсы, как гарантируют, не генерируют прерывание. Изменяя бит ISC2, прерывание может
встречаться. Поэтому, рекомендуется сначала отключить INT2, очищая его бит Разрешения прерывания в
Регистре GICR. Затем, бит ISC2 может быть изменен. Наконец, Флаг прерывания INT2 должен быть очищен при
записи логической единицы в ее бит Флага прерывания (INTF2) в Регистре GIFR прежде, чем прерывание будет
повторно включено.

13.1.3 GICR – общий управляющий регистр прерывания

• Bit 7 – INT1: Запрос Прерывания от внешнего устройства 1 Включение

Когда бит INT1 установлен в (один) и I-bit в регистр состояния (SREG) установлен в (один), то внешнее
прерывание контакта включено.
Смысл Прерывания Control1 биты 1/0 (ISC11 и ISC10) в MCU(микроконтроллере) Общий Управляющий регистр
(MCUCR) определяют Внешнее ли Прерывание на повышении(1) от внешнего устройства (и / или) активировано
убывающий(0) фронт контакта INT1 или уровень обнаружения.
Действие на контакте вызовет четный запрос на прерывание если INT1 сконфигурирован как вывод.
Соответствующее прерывание Запроса Прерывания от внешнего устройства 1 выполняется от вектора
прерывания INT1.

• Bit 6 – INT0: Запрос Прерывания от внешнего устройства 0 Включений

Когда бит INT0 установлен в (один) и I-bit в Регистре состояния (SREG) установлен в (один), внешнее прерывание
контакта включено.
Смысл Прерывания биты Control0 1/0 (ISC01 и ISC00) в MCU(микроконтроллере) Общий управляющий регистр
General Control Register (MCUCR) определите ли активирован на повышении(1) прерывание от внешнего
устройства (и / или) убывающий(0) фронт контакта INT0 или обнаружающий уровень.
Действие на контакте будет вызывать четный запрос на прерывание если INT0 сконфигурирован как вывод.
Соответствующее прерывание из Запроса Прерывания от внешнего устройства 0 выполняется от INT0 вектор
прерывания.

• Bit 5 – INT2: Запрос Прерывания от внешнего устройства 2 Включения


When the INT2 bit is set (one) and the I-bit in the Status Register (SREG) is set (one), the external pin interrupt is
enabled. The Interrupt Sense Control2 bit (ISC2) in the MCU Control and Status Register (MCUCSR) defines whether the
External Interrupt is activated on rising or falling edge of the INT2 pin. Activity on the pin will cause an interrupt request
even if INT2 is configured as an output. The corresponding interrupt of External Interrupt Request 2 is executed from the
INT2 Interrupt Vector.

Когда бит 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.

13.1.4 GIFR – Общий регистр флага прерывания

• Bit 7 – INTF1: Флаг Прерывания от внешнего устройства 1

Когда край или логическое изменение на контакте INT1 инициировали запрос на прерывание,, INTF1 становится
установленным в 1. Если I-bit в SREG и бит INT1 в GICR установлены в (один), MCU (микроконтроллера)
перейдет к соответствующему Вектору прерывания. Флаг очищен когда прерывание подпрограмма выполняется.
Либо, флаг может быть очищен при записи логической единицы в него. Этот флаг всегда очищенный, когда INT1
сконфигурирован на уровне прерывания.

• Bit 6 – INTF0: Флаг Прерывания от внешнего устройства 0

Когда край или логическое изменение на контакте INT0 инициировали запрос на прерывание, INTF0 становится
установленным в 1. Если I-bit в SREG и бит INT0 в GICR будут установлены (один), то MCU перейдет к
соответствующему вектору прерывания. Флаг очищен, когда подпрограмма прерывания выполняется. Либо, флаг
может быть очищен при записи логической единицы в него. Этот флаг всегда очищается, когда INT0
сконфигурирован как прерывание уровня. Когда край или логическое изменение на INT0 прикрепляют триггеры
запроса на прерывание, INTF0 становится установленным в 1. Если I-bit в SREG и бит INT0 в GICR установлены в
(один), MCU (микроконтроллер) перейдет к соответствующему вектору прерывания. Флаг очищен когда
подпрограмма прерывания выполняется. Либо, флаг может быть очищен при записи логической единицы в него.
Этот флаг всегда очищается когда INT0 сконфигурирован на уровне прерывания.

• Bit 5 – INTF2: Флаг Прерывания от внешнего устройства 2


Когда событие на контакте INT2 инициировало запрос на прерывание, INTF2 становится установленным в 1.
Если I-bit в SREG и бит INT2 в GICR будут установлены в (один), то MCU(микроконтроллер) перейдет к
соответствующему Вектору прерывания. Флаг очищен, когда подпрограмма прерывания выполняется. Либо, флаг
может быть очищен при записи логической единицы в него. Обратите внимание на то, что, вводя некоторые
режимы ожидания с отключенным прерыванием INT2, входной буфер на этом контакте будет отключен. Это
может вызвать логическое изменение во внутренних сигналах, которые установят Флаг INTF2. См. “Включение
цифрового входа и Режимы ожидания” на странице 53 для получения дополнительной информации.

14. 8-bit Таймер / Счетчик0 с PWM(ШИМ)


14.1 Функции
• Один блок захвата
• Режим сброса таймера при совпадении с порогом сравнения (автоматическая перезагрузка)
• Широтно-импульсная модуляция без генерации ложных импульсов при записи нового порога
сравнения
• Генератор частоты
• Счетчик внешнего события
• 10-разрядный Делитель частоты Тактирования
• Переполнение и сравнение источников прерывания соответствия (TOV0 и OCF0)

14.2 Общий обзор

Таймер / Счетчик 0 общая цель, единственный сравнивают модуль, 8-разрядный Таймер / Счетчик модуль.
Упрощенный блок схема 8-разрядного Таймер / Счетчик показана в рисунке 14-1.
Для фактического размещения из контактов ввода-вывода, обратитесь к “Pinout ATmega16A” на странице 3.
Регистры ввода-вывода, а также биты или линии ввода-вывода, к которым организован доступ от ЦПУ, выделены
жирной линией.
Специфичный для устройства Регистр ввода-вывода и местоположения бита перечислены в “Описании
Регистра” на странице 79.

Рисунок 14-1. 8-разрядная Блок-схема Таймера/Счетчика


14.2.1 Регистры

Таймер / Счетчик (TCNT0) и выходной сравнивающий регистр (OCR0) 8-разрядные регистры.


Запрос на прерывание (сокращенный до Интервала. Req. в числе) сигналы все видимы в Timer Interrupt Flag
Register (TIFR). Все прерывания индивидуально замаскированы с Регистром Маски Прерывания по таймеру
(TIMSK). TIFR и TIMSK не показывают в числе, так как эти регистры совместно использованы другими модулями
таймера. Таймер / Счетчик может быть синхронизирован внутренне, через делитель частоты, или по источнику
внешнего таймера на контакте T0. Средства управления логическим блоком Выбора Тактирования которые
синхронизируют источник и край Таймер / Счетчика использование, чтобы постепенно инкементить (или
декрементить) его значение.

Таймер / Счетчик неактивен, когда никакой источник тактирования не выбран.


Вывод от логики Выбора Тактирования упоминается как тактирование таймера (clkT0). Двойной буферизованный
Вывод Сравнивает Регистр (OCR0) по сравнению с Значение таймера/Счетчика все время.
Результат сравнивания может использоваться генератором формы волны, чтобы генерировать PWM (ШИМ)
или вывод переменной частоты на Выводе Сравнивает Контакт (OC0).
См., "что Вывод Сравнивает Модуль” на странице 71. для деталей. Сравнить событие соответствия также
установит флаг сравнения (OCF0) который может использоваться, чтобы генерировать вывод сравнения запроса
на прерывание.

14.2.2 Определения

Многие регистры, и разряды в этом документе записаны в общей форме. Нижний регистр “n” заменяет Число
таймера/Счетчика, в этом случае 0. Однако, при использовании регистра или бита определяет в программе,
точная форма должна использоваться то есть, TCNT0 для того, чтобы получить доступ к значению счетчика
Timer/Counter0 и так далее.

Определения в Таблице 14-1 также используются экстенсивно всюду по документу.


Table 14-1. Определения

BOTTOM (нижний предел) Счетчик достигает НИЖНЕЙ ЧАСТИ, когда становится


0x00.
MAX (максимальное значение) Счетчик достигает своего Максимума, когда становится
0xFF (десятичные 255).
TOP (верхний предел) Счетчик достигает TOP, когда это становится равным
самому высокому значению в последовательности
количества. Значение TOP может быть присвоено быть
фиксированным значением 0xFF (МАКСИМАЛЬНЫЙ)
или значение, сохраненное в Регистре OCR0.
Присвоение зависит от режима работы.

14.3 Таймер / Счетчик Источники Тактирования


Таймер / Счетчик может быть синхронизирован внутренним или внешним источником таймера. Источник
тактирования выбран логикой выбора тактирования, которой управляет выбор тактирования (CS02:0) биты,
расположенные в Регистре команд Таймера/Счетчика (TCCR0). Для получения дополнительной информации на
источниках тактирования и делителе частоты, см. “Timer/Counter0 и Делители частоты Timer/Counter1” на
странице 83.

14.4 Встречный Модуль


Основная часть 8-разрядного Таймера/Счетчика является программируемым модулем реверсивного счетчика.
Рисунок 14-2 показывает блок-схему счетчика и его среды.

Рисунок 14-2. Встречная Блок-схема Модуля

Сигнальное описание (внутренние сигналы):


Count(количество) - Инкремент или декрементный TCNT0 на 1.
direction(направление) - Задает прямой счет (инкрементирование) или обратный счет (декрементирование).
clear(очистить)- Сброс TCNT0 (установка всех разрядов к лог. 0).

clkTn Синхронизация таймера-счетчика.


TOP Сигнализирует о достижении TCNT0 максимального значения.
BOTTOM Сигнализирует о достижении TCNT0 минимального значения (нуля).

Завися используемого режима работы, счетчик очищен, инкрементный, или постепенно декрементный в каждых
тактах таймера (clkT0). clkT0 может быть сгенерирован от внешнего или внутренний источник тактирования,
выбранный битами Выбора Тактирования (CS02:0). Когда никакой источник тактирования не выбран (CS02:0 = 0)
таймер остановлен.
Однако, к значению TCNT0 может получить доступ ЦП, независимо от присутствия или нет clkT0.
Запись ЦП переопределяет (имеет приоритет), весь четкий счетчиков или операций количества.
Последовательность подсчета определен установкой WGM01 и расположенных битов WGM00 в
Таймере/Счетчике Регистр команд (TCCR0).
Есть близкие соединения между как счетчик ведет себя (рассчитывает) и как формы волны сгенерированы на
выводе сравниваются вывод OC0.

Для получения дополнительной информации об усовершенствованных последовательностях подсчета и


генерации формы волны, см. "Режимы работы" на странице 73.Переполнение Таймера/Счетчика (TOV0)
Флаг установлен соответственно к режиму работы, выбранному битами WGM01:0.
TOV0 может использоваться для того, чтобы генерировать прерывания ЦП.

14.5 Вывод сравнивает модуль

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.).

Figure 14-3 shows a block diagram of the output compare unit.


Figure 14-3. Output Compare Unit, Block Diagram

8-разрядный компаратор непрерывно сравнивает TCNT0 с Output Compare Register (OCR0).


Всякий раз, когда TCNT0 равняется OCR0, компаратор сигнализирует соответствие.
Соответствие установит Output Compare Flag (OCF0) в следующем цикле таймера.
Если включено (OCIE0 = 1 и Global Interrupt Flag в SREG установлен), генерируемый вывод сравнит флаг
прерывания. Флаг OCF0 автоматически очищается, когда прерывание выполняется.
Альтернативно, Флаг OCF0 может быть очищен программно при записи логической единицы в ее
местоположение бита ввода-вывода.

Генератор формы волны использует сигнал соответствия генерировать вывод согласно рабочему режиму,
установленному битами WGM01:0 и режим (Сравнения вывода) Compare Output (COM01:0) бит.
Максимальные сигналы и нижние сигналы используются генератором формы волны для того, чтобы обработать
особые случаи экстремумов в некоторых режимах работы (См. "Режимы работы" на странице 73.). Рисунок 14-3
показывает, что блок-схема модуля вывода сравнивнения.

Рисунок 14-3.
Модуль сравнивает выводы, блок-схема
Регистр OCR0 двойной буферизованный при использовании любой Широтно Импульсной Модуляции
(PWM/ШИМ) режим. Для нормального и (Clear Timer на Compare (CTC))/(Очищенного Таймера на Сравнении
(CTC)) режима из работы, двойная буферизация отключена.
Двойная буферизация синхронизирует, обновление OCR0 Compare Register к вершине или к нижней части
последовательного подсчета.

Синхронизация предотвращает возникновение асимметричных импульсов PWM(ШИМ) нечетных длиной, таким


образом делая вывод без незначительного сбоя.
Доступ Регистра OCR0 может казаться сложным, но это не случай. Когда двойная буферизация включена, у ЦП
есть доступ к (Буферному Регистру )Buffer Register OCR0, и если двойная буферизация будет отключена, то ЦП
получит доступ к OCR0 непосредственно.

14.5.1 Принудительная установка результата сравнения

В режимах генерации импульсов без ШИМ в формирователе импульсов результат сравнения может быть
установлен непосредственно через бит принудительной установки результата сравнения FOC0.
Принудительная установка результата сравнения компаратора не приводит к установке флага OCF0 или
сбросу/перезагрузке таймера, но влияет на состояние вывода OC0, который будет устанавливаться,
сбрасываться или переключаться (инвертироваться) в зависимости от выбранной установки
(настройки битов COM01:0 определяют, установлен ли контакт OC0, очищен или переключен).

14.5.2 Результат сравнения блокируется записью в TCNT0


Если ЦПУ осуществляет запись в регистр TCNT0, то результат сравнения будет игнорироваться на
следующем такте синхронизации таймера, даже если таймер остановлен. Данная функция позволяет
установить в регистре OCR0 то же значение, что и в TCNT0 без генерации запроса на прерывание, если
разрешено тактирование таймера-счетчика.

14.5.3 Использование блока сравнения

Поскольку запись в TCNT0 блокирует любые действия по результату сравнения на один такт синхронизации
таймера независимо от режима работы, то при изменении TCNT0 при использовании канала сравнения
(независимо работает синхронизация таймера или нет) необходимо учесть следующие особенности.
Если в регистр TCNT0 записано значение равное OCR0, то игнорирование совпадения приведет к генерации
некорректной формы сигнала.
По аналогии следует избегать записи в TCNT0 значения равного нижнему пределу (0x00), если счетчик работает
как вычитающий.
Установка OC0 должна быть выполнена перед настройкой линии ввода-вывода на вывод в регистре направления
данных.
Самый легкий путь установки значения OC0 - использование бита принудительной установки результата
сравнения (FOC0) в нормальном режиме.
Регистр OC0 сохраняет его значение, даже если происходит изменение режима работы таймера.
Учтите, что биты COM01, COM00 не содержат схемы двойной буферизации и на любые изменения реагируют
мгновенно.

14.6 Блок формирования выходного сигнала

Биты задания режима формирования выходного сигнала (COM01:0) имеют двойное назначение.
С одной стороны биты COM01 используются формирователем сигнала и определяют какое логическое
состояние должно быть на выходе OC0 при возникновении следующего совпадения.
Кроме того, биты COM01:0 управляют выходным источником контакта OC0. Рисунок 14-4 показывает упрощенную
схематическую из логики, на которую влияет разрядная установка COM01:0. Регистры ввода-вывода, биты ввода-
вывода и контакты ввода-вывода в на рисунке показывают полужирным. Только части общих Регистров команд
порта ввода-вывода (DDR и PORT), на которые влияют биты COM01:0, показывают. Обращаясь к состоянию OC0,
ссылка для внутреннего Регистра OC0, не контакта OC0. Если Системный Сброс происходит, Регистр OC0
сброшен к “0”.

Figure 14-4. Блок формирования выходного сигнала, схема.


Общая функция порта ввода-вывода переопределена Output Compare (OC0) от Генератора Формы волны, если
любой из битов COM01:0 установлен. Однако, направлением контакта OC0 (ввод или вывод) все еще управляют
по условию Data Direction Register (DDR) для контакта порта. Бит Data Direction Register для контакта OC0
(DDR_OC0) должен быть установлен как выведено прежде, чем значение OC0 видимо на контакте. Функция
переопределения порта независима от режима Генерации Формы волны.
Проект вывода сравнивается, логика контакта позволяет инициализацию состояния OC0 прежде, чем вывод
будет включен.
Обратите внимание на то, что некоторые разрядные настройки COM01:0 зарезервированы для определенных
режимов работы. См. “Описание Регистра” на странице 79.

14.6.1 Сравнение Режима вывода и Формы Генерации волны.

Генератор Формы волны использует биты COM01:0 по-другому в нормальном, CTC и режимах PWM(ШИМ). Для
всех режимов, устанавливая COM01:0 = 0 говорит генератору формы волны, что никакое действие на Регистре
OC0 не должно быть выполнено на следующем, сравнивают соответствие. Для сравниваются, выходные
действия в не ШИМ режимах см. Таблицу 14-3 на странице 80. Для быстрого режима PWM(ШИМ) обратитесь к
Таблице 14-4 на странице 80, и для корректного PWM фазы обращаются к Таблице 14-5 на странице 81.
Изменение состояния битов COM01:0 будет иметь эффект в первом, сравнивают соответствие после того, как
биты записаны. Для не ШИМ режимов действие может быть вынуждено иметь непосредственный эффект при
использовании битов строба FOC0.

14.7 Режимы работы

Режим работы, то есть, поведение Таймера/Счетчика и Вывода Сравнивает контакты, определённую комбинацию
режима Генерации Формы волны (WGM01:0), и Режим Сравнения вывода (COM01:0) бит.
Сравнить биты Режима вывода не влияют на последовательность подсчета, в то время как режимы бита
Генерации Формы волны делают.
Биты COM01:0 управления, должны ли сгенерированный вывод PWM(ШИМ) быть инвертирован или не
(инвертированный или не инвертированный PWM(ШИМ)). Для не-ШИМ режимов управление битами COM01:0,
должен ли вывод быть установлен, очищен или переключится в сравнение соответствия (См., "Сравнивают
Выходной Модуль Соответствия” на странице 72.).
Для подробной синхронизации информация обращаются к рисунку 14-8, рисунку 14-9, рисунку 14-10 и рисунку 14-
11 в “Схемах Синхронизации Таймера/Счетчика” на странице 77.

14.7.1 Нормальный Режим


Самый простой режим работы является нормальным режимом (WGM01:0 = 0).
В этом режиме всегда (постепенно увеличивается) направление подсчета, и никакой четкий счетчик не
выполняется.
Счетчик просто переполняется, когда он передает свое максимальное 8-разрядное значение (TOP = 0xFF) и
затем перезапускает от нижней части (0x00).
В нормальном функционировании Флаг Переполнения Таймера/Счетчика (TOV0) будет установлен за тот же
самый такт таймера, как TCNT0 становится нулем.
Флаг TOV0 в этом случае ведет себя как девятый бит, за исключением того, что он только установлен, не очищен.
Однако, объединенный с таймером переполняют прерывания, которое автоматически очищает Флаг TOV0,
разрешение таймера может быть увеличено программным обеспечением.
Нет никаких особых случаев, чтобы рассмотреть в нормальном режиме, новое встречное значение может быть
записано в любое время.
Вывод сравнивается, модуль может использоваться, чтобы генерировать прерывания в некоторое данное время.
Используя вывод сравниваются, чтобы генерировать формы волны в Нормальном режиме, не рекомендуется, так
как это займет слишком много процессорного времени.

14.7.2 Режим сброса таймера при совпадении (СТС)

В режиме СТС (WGM01 = 0b10) регистр OCR0 используется для задания разрешающей способности счетчика.
Если задан режим CTC и значение счетчика (TCNT0) совпадает со значением регистра OCR0, то счетчик
обнуляется (TCNT0=0). Таким образом, OCR0 задает вершину счета счетчика, а, следовательно, и его
разрешающую способность. В данном режиме обеспечивается более широкий диапазон регулировки частоты
генерируемых прямоугольных импульсов. Он также упрощает работу счетчика внешних событий.

Схему синхронизации для режима CTC показывают в рисунке 14-5.


Встречное значение (TCNT0), увеличения до сравнить соответствия происходят между TCNT0 и OCR0, и затем
противостоят (TCNT0), очищено.

Рисунок 14-5. Режим CTC, временная диаграмма

По достижении верхнего предела счета может генерироваться прерывание с помощью флагов OCF0,
соответствующим используемым регистрам для задания верхнего предела счета.
Если прерывание разрешено, то процедура обработки прерывания может использоваться для обновления
верхнего предела счета.
Однако, задание значения вершины счета близкого к значению нижнего предела счета, когда счетчик работает
без предделения или с малым значением предделения, необходимо выполнять с особой осторожностью, т.к. в
режиме СТС нет двойной буферизации.
Если значение, записанное в OCR0, меньше текущего значения TCNT0, то счетчика будет пропускать
сравниваемое значение.
Счетчик должен будет затем рассчитать к его максимальному значению (0xFF) и перенести запуск в 0x00 прежде,
чем сравнение соответствия сможет встретится.

Для того, чтобы генерировать вывод волны в режиме CTC, вывод OC0 может быть установлен, чтобы
переключить его логический уровень на каждом сравнении соответствия, устанавливая Режима Compare Output
бита, чтобы переключить режим (COM01:0 = 1).
Значение OC0 не будет видимо на контакте порта, если направление данных для контакта не будет установлено
на выходной.
У сгенерированной волны будет максимальная частота
, когда OCR0 будет установлен на нуль (0x00).
Частота волны определена следующим уравнением:

где переменная N задает коэффициент деления предделителя (1, 8, 64, 256, или 1024).
Также как и для нормального режима работы, флаг TOV0 устанавливается на том же такте таймера,
когда его значение изменяется с 0xFF на 0x00.

14.7.3 Быстрый режим ШИМ

Режим быстрой широтно-импульсной модуляции (ШИМ) (WGM0:1 = 0b11) предназначен для генерации ШИМ-
импульсов повышенной частоты. В отличие от других режимов работы в этом используется однонаправленная
работа счетчика. Счет выполняется в направлении от нижнего к верхнему пределу счета.

Быстрая Импульсная Модуляция Ширины или быстрый режим PWM(ШИМ) (WGM01:0 = 0b11) предоставляют
высокочастотную возможность генерации формы волны PWM.

Быстрый (ШИМ)PWM отличается от другой опции (ШИМ)PWM ее одно-направленной работой.


Счет напрвлен от НИЖНЕГО ПРЕДЕЛА до МАКСИМАЛЬНОГО ПРЕДЕЛА тогда перезапускают от НИЖНЕГО
ПРЕДЕЛА.
В неинвертировании Сравнивают Режим вывода, Вывод Сравниваются (OC0) очищен на сравнить соответствии
между TCNT0 и OCR0, и установлен В НИЖНЕМ ПРЕДЕЛЕ.

В инвертировании Сравнивают Режим вывода, вывод установлен на, сравнение соответствия и очищенный В
НИЖНЕМ ПРЕДЕЛЕ.

Из-за одно-направленной работы, операционная частоты быстрого режима 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)) предназначен для генерации ШИМ сигнала с
фазовой коррекцией и высокой разрешающей способностью.

Режим ШИМ ФК основан на двунаправленной работе таймера-счетчика.


Счетчик циклически выполняет счет в направлении от нижнего предела (0x00) до верхнего предела, а
затем обратно от верхнего предела к нижнему пределу.

Если задан неинвертирующий режим выхода формирователя импульсов, то выход OC0


сбрасывается/устанавливается при совпадении значений TCNTn и OCRnx во время прямого/обратного счета.
Если задан инвертирующий режим выхода, то, наоборот, во время прямого счета происходит установка, а во
время обратного сброс выхода OC0.

При двунаправленной работе максимальная частота ШИМ-сигнала меньше, чем при однонаправленной
работе, однако, за счет такой особенности, как симметричность в режимах ШИМ с двунаправленной
работой, данные режимы предпочитают использовать при решении задач управления приводами.

Разрешение PWM для корректного режима фазы PWM фиксировано к восьми битам.
В корректном режиме фазы PWM(ШИМ) счетчик постепенно увеличен до встречных максимальных соответствий
значения.
Когда счетчик достигает МАКСИМУМА, он изменяет направление количества.
Значение TCNT0 будет равно МАКСИМАЛЬНОМУ для одного такта таймера.
Схему синхронизации для корректного режима фазы PWM показывают на рисунке 14-7.
Значение TCNT0 находится в схеме синхронизации, показанной как гистограмма для того, чтобы иллюстрировать
двойную наклонную работу.
Схема включает неинвертированные и инвертированные выводы PWM.
Маленькие горизонтальные метки строки на наклонах TCNT0 представляют, сравнивают соответствия между
OCR0 и TCNT0.

Маленькие горизонтальные метки строки на наклонах TCNT0 представляют, сравнивают соответствия между
OCR0 и TCNT0.

Рисунок 14-7. Фаза исправляет режим PWM(ШИМ), схему синхронизации


Флаг переполнения таймера-счетчика (TOVn) устанавливается всякий раз, когда счетчик достигает
нижнего предела. Флаг прерывания может использоваться, чтобы генерировать прерывание каждый раз, когда
счетчик достигает Минимального значения.
В корректном режиме фазы PWM(ШИМ) сравнить модуль позволяет генерацию форм волны PWM на контакте
OC0.
Установка битов COM01:0 =0b10 или (2) то выход ШИМ будет без инверсии.
с инверсией вывод PWM(ШИМ) может быть сгенерирован, устанавливая COM01:0 0b11 или (3) (см. Таблицу 14-5
на странице 81).
Фактическое значение OC0 только будет видимо на контакте порта, если направление данных для контакта порта
будет установлено как выведено.
Форма волны PWM(ШИМ) сгенерирована, очищая (или устанавка) Регистр OC0 в сравнить соответствии между
OCR0 и TCNT0, когда счетчик постепенно увеличивается, устанавливающий (или очищающий), Регистр OC0 в
сравнивает соответствие между OCR0 и TCNT0, когда счетчик постепенно уменьшается.
Частота PWM(ШИМ) для вывода при использовании корректного PWM(ШИМ) фазы может быть вычислена
следующим уравнением:

где N коэффициент деления предделителя (1, 8, 32, 64, 128, 256 или 1024).
Запись предельных значений в регистр OCR0 связано с особыми случаями в генерации ШИМ-сигналов
в режиме ШИМ с фазовой коррекцией. Если задать режим ШИМ без инверсии и OCR0 установить равным
нижнему пределу, то на выходе непрерывно будет установлен лог. 0, а если равным верхнему пределу, то на
выходе постоянно присутствует лог. 1. Для ШИМ с инверсией указанные уровни необходимо заменить
противоположными.
В очень запускаются Периода 2 в рисунке 14-7, от которого у OCn есть переход высоко до низкого даже при том,
что есть, не Сравнивают Соответствие. Точка этого перехода должна гарантировать симметрию вокруг НИЖНЕЙ
ЧАСТИ.
Есть два случая, которые дают переходу вне всякого сравнения Соответствие:

OCR0A изменяет свое значение на MAX, как в рисунке 14-7.


Когда значение OCR0A - MAX, значение контакта OCn является тем же самым, поскольку результат вниз
рассчитывающего Сравнивает Соответствие.
Чтобы Гарантировать симметрия вокруг НИЖНЕЙ ЧАСТИ значение OCn в МАКСИМАЛЬНОМ должно,
соответствовать результату из рассчитывающего Сравнения соответствия.

Таймер начинает рассчитывать от значения выше чем то в OCR0A, и по этой причине пропускает Сравнение
Соответствия и следовательно изменение OCn, которое произошло бы на пути.

14.8 Схемы Синхронизации таймера/Счетчика

Таймер/Счетчик является синхронным проектом, и тактирование таймера (clkT0) поэтому показывают как
включение тактирования сигнал в следующих числах. Числа включают информацию о том, когда Флаги
прерывания установлены.
Рисунок 14-8 содержит данные синхронизации для основной работы Таймера/Счетчика. Данные показывают
последовательность количества близко к МАКСИМАЛЬНОМУ
значение во всех режимах кроме фазы исправляет режим (ШИМ)PWM.

Рисунок 14-8. Схема Синхронизации таймера/Счетчика, Временная диаграмма не масштабированная

Рисунок 14-9. Схема Синхронизации таймера/Счетчика, с Делителем частоты (fclk_I/O/8)

Рисунок 14-10 показывает установку OCF0 во всех режимах кроме режима CTC.
Рисунок 14-10. Схема Синхронизации таймера/Счетчика, Установка OCF0, с Делителем частоты (fclk_I/O/8)
Рисунок 14-11 показывает установку OCF0 и очистку от TCNT0 в режиме CTC
Рисунок 14-11. Схема синхронизации таймера/счетчика, очистите таймер на, режим сравнения
соответствия, с делителем частоты (fclk_I/O/8)

14.9 Описание регистра


14.9.1 TCCR0 – Регистр команд Таймера/Счетчика

• Bit 7 – FOC0: Вывод принудительного сравнения


Бит FOC0 является только активным, когда бит WGM00 определяет не ШИМ режим. Однако, для того, чтобы
гарантировать совместимость будущими устройствами, этот бит должен быть установлен в 0, когда TCCR0
записан, работая в ШИМ режиме.
При записи логической 1 в бит FOC0 непосредственное сравнивается, соответствие вызвано на модуле
Генерации Формы волны.
Вывод OC0 изменен согласно его установке битов COM01:0.
Обратите внимание на то, что бит FOC0 реализован как строб. Поэтому это - значение, существующее в битах
COM01:0, который решает, что эффект принудительного сравнивается.
Строб FOC0 не будет генерировать прерывания, и при этом это не очистит таймер в режиме CTC, используя
OCR0 в качестве верхнего значения.
Бит FOC0 всегда читается как 0.

• Bit 3, 6 – WGM0[1:0]: Режим генерации формы волны


Эти биты управляют последовательностью подсчета счетчика, источника для максимума (Верхнее значение)
встречное значение, и какой Генерация Формы волны, которая будет использоваться. Режимы работы,
поддерживаемые модулем Таймера/Счетчика:
Нормальный режим,
Очистить Таймер на режим соответствия сравнения (CTC)
и два типа Импульсной Модуляции Ширины (ШИМ) режимы.
См. Таблицу 14-2 и "Режимы работы" на странице 73.

Таблица 14-2. Описание бита режима генерации формы волны (1)

Примечание:
1. CTC0 и ШИМ0 разрядные имена определения являются теперь устаревшими. Используйте определения
WGM01:0. Однако, функциональность и расположение этих битов являются совместимыми с предыдущими
версиями таймера.

• Bit 5:4 – COM01:0: режим сравнения вывода соответствия.


Эти биты управляют выводом сравнания контакта (OC0) поведения. Если один или оба из битов COM01:0
установлены, вывод OC0 переопределяет нормальную функциональность порта контакта ввода-вывода, с
которым оно соединено.
Однако, обратите внимание на то, что соответствие бита Data Direction Register (DDR) контакту OC0 должно быть
приведено в порядок, чтобы включить выходному драйверу. Когда OC0 соединен с контактом, функция битов
COM01:0 зависит от разрядной установки WGM01:0. Таблица 14-3 показывает разрядную функциональность
COM01:0, когда биты WGM01:0 установлены в нормальный или режим CTC (не ШИМ).

Таблица 14-3. Режимы сравнения выводов, не ШИМ режимы.

Таблица 14-4 показывает разрядную функциональность COM01:0, когда биты WGM01:0 установлены в быстрый
режим ШИМ.

Таблица 14-4. Режимы сравнения выводов, Быстрый Режим ШИМ(1)


Примечание:
1.
Особый случай происходит, когда OCR0 равняется верхнему значению, и COM01 установлен. В этом случае
соответствие сравнения игнорируется, но установка или очистка сделается в верхнем значении. См. “Быстрый
Режим ШИМ” на странице 75 для получения дополнительной информации.
Таблица 14-5 показывает разрядную функциональность COM01:0, когда биты WGM01:0 установлены поэтапно
осуществить корректный режим ШИМ.

Таблица 14-5.
Сравните режим вывода, фаза исправляют режим ШИМ (1)

Примечание:
1. Особый случай происходит, когда OCR0 равняется верхнему значению, и COM01 установлен. В этом случае
сравнение соответствия проигнорировано, но набор или четкий сделан в верхнее значение. См., "что Фаза
Исправляет Режим ШИМ” на странице 76 для получения дополнительной информации.
• Бит 2:0 – CS02:0: Выбор Тактирования

Три бита Выбора Тактирования выбирают источник тактирования, который будет использоваться
Таймером/Счетчиком.
Таблица 14-6. Выбор тактирования Разрядное Описание
Если внешние режимы контакта будут использоваться для Таймера / Счетчик 0, то переходы на контакте T0
синхронизируют счетчик, даже если контакт будет сконфигурирован как вывод. Эта функция позволяет
управление программным обеспечением подсчета.

14.9.2 TCNT0 – Регистр Таймер / Счетчика

Регистр Таймер / Счетчика предоставляет прямой доступ, и для операций чтения и для операций записи, к
Таймер/ Счетчику модуль 8-разрядный счетчик. Запись в блоки Регистра TCNT0 (удаляет) сравнить соответствие
на следующих тактах таймера.
Изменение счетчика (TCNT0), в то время как счетчик работает, представляет риск без вести пропавших сравнить
соответствия между TCNT0 и Регистром OCR0.

14.9.3
OCR0 – Регистр вывода сравнения

Регистр вывода сравнения содержит 8-разрядное значение, которое является непрерывым по сравнению со
встречным значением (TCNT0).
Соответствие может использоваться, чтобы генерировать вывод, сравнивнение прерываний, или генерировать
вывод формы сигнала на контакте OC0.

• Bit 1 – OCIE0: Таймер / Счетчик0 выводов сравнения соответствия разрешение прерывания


Когда бит OCIE0 записан в 1, и I-bit в Status Register установлен в (1), Таймер / Счетчик0 сравнивает
соответствия, прерывание включено. Соответствующее прерывание выполняется, если сравнить соответствие в
Таймере / Счетчик0 происходит, то есть, когда бит OCF0 установлен в Таймер/Счетчике Регистр Флага
прерывания – TIFR.

• Bit 0 – TOIE0: Таймер/Счетчик0 переполнения прерываний Включение


Когда бит TOIE0 записан в 1, и I-bit в Status Register установлен в (1), Таймер/Счетчик0 прерываний
Переполнения включены. Соответствующее прерывание выполняется, если переполнение в Таймер/Счетчик0
происходит, то есть, когда бит TOV0 установлен в Таймере/Счетчика Регистра флага прерывания – TIFR.

14.9.5
TIFR qP Таймер / Счетчик Регистр флага прерывания

• Bit 1 – OCF0: Вывод Сравнивает Флаг 0


Бит OCF0 установлен в 1 когда сравнение соответствия происходит между Таймер/Счетчиком0 и данные в OCR0
– Вывод сравнит Регистр0.
OCF0 очищен аппаратными средствами, выполняя соответствующий вектор обработки прерываний.
Альтернативно, OCF0 будет очищен при записи логической 1 во флаг.
Когда I-bit в SREG, OCIE0 (Таймер/Счетчик0 Сравнивает Соответствия прерывания включен) и OCF0
установлены в 1, Таймер/Счетчик0 Сравнивоемое Соответствия Прерывание выполнится.

• Bit 0 – TOV0: Таймер/Счетчик0


Флаг переполнения Разрядный TOV0 установлен в 1 когда переполнение происходит в Таймер/Счетчике0.
TOV0 очищен аппаратными средствами, когда выполнится соответствующее прерывания обработки вектора.
Альтернативно, TOV0 очищен при записи логической 1 во флаг.
Когда SREG I-bit, TOIE0 (в Таймер/Счетчик0 Переполнение Прерывание Включено), и TOV0 установлен в 1,
Таймер/Счетчик0 переполнение прерывание выполняется.
В фазе исправляют режим ШИМ, этот бит установлен когда Таймер/Счетчик0 подсчитает изменения направления
в 00$.

15. Таймер/Счетчик0 и Таймер/Счетчик1 Делители частоты


15.1 Краткий обзор

Таймер/Счетчик1 и Таймер/Счетчик0 совместно используют тот же самый модуль делителя частоты, но у


Таймер/Счетчиков могут быть различные настройки делителя частоты. Описание ниже применяется к и
Таймер/Счетчик1 и Таймер/Счетчик0.

15.2. Внутренний источник тактирования

Таймер/Счетчик может быть синхронизирован непосредственно системным тактированием


(устанавливая CSn2:0 = 1).
Это обеспечивает самую быструю работу с максимальной частотой тактирования Таймера/Счетчика, равной
системной частоте тактированию (fCLK_I/O).
Альтернативно, одно из четырех касаний от делителя частоты может использоваться в качестве источника
тактирования.
У предварительно масштабируемого тактирования есть частота или fCLK_I/O/8, fCLK_I/O/64, fCLK_I/O/256, или
fCLK_I/O/1024.

15.3 Сброс делителя частоты

Делитель частоты является свободным ходом, то есть, работает независимо от логики выбора тактирования
Таймера/Счетчика, и это совместно использованный Таймер/Счетчик1 и Таймер/Счетчик0.
Так как на делитель частоты не влияет выбор тактирования Таймера/Счетчика, у состояния делителя частоты
будут импликации для ситуаций, где предварительно масштабируемые такты используются.
Один пример предварительно масштабирующихся артефактов происходит, когда таймер включен и
синхронизирован делителем частоты (6> CSn2:0> 1).
Число системных тактов от того, когда таймер включен к первому количеству, происходит, может быть от 1 до
системных тактов N+1, где N равняется делителю делителя частоты (8, 64, 256, или 1024).
Возможно использовать Сброс Делителя частоты для того, чтобы синхронизировать Таймер/Счетчик к
выполнению программы.
Однако, забота должна быть проявлена, если другой Таймер/Счетчик, который совместно использует тот же
самый делитель частоты также, использует предварительное масштабирование.
Сброс делителя частоты будет влиять на период делителя частоты для всех Таймер/Счетчиков, с которым оно
соединено.

15.4 Источник внешнего таймера

Источник внешнего таймера применялся к контакту T1/T0, может использоваться в качестве тактирования
Таймера/Счетчика (clkT1/clkT0).
Контакт T1/T0 выбран однажды каждый системный такт логикой синхронизации контакта.
Синхронизируемый (выбранный) сигнал тогда передают через граничный детектор.
Рисунок 15-1 показывает блок-схему функционального эквивалента синхронизации T1/T0 и граничной логики
детектора.
Регистры синхронизированы в положительном краю внутренних системных тактов (clkI/O).
Фиксатор прозрачен в высокий период внутренних системных тактов.
Граничный детектор генерирует один clkT1/clkT0 импульс для каждого положительного (CSn2:0 = 7) или
отрицательный (CSn2:0 = 6) край, который это обнаруживает.

Иллюстрация 15-1. T1/T0 Выборка контакта

Логика детектора синхронизации и края представляет задержку 2.5 к 3.5 системным тактам от края, был применен
к контакту T1/T0 к счетчику, обновлен.
Включение и отключение ввода тактов должны быть сделаны, когда T1/T0 был устойчив по крайней мере для
одного системного такта, иначе это - риск, что сгенерирован ложный импульс такта Таймера/Счетчика.

Каждая половина периода примененного внешнего таймера должна быть более длинной чем один системный
такт, чтобы гарантировать корректную выборку.
У внешнего таймера, как должны гарантировать, будет меньше чем половина системной частоты такта
(fExtClk <fclk_I/O/2) данный 50/50 рабочий цикл %.
Так как граничный детектор использует выборку, максимальная частота внешнего таймера, который это может
обнаружить, является половиной частоты выборки (теорема отсчетов Nyquist).
Однако, из-за изменения системы синхронизируют частоту и рабочий цикл, вызванный источником Осциллятора
(кристалл, резонатор и конденсаторы) допуски, рекомендуется, чтобы максимальная частота источника внешнего
таймера была меньше чем fclk_I/O/2.5.

Источник внешнего таймера не может предварительно масштабироваться.

Рисунок 15-2. Делитель частоты для Таймер/Счетчика0 и Таймер/Счетчика1 (1)


Примечание:
1. Логику синхронизации на входных контактах (T1/T0) показывают в рисунке 15-1.

15.5 Описание регистра


15.5.1 SFIOR – Специальный Функциональный Регистр IO

Сброс делителя частоты Таймер/Счетчик1 и Таймер/Счетчик0


Когда этот бит будет записан в 1, Таймер/Счетчик и делитель частоты Таймер/Счетчик0 будут сброшены.
Бит будет очищен аппаратными средствами после того, как работа будет выполняться.
Запись нуля в этом бите не будет иметь никакого эффекта.
Обратите внимание на то, что Таймер/Счетчик1 и Таймер/Счетчик0 совместно используют тот же самый делитель
частоты, и сброс этого делителя частоты будет влиять на оба таймера.
Этот бит будет всегда читаться как нуль.

16. 16-разрядный Таймер/Счетчик1


16.1 Features
• True 16-bit Design (i.e., Allows 16-bit PWM)
• Two Independent Output Compare Units
• Double Buffered Output Compare Registers
• One Input Capture Unit
• Input Capture Noise Canceler
• Clear Timer on Compare Match (Auto Reload)
• Glitch-free, Phase Correct Pulse Width Modulator (PWM)
• Variable PWM Period
• Frequency Generator
• External Event Counter
• Four Independent Interrupt Sources (TOV1, OCF1A, OCF1B, and ICF1)
16.2
Overview
The 16-bit Timer/Counter unit allows accurate program execution timing (event management), wave generation,
and signal timing measurement. Most register and bit references in this section are written in general form. A
lower case “n” replaces the Timer/Counter number, and a lower case “x” replaces the output compare unit.
However, when using the register or bit defines in a program, the precise form must be used (i.e., TCNT1 for
accessing Timer/Counter1 counter value and so on).
A simplified block diagram of the 16-bit Timer/Counter is shown in Figure 16-1. For the actual placement of I/O
pins, refer to Figure 1-1 on page 3. CPU accessible I/O Registers, including I/O bits and I/O pins, are shown in
bold. The device specific I/O Register and bit locations are listed in the “Register Description” on page 105.

Figure 16-1. 16-bit Timer/Counter Block Diagram(1)

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:

Table 16-1. Definitions


BOTTOM The counter reaches the BOTTOM when it becomes 0x0000.
MAX The counter reaches its MAXimum when it becomes 0xFFFF (decimal 65535).
TOP The counter reaches the TOP when it becomes equal to the highest value in the
count sequence. The TOP value can be assigned to be one of the fixed values:
0x00FF, 0x01FF, or 0x03FF, or to the value stored in the OCR1A or ICR1
Register. The assign-ment is dependent of the mode of operation.

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.

Assembly Code Example(1)


:.
; Set TCNT1 to 0x01FF
ldi r17,0x01
ldi r16,0xFF
out TCNT1H,r17
out TCNT1L,r16
; Read TCNT1 into r17:r16
in r16,TCNT1L
in r17,TCNT1H
:.

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

Assembly Code Example(1)


TIM16_ReadTCNT1:
; Save global interrupt flag
In r18,SREG
; Disable interrupts
cli
; Read TCNT1 into r17:r16
In r16,TCNT1L
In r17,TCNT1H
; Restore global interrupt flag
out SREG,r18
ret

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.

Assembly Code Example(1)


TIM16_WriteTCNT1:
; Save global interrupt flag
In r18,SREG
; Disable interrupts
cli
; Set TCNT1 to r17:r16
out TCNT1H,r17
out TCNT1L,r16
; Restore global interrupt flag
out SREG,r18
ret

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

Signal description (internal signals):


Count
Increment or decrement TCNT1 by 1.
Direction
Select between increment and decrement.
Clear
Clear TCNT1 (set all bits to zero).
clkT1
Timer/Counter clock.
TOP
Signalize that TCNT1 has reached maximum value.
BOTTOM
Signalize that TCNT1 has reached minimum value (zero).
The 16-bit counter is mapped into two 8-bit I/O memory locations: Counter High (TCNT1H) containing the upper
eight bits of the counter, and Counter Low (TCNT1L) containing the lower 8 bits. The TCNT1H Register can only
be indirectly accessed by the CPU. When the CPU does an access to the TCNT1H I/O location, the CPU
accesses the High byte temporary register (TEMP). The temporary register is updated with the TCNT1H value
when the TCNT1L is read, and TCNT1H is updated with the temporary register value when TCNT1L is written.
This allows the CPU to read or write the entire 16-bit counter value within one clock cycle via the 8-bit data bus.
It is important to notice that there are special cases of writing to the TCNT1 Register when the counter is
counting that will give unpredictable results. The special cases are described in the sections where they are of
importance.
Depending on the mode of operation used, the counter is cleared, incremented, or decremented at each timer
clock (clkT1). The clkT1 can be generated from an external or internal clock source, selected by the Clock Select
bits (CS12:0). When no clock source is selected (CS12:0 = 0) the timer is stopped. However, the TCNT1 value
can be accessed by the CPU, independent of whether clkT1 is present or not. A CPU write overrides (has priority
over) all counter clear or count operations.
The counting sequence is determined by the setting of the Waveform Generation Mode bits (WGM13:0) located
in the Timer/Counter Control Registers A and B (TCCR1A and TCCR1B). There are close connections between
how the counter behaves (counts) and how waveforms are generated on the Output Compare outputs OC1x.
For more details about advanced counting sequences and waveform generation, see “Modes of Operation” on
page 96.
The Timer/Counter Overflow (TOV1) Flag is set according to the mode of operation selected by the WGM13:0
bits. TOV1 can be used for generating a CPU interrupt.
16.6
Input Capture Unit
The Timer/Counter incorporates an Input Capture unit that can capture external events and give them a time-
stamp indicating time of occurrence. The external signal indicating an event, or multiple events, can be applied
via the ICP1 pin or alternatively, via the Analog Comparator unit. The time-stamps can then be used to calculate
frequency, duty-cycle, and other features of the signal applied. Alternatively the time-stamps can be used for
creating a log of the events.

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.

Figure 16-3. Input Capture Unit Block Diagram

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.

Figure 16-4. Output Compare Unit, Block Diagram


The OCR1x Register is double buffered when using any of the twelve Pulse Width Modulation (PWM) modes.
For the normal and Clear Timer on Compare (CTC) modes of operation, the double buffering is disabled. The
double buffering synchronizes the update of the OCR1x Compare Register to either TOP or BOTTOM of the
counting sequence. The synchronization prevents the occurrence of odd-length, non-symmetrical PWM pulses,
thereby making the output glitch-free.
The OCR1x Register access may seem complex, but this is not case. When the double buffering is enabled, the
CPU has access to the OCR1x Buffer Register, and if double buffering is disabled the CPU will access the
OCR1x directly. The content of the OCR1x (Buffer or Compare) Register is only changed by a write operation
(the Timer/Counter does not update this register automatically as the TCNT1 and ICR1 Register). Therefore
OCR1x is not read via the High byte temporary register (TEMP). However, it is a good practice to read the Low
byte first as when accessing other 16-bit registers. Writing the OCR1x Registers must be done via the TEMP
Register since the compare of all 16 bits is done continuously. The High byte (OCR1xH) has to be written first.
When the High byte I/O location is written by the CPU, the TEMP Register will be updated by the value written.
Then when the Low byte (OCR1xL) is written to the lower eight bits, the High byte will be copied into the upper
8-bits of either the OCR1x buffer or OCR1x Compare Register in the same system clock cycle.
For more information of how to access the 16-bit registers refer to “Accessing 16-bit Registers” on page 87.
16.7.1
Force Output Compare
In non-PWM Waveform Generation modes, the match output of the comparator can be forced by writing a one
to the Force Output Compare (FOC1x) bit. Forcing compare match will not set the OCF1x Flag or reload/clear
the timer, but the OC1x pin will be updated as if a real compare match had occurred (the COM1x1:0 bits settings
define whether the OC1x pin is set, cleared or toggled).

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”.

Figure 16-5. Compare Match Output Unit, Schematic