В начало

 

Таймеры ШИМ (Лекция)

 

Очевидно, что нужен какой-то внешний счетчик, который тикал бы независимо от работы процессора, а процессор мог в любой момент посмотреть, что в нем такое натикало. Либо чтобы счетчик выдавал события по переполнению или опустошению – флаг поднимал или прерывание генерировал. А процессор это увидит и обработает. И такой счетчик есть, даже не один – это периферийные таймеры. В AVR их может быть несколько штук с разной разрядностью. В ATmega16 три, в ATmega128 четыре. Причем таймер может быть не просто счетчиком, таймер является одним из самых многофункциональных (в плане альтернативных функций) периферийных устройств.

Что умеют таймеры

·                    Считать с разной скоростью, подсчитывая время

·                    Считать входящие извне импульсы (режим счетчика)

·                    Работать от внешнего кварца на 32768 Гц

·                    Генерировать несколько видов ШИМ сигнала

·                    Выдавать прерывания (по полудесятку разных событий) и устанавливать флаги

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

Таймер/Счетчик (далее ТС) считает либо тактовые импульсы от встроенного тактового генератора, либо со счетного входа. При соответствующей настройке ТС будет считать либо передний (перепад с 0-1), либо задний (перепад 1-0) фронт импульсов, пришедших на входы. Главное, чтобы частота входящих импульсов не превышала тактовую частоту процессора, иначе он не успеет обработать импульсы.

Кроме того, некоторые таймеры способны работать в асинхронном режиме. То есть ТС считает не тактовые импульсы процессора, а импульсы своего собственного генератора, работающего от отдельного кварца. Для этого у ТС есть отдельные входы, на которые можно повесить кварцевый резонатор. Зачем это надо? Хотя бы для того, чтобы организовать часы реального времени. Повесил на них часовой кварц на 32768 Гц и можно засекать время - за секунду произойдет 128 переполнений (если ТС – восьмиразрядный). Так что одно переполнение это 1/128 секунды. Причем на время обработки прерывания по переполнению таймер не останавливается, он также продолжает считать.

 

Предделитель

Если таймер считает импульсы от тактового генератора или от своего внутреннего, то их еще можно пропустить через предделитель. То есть еще до попадания в счетный регистр частота импульсов будет делиться. Делить можно на 8, 32, 64, 128, 256, 1024. Так что если повесить на ТС часовой кварц и пропустить через предделитель на 128, то таймер будет считать со скоростью один раз в секунду. Также удобно использовать предделитель, когда надо просто получить большой интервал, а единственный источник счета –  это тактовый генератор процессора, а считать эти мегагерцы сложно, а вот если пропустить через предделитель, то все уже проще. Однако если запустить ТС с предделителем, то первый тик на счетный регистр придет не обязательно через необходимое количество импульсов.

Это зависит от того, в каком состоянии находился предделитель, а вдруг он к моменту включения уже досчитал почти до заданного значения? Значит, тик будет сразу же. Предделитель работает все время, вне зависимости от того включен таймер или нет. Поэтому предделители можно и нужно сбрасывать. Также надо учитывать и то, что предделитель един для всех счетчиков, поэтому, сбрасывая его, надо учитывать то, что у другого таймера собьется задержка до следующего тика.

Например, первый таймер работает на выводе 1:64, а второй на выводе 1:1024 предделителя. У второго почти дотикало в предделителе до 1024 и вот вот должен быть тик таймера, но тут ты взял и сбросил предделитель, чтобы запустить первый таймер точно с нуля. Что произойдет? У второго делитель тут же скинется в 0 (предделитель единый, регистр у него один), и второму таймеру придется ждать еще 1024 такта, чтобы получить таки импульс! А если сбрасывать предделитель в цикле, во благо первого таймера, чаще, чем раз в 1024 такта, то второй таймер так никогда и не тикнет. Для сброса предделителей достаточно записать бит PSR10 в регистре SFIOR. Бит PSR10 будет сброшен автоматически на следующем такте.

 

Счетный регистр

Весь счет накапливается в счетном регистре TCNTх, где вместо х номер таймера. Он может быть как 8-, так и 16-разрядным, в таком случае он состоит из двух регистров TCNTxH и TCNTxL – старший и младший байты соответственно.

Причем тут есть подвох. А дело все в чем – таймер считает независимо от процессора, поэтому мы можем положить вначале один байт, он начнет считаться, потом второй, и начнется пересчет уже с учетом второго байта. Таймер точное устройство, поэтому грузить его счетные регистры надо одновременно! Но как? А инженеры из Atmel решили проблему просто: Запись в старший регистр (TCNTxH) ведется вначале в регистр TEMP. Этот регистр чисто служебный, и нам никак недоступен.

Что в итоге получается? Записываем старший байт в регистр TEMP (для нас все равно TCNTxH), а затем записываем младший байт. В этот момент в реальный TCNTxH заносится ранее записанное значение. То есть два байта, старший и младший, записываются одновременно! Менять порядок нельзя! Выглядит это так:

1
2
3
4
   CLI                              ; Запрещаем прерывания, в обязательном порядке!
   OUT    TCNT1H,R16   ; Старшей байт записался вначале в TEMP
   OUT    TCNT1L,R17   ; А теперь записалось и в старший и младший!
   SEI                              ; Разрешаем прерывания

Зачем запрещать прерывания? Да чтобы после записи первого байта, программа случайно не ушла не прерывание.

Читается все также, только в обратном порядке. Сначала младший байт (при этом старший – в TEMP), потом старший. Это гарантирует то, что мы считаем именно тот байт, который был на данный момент в счетном регистре.

Контрольные регистры

Основная функция таймера - счетная. Главным регистром является TCCRx. Для ТС0 – это TCCR0, для других таймеров TCCRn соответственно. Первые 3 бита этого регистра: CSx2..CSx0 отвечают за установку предделителя и источник тактового сигнала, вместо х подставляется номер таймера. У разных таймеров немного по-разному, поэтому опишем биты CS02…CS00 только для таймера0.

·                    000 - таймер остановлен

·                    001 - предделитель равен 1, то есть выключен. Таймер считает тактовые импульсы

·                    010 - предделитель равен 8, тактовая частота делится на 8

·                    011 - предделитель равен 64, тактовая частота делится на 64

·                    100 - предделитель равен 256, тактовая частота делится на 256

·                    101 - предделитель равен 1024, тактовая частота делится на 1024

·                    110 - тактовые импульсы идут от ножки Т0 на переходе с 1 на 0

·                    111 - тактовые импульсы идут от ножки Т0 на переходе с 0 на 1

 

Прерывания

У каждого аппаратного события есть прерывание, и таймер не исключение. Как только происходит переполнение или другое событие, так сразу же генерируется прерывание. За прерывания от таймеров отвечают регистры TIMSК, TIFR. А у мощных AVR, таких как ATMega128, есть еще ETIFR и ETIMSK - своего рода продолжение, так как таймеров там больше.  TIMSK – это регистр масок. То есть биты, находящиеся в нем, локально разрешают прерывания. Если бит установлен, значит, конкретное прерывание разрешено. Если бит в нуле, значит, данное прерывание не обрабатывается. По умолчанию все биты в нуле. За прерывание по переполнению отвечают биты:

·                    TOIE - разрешение на прерывание по переполнению таймера 0

·                    TOIE1 - разрешение на прерывание по переполнению таймера 1

·                    TOIE2 - разрешение на прерывание по переполнению таймера 2

Регистр TIFR это непосредственно флаговый регистр. Когда какое то прерывание срабатывает, то флаг прерывания устанавливается. Этот флаг сбрасывается аппаратно, когда программа уходит по вектору. Если прерывания запрещены, то флаг так и будет стоять до тех пор, пока прерывания не разрешат и программа не уйдет на прерывание. Чтобы этого не произошло, флаг можно сбросить вручную. Для этого в TIFR в него нужно записать 1!

Подробнее о таймера ATMEGA128 будет рассказано позже.

Широтно Импульсная Модуляция

Широтно-Импульсная Модуляция (PWM - Pulse Width Modulation) это способ задания аналогового сигнала цифровым методом, то есть из цифрового выхода, дающего только нули и единицы получить какие-то плавно меняющиеся величины. А суть в чем:

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

При ШИМ мы подаем на выход сигнал, состоящий из высоких и низких уровней (применимо к нашей аналогии – включаем и выключаем двигатель), то есть нулей и единицы. А затем это все пропускается через интегрирующую цепочку (в аналогии – маховик). В результате интегрирования на выходе будет величина напряжения, равная площади под импульсами. Меняя скважность (отношение длительности периода к длительности импульса) можно плавно менять эту площадь, а значит и напряжение на выходе. Таким образом, если на выходе сплошные 1, то на выходе будет напряжение высокого уровня (например, 12 вольт), если нули, то ноль. А если 50% времени будет высокий уровень, а 50% низкий то 6 вольт. Интегрирующей цепочкой тут будет служить масса якоря двигателя, обладающего довольно большой инерцией.

 

А что будет, если взять и дать ШИМ-сигнал не от нуля до максимума, а от минуса до плюса. Скажем от +12 до -12. А можно задавать переменный сигнал! Когда на входе ноль, то на выходе -12В, когда один, то +12В. Если скважность 50% то на выходе 0В. Если скважность менять по синусоидальному закону от максимума к минимуму, то получим переменное напряжение. А если взять три таких ШИМ генератора и гнать через них синусоиды, сдвинутые на 120 градусов между собой, то получим самое обычное трехфазное напряжение, а значит привет бесколлекторные асинхронные и синхронные двигатели. На этом принципе построены все современные промышленные приводы переменного тока. В качестве сглаживающей интегрирующей цепи в ШИМ может быть применена RC цепочка:

 

Аппаратная реализация ШИМ

 

В случае ATMega проще всего сделать на его ШИМ-генераторе, который встроен в таймеры. Причем в первом таймере есть два канала. Так что ATmega может реализовать одновременно четыре канала ШИМ.

У таймера есть особый регистр сравнения OCR. Когда значение в счётном регистре таймера достигает значения находящегося в регистре сравнения, то могут возникнуть следующие аппаратные события:

·                    Прерывание по совпадению

·                    Изменение состояния внешнего выхода сравнения OC.

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

 

На выходе появляются импульсы. Если увеличить значение в регистре сравнения, то ширина импульсов станет уже. То есть, меняя значение в регистре сравнения, можно менять скважность ШИМ-сигнала. А если пропустить этот ШИМ-сигнал через сглаживающую RC цепочку (интегратор), то получим аналоговый сигнал.

У таймера может быть сколько угодно регистров сравнения. Зависит от модели МК и типа таймера. В новых AVR бывает и по три регистра сравнения на таймер, что позволяет одним МК организовать множество независимых ШИМ каналов. Самих режимов ШИМ существует несколько:

 

Быстрая ШИМ (Fast PWM)

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

Частота получившегося ШИМ сигнала определяется просто: Частота процессора, например, 8Мгц, таймер тикает до 256 с тактовой частотой. Значит, один период ШИМ будет равен 8000 000/256 = 31250Гц. Быстрей не получится - это максимальная скорость на внутреннем 8Мгц тактовом генераторе. Еще есть возможность повысить разрешение, сделав счет 8, 9, 10 разрядным (если разрядность таймера позволяет), но надо учитывать, что повышение разрядности, вместе с повышением дискретности выходного аналогового сигнала, резко снижает частоту ШИМ.

 

ШИМ с фазовой коррекцией (Phase Correct PWM)

ШИМ с точной фазой. Работает похоже, но тут счетчик считает несколько по-другому. Сначала от 0 до 255, потом от 255 до 0. Вывод OCxx при первом совпадении сбрасывается, при втором устанавливается. Но частота ШИМ при этом падает вдвое, из-за большего периода. Основное его предназначение, делать многофазные ШИМ сигналы, например, трехфазную синусоиду. Т.е. центры импульсов в разных каналах и на разной скважности будут совпадать.

Рис. Режим быстрой ШИМ и ШИМ с фазовой коррекцией

 

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

Сброс по совпадению (Clear Timer On Compare)

Сброс при сравнении. Это уже скорей ЧИМ - частотно-импульсно моделированный сигнал. Тут работает несколько иначе, чем при других режимах. Тут счетный таймер тикает не от 0 до предела, а от 0 до регистра сравнения! А после чего сбрасывается.

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

 

Например, надо нам прерывание каждую миллисекунду. И чтобы вот точно. Как это реализовать проще? Через Режим СТС! Пусть частота равна 8Мгц. Предделитель будет равен 64, таким образом, частота счета таймера составит 125000 Гц. А нам надо прерывание с частотой 1000Гц. Поэтому настраиваем прерывание по совпадению с числом 125. Дошел счет до 125 – выработалось прерывание, обнулился счетчик. Дошел до 125 – дал прерывание, обнулился.

 

8-разрядный таймер-счетчик 0 с функциями ШИМ и асинхронного тактирования

Таймер-счетчик 0 - модуль многофункционального одноканального 8-разрядного таймера-счетчика с аппаратным выходом для генерации ШИМ-сигнала и встроенным асинхронным опциональным тактовым генератором, который оптимизирован под использование часового кварца (32768Гц) для асинхронного по отношению к системной синхронизации тактирования.

Функциональная схема 8-разр. таймера-счетчика

Регистры

Регистр таймера-счетчика (TCNT0) и регистр порога сравнения (OCR0) - 8-разр. регистры. Сигналы запроса на прерывание представлены как флаги прерываний таймера в регистре TIFR. Все прерывания индивидуально маскируются с помощью регистра маски прерываний таймеров (TIMSK). Таймер-счетчик может тактироваться через предделитель внутренне или асинхронно через внешние выводы TOSC1/2. Асинхронная работа управляется регистром ASSR. Блок синхронизации осуществляет выбор, какой тактовый источник используется. Если источник тактирования не задан, то таймер-счетчик находится в неактивном состоянии. Выход clkT0 – это выход логики выбора синхронизации. Значение регистра порога сравнения с двойной буферизацией (OCR0) непрерывно сравнивается со значением таймера-счетчика. Результат сравнения может использоваться для генерации сигналов с ШИМ или прямоугольных импульсов переменной частоты на выводе OC0. Совпадение порога сравнения со значением таймера-счетчика приводит к установке флага результата сравнения (OCF0), который может использоваться для генерации запроса на прерывание по результату сравнения.

НП (нижний предел)

Счетчик достигает нулевого значения (0х00)

МАКС (макс. значение)

Счетчик достигает максимального значения 0xFF (десятич. 255)

ВП (верхний предел)

Счетчик достигает верхнего предела счета (вершина счета). В качестве вершины счета может выступать фиксированное значение 0xFF или содержимое регистра OCR0.

Тактовые источники таймера-счетчика 0

ТС0 может тактироваться внутренне синхронно или внешне асинхронно (по отношению к внутренней системной синхронизации). По умолчанию используется clkT0, эквивалентный clkI/O. Если в бит AS0 регистра ASSR записать «1», то в качестве источника выступает генератор на  выводах TOSC1 и TOSC2.

Блок счетчика

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

Функциональная схема счетчика

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

Счет - Инкрементирует или декрементирует TCNT0 на 1.

Направление - Задает направление счета: (+1, прямой счет) или (-1, обратный счет).

Сброс - Сбрасывает содержимое TCNT0 (запись 0 во все разряды).

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

Верхний предел - Задает максимальное значение на TCNT0.

Нижний предел - Задает минимальное значение на TCNT0 (0).

В зависимости от выбранного режима работы счетчик сбрасывается, инкрементируется или декрементируется на каждом такте clkT0. Тактовый сигнал clkT0 может быть внутренним или внешним, а его частота выбирается с помощью бит CS02-CS00. Если источник синхронизации не задан (CS02-CS00=0b000), то таймер останавливается. Состояние TCNT0 доступно ЦПУ независимо от того синхронизации. Последовательность счета определяется установкой бит WGM01 и WGM00 из регистра TCCR0. Имеется точная связь между поведением счетчика и генерируемой на выходе OC0 формы сигнала. Флаг переполнения ТС (TOV0) устанавливается в соответствии с режимом работы, который выбирается битами WGM01, WGM00. Бит TOV0 может использоваться для генерации прерывания ЦПУ.

Блок сравнения

8-разрядный цифровой компаратор непрерывно выполняет сравнение содержимого регистра таймера-счетчика TCNT0 с регистром порога сравнения OCR0. Всякий раз, когда значение TCNT0 совпадает со значением OCR0, компаратор устанавливает флаг совпадения OCF0 следующим тактом синхронизации таймера. Если разрешено прерывание битом OCIE0=1, то установка флага совпадения вызывает запрос на прерывание. Флаг OCF0 автоматически сбрасывается во время обработки прерывания. Генератор сигнала использует сигнал результата сравнения для генерации прямоугольных импульсов по одному из алгоритмов, который выбирается битами задания режима работы таймера WGM01, WGM00 и битами задания режима формирования выходного сигнала (COM01, COM00). Верхний и нижний пределы счета используются в некоторых режимах работы для выполнения специальных действий.

Функциональная схема блока сравнения

Регистр OCR0 выполнен по схеме двойной буферизации при использовании режимов с широтно-импульсной модуляцией (ШИМ). В нормальном режиме и режиме сброса таймера при совпадении (CTC) схема двойной буферизации отключается. Двойная буферизация позволяет синхронизировать обновление регистра сравнения OCR0 по достижении верхнего или нижнего предела счета. Такая синхронизация предотвращает возможность возникновения несимметричных ШИМ-импульсов нечетной длины, тем самым гарантируя отсутствие сбоев при генерации прямоугольных импульсов. Доступ к регистру OCR0 может показаться сложным, но это выполнено не случайно. После разрешения двойной буферизации ЦПУ осуществляет доступ к буферному регистру OCR0, а после отключения - непосредственно адресуется к регистру OCR0.

 

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

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

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

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

 

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

Биты задания режима формирования выходного сигнала (COM01:0) имеют двойное назначение. С одной стороны биты COM01, COM00 используются формирователем сигнала и определяют какое логическое состояние должно быть на выходе OC0 при возникновении следующего совпадения. С другой стороны, биты COM01, COM00 используются для разрешения/запрета альтернативной функции вывода порта OC0. На рисунке представлена упрощенная логическая схема, на которую воздействуют биты COM01, COM00. Показаны только те регистры управления портом ввода-вывода (DDR и PORT), на которые оказывает действие биты COM01, COM00.

Схема блока формирования выходного сигнала

Функция линии универсального порта ввода-вывода заменяется на функцию выхода формирователя сигнала OC0, если хотя бы один из бит COM01, COM00 равен 1. Однако, управлением направлением вывода OC0 (вход или выход) в этом случае остается за соответствующим битом регистра направления данных порта В (DDRB.4). Чтобы значение регистра OC0 присутствовало на выводе OC0 необходимо настроить данную линию на вывод (установить бит DDRB.4). Управление вводом альтернативной функции не зависит от режима генерации сигнала.

 

Режимы работы таймера-счетчика 0

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

 Режимы работы таймера были описаны выше (нормальный (счетный), сброс по совпадению, быстрая ШИМ и ШИМ с фазовой коррекцией).

 

Асинхронная работа таймера-счетчика 0

Если таймер-счетчик 0 работает асинхронно, то необходимо учесть некоторые особенности. При переключении между асинхронным и синхронным тактовыми источниками таймера-счетчика содержимое регистров TCNT0, OCR0 и TCCR0 может быть нарушено. Во избежание этого необходимо придерживаться следующей безопасной последовательности переключения:

1.     Отключить прерывания таймера-счетчика 0 путем сброса бит OCIE0 и TOIE0.

2.     Выбрать необходимый тактовый источник с помощью бита AS0

3.     Выполнить запись новых значений в TCNT0, OCR0 и TCCR0.

4.     При переходе в асинхронный режим тактирования дождаться сброса флагов TCN0UB, OCR0UB и TCR0UB.

5.     Сбросить флаги прерывания таймера-счетчика 0

6.     При необходимости разрешить прерывания

Генератор оптимизирован под использование часового кварцевого резонатора на частоту 32768 Гц. Тактовая частота ЦПУ должна быть минимум в четыре раза выше частоты генератора. Запись в TCNT0, OCR0 или TCCR0 происходит за два положительных фронта TOSC1, т.к. данные предварительно помещаются во временный регистр, а затем передаются по назначению. Каждый из трех упомянутых регистров имеют свои индивидуальные временные регистры. Это означает, что, например, запись в TCNT0 не влияет на процесс записи в регистр OCR0. Чтобы определить, в какой регистр была выполнена запись, реализован регистр асинхронного состояния ASSR.

Если выбрана асинхронная работа, то генератор на 32768 Гц находится постоянно включенным, за исключением режима выключения и дежурного режима МК.

Предделитель таймера-счетчика 0

Предделитель таймер-счетчика 0

Тактовый источник ТС0 обозначен как clkT0. По умолчанию clkT0 подключен к clkI/O. Если бит AS0=1 в регистре ASSR, то ТС0 тактируется асинхронно с вывода TOSC1. Так можно использовать ТС0 в качестве часов реального времени (RTC). Если AS=1, то выводы TOSC1 и TOSC2 не выполняют функции порта С, а между ними может быть подключен кварцевый резонатор в качестве отдельного тактового источника. Подключение к выводу TOSC1 внешнего тактового источника не рекомендуется. Предделитель позволяет выбрать следующие тактовые сигналы: clkT0S/8, clkT0S/32, clkT0S/64, clkT0S/128, clkT0S/256 и clkT0S/1024. Есть возможность остановить синхронизацию. Если PSR0=1 в регистре SFIOR, сбрасывает предделитель.

Описание регистров 8-разрядного таймера-счетчика 0 смотрите в спецификации.

iTunes Gift Card (РОССИЯ) - 600 руб
iTunes Gift Card (РОССИЯ) - 600 руб


iTunes Gift Card RU-регион. 1000 рублей
iTunes Gift Card RU-регион. 1000 рублей


DmC Devil May Cry
DmC Devil May Cry