Site Loader

Содержание

Микроконтроллеры для начинающих. Часть 54. Таймеры AVR | Разумный мир

Мы уже познакомились с таймерами в целом в статье «Микроконтроллеры для начинающих. Часть 52. Таймеры» и с подробностями реализации таймеров в Microchp PIC в статье «Микроконтроллеры для начинающих. Часть 53. Таймеры PIC». Теперь, как я и обещал, познакомимся с таймерами в Atmel AVR (ныне Microchip AVR). Напомню, что популярная Arduino это те самые микроконтроллеры AVR, так что статья может быть полезной и любителям Arduino.

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

Базовый 8-битный таймер Timer0

Несмотря на то, что AVR считается «более одинаковой» чем тот же PIC, это далеко не всегда так. И сегодня мы увидим это на примере таймеров. Они так же, как в PIC, прошли свой путь развития. Вот такой простейший базовый таймер можно встретить в ATmega8A

Базовый 8-битный Timer/Counter0 в микроконтроллере ATmega8A. Из документации

Базовый 8-битный Timer/Counter0 в микроконтроллере ATmega8A. Из документации

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

Здесь все основные компоненты нам уже знакомы. Собственно сам регистр-счетчик таймера — TCNTn, где n обозначает номер таймера. В данном случае это TCNT0. Счетчик может считать только в одну сторону, в сторону увеличения. Функциональный блок «Control Logic» скрывает в себе все подробности схемы управления. Но для нас это не страшно.

Начинка блока управляющей логики достаточно проста. Это мультиплексор выбора источника счетных импульсов и схема формирования сигнала TOV0, который соответствует флагу переполнения таймера. Сам флаг переполнения TOV0 располагается в регистре TFIR, который не относится к модулю таймера.

На иллюстрации показана схема определения момента переполнения, компаратор «=0xFF». Однако, в этом простейшем таймере компаратор на самом деле отсутствует. Сигналом переполнения является перенос из старшего разряда счетчика. Именно из него и формируется сигнал TOV0.

Источник счетных импульсов выбирается с помощью бит SC00-SC02 регистра TCCR0. Он показан на иллюстрации. Если все три бита равны 0, источник счетных импульсов отсутствует, что соответствует остановке таймера.

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

Так же счетные импульсы могут поступать от внешнего источника, через вывод T0 (Tn). При этом работа счетчика возможна по нарастающему или по спадающему фронту.

Функциональная схема обработки сигнала с выводов Tn. Из документации

Функциональная схема обработки сигнала с выводов Tn. Из документации

Как видно, таймер не умеет асинхронно считать импульсы внешнего сигнала. Так как все синхронизируется с системным тактовым сигналом. Кроме того, такая схема обработки вносит задержку примерно три такта. Иногда это нужно учитывать.

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

Обратите внимание, адреса регистров я указал для ATmega8A. Все очень похоже на то, как мы делали такую задержку на базовом TIMER0 в PIC. Но теперь у нас нет возможности задать коэффициент деления 1:4, поэтому выбираем 1:8. Соответственно и начальное значение счетчика будет -125.

Так же, вопросы может вызвать и такая вот операция

if(TIFR.TOV0) TIFR.TOV0=1;

Зачем устанавливать бит, если он и так установлен? Но дело в том, что этот бит устанавливается аппаратно, при переполнении. А вот сбрасывается аппаратно только при выполнении обработчика прерывания, которого у нас нет. И я даже не показал регистр маскирования прерываний. Поэтому сбрасывать бит приходится вручную. При этом его сброс выполняется несколько «парадоксальным» образом — повторной установкой. Что мы и делаем.

Предварительный делитель. Один на двоих

В AVR один предварительный делитель на два таймера, 0 и 1. И выбор коэффициентов деления для таймеров довольно ограничен.

Блок выбора источника счетных импульсов таймеров 0 и 1, с предварительным делителем. Из документации

Блок выбора источника счетных импульсов таймеров 0 и 1, с предварительным делителем. Из документации

Собственно говоря, предварительный делитель это просто цепочка триггеров (счетчик) с выводами сигналов с отдельных триггеров. И коэффициенты деления могут быть лишь 1:1, 1:8, 1:64, 1:256 и 1:1024.

Биты CS просто управляют мультиплексорами, которые выбирают и источник сигнала, и фронт, и коэффициент деления.

Усовершенствованный 8-битный таймер Timer 0

Страсть к усовершенствованиям не обошла стороной и Atmel. При этом они сохранили номер таймера, но весьма существенно изменили его работу. А это далеко не лучшим образом влияет на совместимость микроконтроллеров и лишь усложняет переносимость программ. Вот так выглядит таймер, например, в ATtiny13A

Усовершенствованный 8-битный таймер Timer 0 в ATiny13A. Из документации

Усовершенствованный 8-битный таймер Timer 0 в ATiny13A. Из документации

Да, это все еще тот же самый таймер! Отличия, на первый взгляд, не так и велики. Источники счетных импульсов остались теми же самыми. И выбор осуществляется теми же самыми битами. Только теперь они находятся в регистре TCCR0B. Остались такими же блоки обработки внешнего сигнала и выбора источника сигнала.

Остался и признак переполнения TOV0, только он переехал в регистр TIFR0. Причем этот регистр уже отвечает на за прерывания вообще, а именно за прерывания данного таймера.

На месте и регистр счетчик таймера TCNT0. И он по прежнему 8-битный. Правда научился считать в обе стороны. И даже «Control Logic» на месте, только сигналов у него добавилось.

Сразу скажу, что генерацию сигналов (блоки Waveform Generation) мы сегодня рассматривать не будем, как и различные режимы формирования ШИМ с помощью таймера. Я об этом предупреждал в самом начале статьи. Эти вопросы будут рассматриваться позднее, в отдельных статьях.

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

Режимами работы, в основном, управляет регистр TCCR0A. За исключением одного бита, который по неизвестной причине был выселен в TCCR0B, не смотря на то, что свободное место в TCCR0A оставалось.

Нас будут интересовать биты WGM02:WGM00. И пусть вас не смущает, что эта аббревиатура образовалась от Waveform Generation Mode, который мы сегодня не рассматриваем. Именно эти биты управляют работой таймера. А вот биты COM0A1:COM0A0 и COM0B1:COM0B0 управляют использованием выводов OC0A и OC0B генераторами сигналов.

Для нас интересны только два режима из 6 доступных. Режимы ШИМ использовать возможно, но не имеет особого смысла. Поэтому их рассмотрим в соответствующей статье.

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

Если WGM02:WGM00=000, то таймер работает в нормальном режиме, который практически полностью идентичен работе базового таймера. В этом режиме счетчик таймера считает только в сторону увеличения, а при его переполнении устанавливается флаг TOV0, правда в регистре TIFR0. А таймер продолжает счет с начала.

Именно этот факт обозначен на иллюстрации прямоугольником в надписью «Fixed TOP Value». Это фиксированное верхнее значение и равно 0xFF.

Однако, этот режим все таки отличается от работы базового таймера. Так как два регистра, OCR0A и OCR0B, хоть и не оказывают влияния на работу собственно таймер, но позволяют управлять двумя дополнительными флагами. И эти флаги могут вызывать прерывания.

Когда содержимое TCNT0 совпадет с содержимым регистра OCR0A, будет установлен бит OCRF0A в регистре TIFR0. Этот бит будет сброшен автоматически при обработке прерывания, или потребует ручного сброса, если прерывания не используются. Причем для его сброса, если он установлен, нужно «парадоксально» установить его еще раз (записать 1).

Точно так же ведет себя и регистр ORC0B, только установлен будет флаг OCRF0B.

Таким образом, мы можем с помощью одно таймера получить сразу 3 различных временных интервала.

Сброс при совпадении

Если WGM02:WGM00=010, то регистр OCR0A задает верхний предел для регистра счетчика. В этом режиме таймер работает аналогично ранее рассмотренному (в предыдущей статье) TIMER2 в микроконтроллерах PIC. Там же я приводил графическую иллюстрацию такого режима работы.

Счетчик таймера в этом режиме считает от 0 в сторону увеличения. Когда счетчик достигнет значения заданного регистром OCR0A, счетчик будет сброшен в 0. И будет установлен флаг OCRF0A.

Но вот флаг TOV0 при этом не будет установлен. Так как переполнения счетчика не произойдет. Флаг OCRF0B будет установлен только если содержимое регистра OCR0B меньше содержимого OCR0A.

Усовершенствованный и «экологичный» 8-битный таймер Timer 0

Да, есть и такой. Например, в ATmega328. Он полностью идентичен описанному ранее, но для включения таймера (подачи на него питания) нужно сбросить бит PRTIM0 в регистре PRR.

Иных отличий нет.

Универсальный 16-битный таймер

Всем хорош усовершенствованный 8-битный таймер, но разрядность маловата… Да и режима захвата события в нем нет. И на помощь нам приходит универсальный 16-битный таймер. Такой таймер можно встретить, например, в ATmega328 и ATmega8A. И многих других. Там он называется Timer1.

А вот в ATtiny10 этот таймер называется Timer0, при этом базового таймера в этом микроконтроллере нет. Даже улучшенного. Что добавляет путаницы и вопросов у новичков.

Так же, обратите внимание, что в ATnega328 дополнительно потребуется сбросить бит PRTIM1 в регистре PRR, что бы включить питание таймера.

16-битный универсальный таймер в микроконтроллерах AVR. Из документации

16-битный универсальный таймер в микроконтроллерах AVR. Из документации

Как видно, этот таймер является наследником усовершенствованного 8-битного таймера. Теперь все большинство регистров стали 16 разрядными.

Регистр-счетчик таймера теперь состоит из двух половин, TCNT1L и TCNT1H (TCNT0L и TCNT0H в ATtiny10). В дальнейшем, для уменьшения путаницы, я буду считать, что это Timer1. Регистры OCR1A и OCR1B тоже 16-разрядные. А вот управляющие регистры остались 8-битными. Добавился и регистр TCCR1C, который не показан на иллюстрации.

В целом, работа узлов таймера, которые похожи на таковые в улучшенном таймере, аналогична им. Но есть одна важная особенность, которой я уже уделял внимание в предыдущей статье «Микроконтроллеры для начинающих. Часть 53. Таймеры PIC». Речь идет об атомарности доступа к 16-битным регистрам со стороны 8-битного процессора (и шины).

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

Процедуры записи и чтения, с использованием этого буфера точно такие же, как и в PIC

Запись:

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

Чтение:

  • Чтение содержимого младшего байта. При этом содержимое старшего байта одновременно копируется во временный буфер.
  • Чтение содержимого старшего байта, которое ранее было сохранено во временном буфере.

Режимов работы таймера стало больше, теперь ими управляют не 3, а 4 бита WGM13:WGM10. Причем WGM13:WGM12 находятся в регистре TCCR1B, а два оставшихся в регистре TCCR1A.

При этом нам опять (пока!) интересны не все режимы.

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

Если WGM13:WGM10=0000, то таймер работает в нормальном режиме. Он почти полностью идентичен таковому в усовершенствованном 8-битном таймере. За исключением разрядности участвующих а процессе регистров.

Про работу блока захвата поговорим чуть позже.

Сброс при совпадении

А вот таких режимов теперь два. Если WGM13:WGM10=0100, режим аналогичен уже рассмотренному ранее. Только разрядность TCNT1 и OCR1A теперь 16.

А вот если WGM13:WGM10=1100, то вместо OCR1A в операциях участвует ICR1. И при условии TCNT1=ICR1 будет установлен флаг ICF1 в регистре TIFR1. Других отличий нет.

Блок захвата событий

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

Блок захвата события в универсальном 16-битном таймере. Из документации

Блок захвата события в универсальном 16-битном таймере. Из документации

Захват события выполняется очень просто. По сигналу на выводе ICP, или по сигналу внутренних модулей (компаратор на иллюстрации), содержимое регистра-счетчика таймера копируется в регистр ICR1. Эта операция атомарная. Одновременно устанавливается флаг ICF1. Теперь можно прочитать содержимое ICR1.

Обратите внимание, на этой иллюстрации показан тот самый буферный регистр, о котором я уже говорил.

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

Блок подавления шума, Noise Canceler, просто считывает состояние источника сигнала захвата в каждом цикле. Если 4 отсчета подряд дадут одинаковый результат, то считается, что сигнал устойчив и он может быть передан на детектор перепадов. Это такое гашение дребезга. Я его описывал в статьях на канале уже не один раз. Нужно учитывать, что подавление шума вносит дополнительную задержку 4 такта.

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

Теперь мы можем сделать вывод, что из всех рассмотренных нами режимов работы таймера (не всех вообще, а только рассмотренных!), захват событий можно выполнять в нормальном режиме и в режиме «сброс при совпадении», когда WGM13:WGM10=0100.

А вот записывать в регистр ICR1 можно только в режиме «сброс при совпадении», когда WGM13:WGM10=1100.

Еще один 8-битный таймер, но со своим генератором. Или совсем улучшенный, да еще и асинхронный

Что будет, если мы возьмем уже рассмотренный улучшенный 8-битный таймер и добавим к нему отдельный тактовый генератор? А вот что получится

Улучшенный 8-битный таймер Timer2 с собственным генератором в ATmega328. Из документации

Улучшенный 8-битный таймер Timer2 с собственным генератором в ATmega328. Из документации

Как видите, здесь нам знакомо все, кроме явно показанного предделителя (собственного!) и блока выбора источника импульсов с возможностью подключения внешнего кварцевого резонатора.

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

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

  1. Собственный генератор, в основном, предназначен для работы с «часовыми» кварцевыми резонаторами (32768 Гц)
  2. Тактовая частота, на которой работает микроконтроллер, должна не менее чем в 4 раза превышать частоту, на которой работает собственный генератор таймера.
  3. Переключение между синхронным и асинхронным режимами может привести к искажению содержимого регистров таймера. Поэтому новичкам лучше заранее определиться с необходимым режимом работы и настроить его в начале программы.
  4. При работе в асинхронном режиме запись в регистры TCNT2, OCR2, TCCR2 осуществляется не напрямую, а через дополнительные буферные регистры. Информация переписывается в аппаратные регистры только по следующему тактовому импульсу собственного генератора.

Переключение в асинхронный режим осуществляется установкой бита AS2 в регистре ASSR (на иллюстрации не показан). При работе в асинхронном режиме состояние бита EXCLK определяет, действительно ли к собственному генератору подключается кварцевый резонатор. Если EXCLK=0, то используется внешний кварцевый резонатор. Если EXCLK=1, то кварцевый резонатор не подключен, а вывод TOSC1 используется как вход для внешнего источника импульсов.

Следует учитывать, что бит EXCLK должен быть установлен в нужное состояние до переключения в асинхронный режим!

Так же следует учитывать, что при работе в асинхронном режиме выводы TOSC1 и TOSC2 невозможно использовать как выводы порта B.

Усекновенный совсем улучшенный

Да, такое тоже возможно. В ATmega 8A таймер обладает несколько меньшей функциональностью. Правда его не усекали, это просто старый вариант построения таймера.

Блок-схема старого 8-битного Timer2 в ATmega8A. Из документации

Блок-схема старого 8-битного Timer2 в ATmega8A. Из документации

Здесь показан регистр ASSR. Но сразу видно отличие, которое и уменьшает функциональность. Имеется всего один регистр OCR2.

В остальном это точно такой же таймер, как ранее рассмотренный.

Заключение

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

Да, я опять рассказал далеко не все. И зачастую упрощал изложение, так как этот цикл статей все таки для новичков. Да и не является учебником в полном смысле этого слова. Кроме прерываний и ШИМ я не сказал, например, о регистре GTCCR, с помощью которого можно сбросить триггеры предделителя.

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

В следующей статье мы познакомимся с таймерами в STM8. Там все еще хитрее. Будет интересно.

До новых встреч!

Таймеры ШИМ (Тема) | МПС

МПС

 

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

 

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

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

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

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

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

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

 

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

Таймер/Счетчик (далее ТС) считает либо тактовые импульсы от встроенного тактового генератора, либо со счетного входа. При соответствующей настройке ТС будет считать либо передний (перепад с 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.

1)      000 — таймер остановлен

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

3)      010 — предделитель равен 8, тактовая частота делится на 8

4)      011 — предделитель равен 64, тактовая частота делится на 64

5)      100 — предделитель равен 256, тактовая частота делится на 256

6)      101 — предделитель равен 1024, тактовая частота делится на 1024

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

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

 

Прерывания

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

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

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

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

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

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

 

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

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

(PWMPulse 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Гц) для асинхронного по отношению к системной синхронизации тактирования.


Регистры

Регистр таймера-счетчика (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 обозначен как 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 смотрите в спецификации.

Режимы работы асинхронного двигателя | Мир инженера

Приветствую тебя, дорогой и уважаемый читатель сайта “world-engineer.ru”. В одной из статей посвященной шаровым кранам с электроприводом я затронул вопрос о работе асинхронного двигателя и пообещал рассказать о нём в другой статье. Так что в этой статье вы узнаете принцип работы асинхронного двигателя.

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

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

Для асинхронных двигателей совокупность кратковременных, повторно-кратковременных и перемежающихся режимов работы подразделяется на 7 групп с условными обозначениями S2…S8.

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

Повторно-кратковременный режим (S3) работы асинхронного двигателя, характерен для условий работы, при котором продолжительность цикла (10 мин) намного больше времени пуска (т.е. переходной процесс при пуске не влияет на нагрев двигателя и не учитываются). Продолжительность рабочего времени в течении цикла, задается в процентах от времени цикла 5%, 25%, 40% и 60%.

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

Режимы работы асинхронного двигателя, при которых в конце каждого цикла предусмотрено электрическое торможение двигателя обозначаются (S5). Продолжительности включения в этом случае, рассчитывается с учетом времени электрического торможения.

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

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

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

Особенности определения установленной мощности в кратковременном (S2) и повторно-кратковременном режиме эксплуатации (S3, S6)

В кратковременном (S2) и повторно-кратковременных режимах эксплуатации (S3, S6) электродвигатели могут работать с большей установленной мощностью, чем в длительном режиме работы (S1).

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

МКР / (МN*KP) >= 1,6

При больших числах включения и больших маховых массах определение мощности рекомендуется производить исходя из:

  1. относительной продолжительности включения;
  2. частоты включения;
  3. величины внешнего момента инерции;
  4. нагрузочной диаграммы привода;
  5. типа торможения.

Рекомендуемые коэффициенты превышения установленной мощности

S2Коэффициент

превышения

S3Коэффициент

превышения

S6Коэффициент

превышения

10 мин1,425%1,3325%1,45
30 мин1,1540%1,1840%1,35
60%1,0860%1,15

В настоящее время отменен ГОСТ 183-74 Машины электрические вращающиеся. Общие технические условия. И теперь взамен этого ГОСТ, действует ГОСТ Р 52776-2007 (МЭК 60034-1-2004) Машины электрические вращающиеся. Номинальные данные и характеристики.

Согласно, актуальному ГОСТ режим работы асинхронного двигателя (электрических машин) выбирается из типовых режимов от S1 до S10:

S1 – продолжительный режим. Работа асинхронного двигателя с постоянной нагрузкой и продолжительностью;

S2 – кратковременный режим. Работа асинхронного двигателя с постоянной нагрузкой в течении определенного времени. Вариант обозначения S2 60 мин;

S3 – повторно-кратковременный периодический режим. Работа асинхронного двигателя при последовательных одинаковых рабочих циклах. Вариант обозначения S3 25%;

S4 – повторно-кратковременный периодический режим с пусками;

S5 — повторно-кратковременный периодический режим с электрическим торможением;

S6 — непрерывный периодический режим с кратковременной нагрузкой;

S7 — непрерывный периодический режим с электрическим торможением;

S8 — непрерывный периодический режим с взаимозависимыми изменениями нагрузки и частоты вращения;

S9 — режим с непериодическими изменениями нагрузки и частоты вращения;

S10 — режиме дискретными постоянными нагрузками и частотами вращения.

Более подробную информацию можете изучить в ГОСТ Р 52776-2007 (МЭК 60034-1-2004) Машины электрические вращающиеся. Номинальные данные и характеристики.

Поделиться ссылкой:

Использование таймеров в АРН

1. Состав таймера в AVR:

В MCU (M16) таймер является независимым модулем, M16 имеет три независимых модуля таймера, а именно T / C0, T / C1 и T / C2; среди них T / C0 и T / C2 оба являются 8-битным таймером, а T / C1 — 16-битным таймером. Работа таймера не зависит от аппаратного модуля, который работает самостоятельно вне ЦП.
Базовая работа таймера включает регистр управления счетчиком (TCCR), регистр счета (TCNT), регистр маски прерывания (TIMSK), регистр флага прерывания (TIFR), состав регистра общего управления прерываниями (SREG).

2. Роль каждого регистра в таймере:

1. Регистр управления счетчиком (TCCR0):

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

CS02 CS01 CS00 Описание частотного диапазона
0 0 0 Нет тактового входа, таймер не работает, то есть счетный регистр не увеличивается (0x00)
0 0 1 Без деления (0x01)
0 1 0 Деление кварца на 8 (0x02)
Деление частоты предназначено для установки рабочей частоты кварцевого генератора, деление частоты 8 означает, что кварцевый генератор имеет частоту 1/8 МГц после преобразования в единицу времени 8 микросекунд
0 1 1 Деление частоты на 32 (0x03)
1 0 0 Деление частоты на 64 (0x04)
1 0 1 128 деление частоты (0x05)
1 1 0 256 делений (0x06)
1 1 1 1024 деления (0x07)
2.Счетный регистр (TCNT0):

Счетный регистр означает, что, когда таймер работает, он увеличивается в соответствии с установленным делением тактовой частоты. Также можно понять, что счетчик хранит количество импульсов часов. TCNT0 равен 8 для регистра, а максимальное значение — 255.
TCNT1 — это регистр 16 с максимальным значением 65535. Если оно превышает максимальное значение, произойдет переполнение.

3. Регистр маски прерывания таймера (TIMSK):
бит 7 бит6 бит5 бит 4 бит3 бит2 бит1 бит 0
OCIE2 TOIE2 TICIE1 OCIE1A OCIE1B TOIE1 OCIE0 TOIE0

OCIE : Флаг разрешения прерывания сопоставления совпадений.Если установлено в 1, это означает, что разрешено прерывание совпадения. То есть, когда данные в счетном регистре достигают совпадающего значения, ЦП прерывает текущую задачу основной линии и выполняет подзадачу прерывания.
TOIE : Это бит флага разрешения прерывания переполнения. Если установлено значение 1, это означает, что прерывание переполнения разрешено, то есть, когда данные в счетном регистре увеличиваются до максимального значения и происходит переполнение, будет сгенерировано прерывание. Когда прерывание разрешено, ЦП прервет текущий, когда счетчик достигнет 255 Основная задача, выполнить подзадачу прерывания.

4. Регистр битов флага прерывания (TIFR):
бит 7 бит6 бит5 бит 4 бит3 бит2 бит1 бит 0
OCF2 ТОВ2 ICF1 OCF1A OCF1B ТОВ1 OCF0 ТОВ0

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

5. Регистр состояния (SREG):
бит 7 бит6 бит5 бит 4 бит3 бит2 бит1 бит 0
I т H S В N Z С

I : Глобальный бит запрета запуска прерывания является главным управляющим переключателем прерывания.Если установлено в 1, главный элемент управления разрешает прерывания. Если он равен 0, все прерывания запрещены (за исключением функции MCU пробуждения прерывания T / C2 в асинхронном режиме работы).
Бит I является наиболее важным битом флага переключения, остальные биты объясняются следующим образом:

6. Регистр асинхронного статуса (ASSR):
бит 7 бит6 бит5 бит 4 бит3 бит2 бит1 бит 0
AS2 TCN2UB OCR2UB TCR2UR

В качестве примера возьмем atmega128.Он имеет четыре регистра: TIMER0, TIMER1, TIMER2 и TIMER3, поэтому этот регистр асинхронного состояния используется для управления включением переключателя состояния асинхронного таймера.
AS2 : Бит запрета запуска асинхронного прерывания. Если этот бит равен 1, асинхронный режим включен.
TCUN2UB (асинхронный режим): Запись TCNT2 приведет к установке TCUN2UB. Когда запись завершена, TCUN2UB автоматически очищается. TCUN2UB = 0 означает, что TCNT2 может записать новое значение.
OCR2UB (асинхронный режим): Запись OCR2 приведет к установке OCR2UB.При записи OCR2 OCR2UB автоматически очищается. OCR2UB = 0 означает, что OCR2 может записывать новые значения.
TCR2UB (асинхронный режим): Запись TCCR2 приведет к установке TCR2UB. При записи TCCR2 TCR2UB автоматически очищается. TCR2UB = 0 означает, что TCCR2 может записать новое значение.

3. Порядок выполнения таймера в программе:

Atmel 2549 8-битный микроконтроллер AVR ATmega640 1280 1281 2560 2561 таблица данных — Metrologia

 состояние битов COM2x1: 0 будет иметь эффект при первом сопоставлении после записи битов.Для не-
В режимах ШИМ действие может быть принудительно выполнено с помощью строб-битов FOC2x.
20.7 Временные диаграммы таймера / счетчика
На следующих рисунках показан таймер / счетчик в синхронном режиме, поэтому показаны часы таймера (clkT2).
как сигнал включения часов. В асинхронном режиме clkI / O следует заменить часами генератора таймера / счетчика.
Цифры включают информацию о том, когда установлены флаги прерывания. Рисунок 20-8 на странице 178 содержит временные данные для
основные операции таймера / счетчика.На рисунке показана последовательность счета, близкая к значению MAX во всех режимах, кроме
чем фазовый режим PWM.
ПОРТ
DDR
D Q
D Q
OCnx
PinOCnx
D QWaveformGenerator
COMnx1
COMnx0
0
1
DA
TA
 
BU
S
FOCnx
clkI / O
177ATmega640 / V-1280 / V-1281 / V-2560 / V-2561 / V [ТЕХНИЧЕСКАЯ ИНФОРМАЦИЯ]
2549Q – AVR – 02/2014
Рисунок 20-8. Временная диаграмма таймера / счетчика, без предварительного масштабирования
На рисунке 20-9 показаны те же временные данные, но с включенным предварительным делителем.
Рисунок 20-9. Временная диаграмма таймера / счетчика с предделителем (fclk_I / O / 8)
На рисунке 20-10 показаны настройки OCF2A во всех режимах, кроме режима CTC.Рисунок 20-10. Временная диаграмма таймера / счетчика, настройка OCF2A, с предделителем (fclk_I / O / 8)
clkTn (clkI / O / 1)
ТОВн
clkI / O
TCNTn MAX - 1 МАКС. ВНИЗ + 1
ТОВн
TCNTn MAX - 1 МАКС. ВНИЗ + 1
clkI / O
clkTn (clkI / O / 8)
OCFnx
OCRnx
TCNTn
Значение OCRnx
OCRnx - 1 OCRnx OCRnx + 1 OCRnx + 2
clkI / O
clkTn (clkI / O / 8)
178ATmega640 / V-1280 / V-1281 / V-2560 / V-2561 / V [ТЕХНИЧЕСКАЯ ИНФОРМАЦИЯ]
2549Q – AVR – 02/2014
На рисунке 20-11 показаны настройки OCF2A и очистка TCNT2 в режиме CTC.
Рисунок 20-11. Временная диаграмма таймера / счетчика, сброс таймера в режиме сравнения совпадений, с предварительным делителем (fclk_I / O / 8)
20.8 Асинхронная работа таймера / счетчика2
Когда Таймер / Счетчик 2 работает асинхронно, необходимо принять во внимание некоторые соображения.
• Предупреждение: при переключении между асинхронным и синхронным запуском таймера / счетчика 2 таймер
Регистры TCNT2, OCR2x и TCCR2x могут быть повреждены. Безопасная процедура переключения источника синхронизации:
1. Отключите прерывания таймера / счетчика2, очистив OCIE2x и TOIE2.
2. Выберите источник синхронизации, настроив AS2 соответствующим образом.
3. Запишите новые значения в TCNT2, OCR2x и TCCR2x.4. Чтобы переключиться на асинхронную работу: дождитесь TCN2UB, OCR2xUB и TCR2xUB.
5. Очистите флаги прерывания от таймера / счетчика 2.
6. При необходимости разрешите прерывания.
• Основная тактовая частота процессора должна более чем в четыре раза превышать частоту генератора.
• При записи в один из регистров TCNT2, OCR2x или TCCR2x значение передается во временный
регистрируется и фиксируется после двух положительных фронтов на TOSC1. Пользователь не должен записывать новое значение перед
содержимое временного реестра было передано по назначению.Каждый из пяти упомянутых регистров
имеют свой индивидуальный временный регистр, что означает, например, что запись в TCNT2 не нарушает
Выполняется запись OCR2x. Чтобы обнаружить, что произошла передача в регистр назначения,
Реализован асинхронный регистр статуса - ASSR.
• При входе в режим энергосбережения или шумоподавления АЦП после записи в TCNT2, OCR2x или TCCR2x,
пользователь должен дождаться обновления записанного регистра, если таймер / счетчик2 используется для пробуждения устройства.В противном случае MCU перейдет в спящий режим до того, как изменения вступят в силу. Это особенно важно, если
прерывания Output Compare2 используется для пробуждения устройства, так как функция Output Compare отключена
во время записи в OCR2x или TCNT2. Если цикл записи не завершен, и MCU переходит в спящий режим до того, как
соответствующий бит OCR2xUB возвращается в ноль, устройство никогда не получит прерывание сравнения совпадения, и
MCU не просыпается.
• Если таймер / счетчик 2 используется для вывода устройства из режима энергосбережения или шумоподавления АЦП, меры предосторожности
необходимо выполнить, если пользователь хочет повторно войти в один из этих режимов: Логике прерывания требуется один цикл TOSC1 для
быть сброшенным.Если время между пробуждением и повторным переходом в спящий режим меньше одного цикла TOSC1, прерывание
не произойдет, и устройство не выйдет из спящего режима. Если пользователь сомневается в том, что время до повторного входа
Достаточно режима энергосбережения или шумоподавления АЦП, можно использовать следующий алгоритм, чтобы гарантировать, что один
Цикл TOSC1 истек:
OCFnx
OCRnx
TCNTn
(СТС)
ВЕРШИНА
ВЕРХНИЙ - 1 ВЕРХНИЙ ВНИЗ + 1
clkI / O
clkTn (clkI / O / 8)
179ATmega640 / V-1280 / V-1281 / V-2560 / V-2561 / V [ТЕХНИЧЕСКАЯ ИНФОРМАЦИЯ]
2549Q – AVR – 02/2014
1.Запишите значение в TCCR2x, TCNT2 или OCR2x.
2. Подождите, пока соответствующий флаг обновления занятости в ASSR не станет равным нулю.
3. Войдите в режим энергосбережения или шумоподавления АЦП.
• Когда выбран асинхронный режим работы, всегда работает осциллятор 32,768 кГц для таймера / счетчика 2,
кроме режимов отключения питания и ожидания. После сброса при включении питания или выхода из режима ожидания или выключения питания
В этом режиме пользователь должен помнить о том, что стабилизация этого осциллятора может занять до одной секунды.
Пользователю рекомендуется подождать не менее одной секунды перед использованием таймера / счетчика 2 после включения или пробуждения.
из режима выключения питания или режима ожидания.Содержимое всех регистров таймера / счетчика 2 следует считать потерянным.
после пробуждения из режима выключения питания или режима ожидания из-за нестабильного тактового сигнала при запуске, независимо от того
используется ли осциллятор или на вывод TOSC1 подается тактовый сигнал.
• Описание пробуждения из режима энергосбережения или шумоподавления АЦП, когда таймер работает.
асинхронно: при выполнении условия прерывания процесс пробуждения запускается в следующем цикле:
часы таймера, то есть таймер всегда опережает по крайней мере на один, прежде чем процессор сможет прочитать счетчик
стоимость.После пробуждения MCU останавливается на четыре цикла, выполняет процедуру прерывания и возобновляет работу.
выполнение из инструкции, следующей за SLEEP.
• Чтение регистра TCNT2 вскоре после выхода из режима энергосбережения может дать неверный результат. С
TCNT2 синхронизируется по асинхронным часам TOSC, чтение TCNT2 должно выполняться через регистр
синхронизируется с внутренним тактовым доменом ввода-вывода. Синхронизация происходит для каждого нарастающего фронта TOSC1. Когда
просыпаясь из режима энергосбережения, и часы ввода-вывода (clkI / O) снова становятся активными, TCNT2 будет читать как
предыдущее значение (до перехода в спящий режим) до следующего нарастающего фронта TOSC1.Фаза часов TOSC после
пробуждение из режима энергосбережения по сути непредсказуемо, так как зависит от времени пробуждения. В
Таким образом, рекомендуемая процедура чтения TCNT2 выглядит следующим образом:
1. Запишите любое значение в любой из регистров OCR2x или TCCR2x.
2. Подождите, пока не будет сброшен соответствующий флаг обновления занятости.
3. Прочтите TCNT2.
• Во время асинхронной работы синхронизация флагов прерывания для асинхронного таймера занимает
три цикла процессора плюс один цикл таймера. Таким образом, таймер переводится как минимум на одно значение перед
процессор может считывать значение таймера, вызывающее установку флага прерывания.Вывод сравнения выходов
изменяется на часах таймера и не синхронизируется с часами процессора.
20.9 Предделитель таймера / счетчика
Рисунок 20-12. Предделитель для таймера / счетчика 2
10-БИТНЫЙ ПРЕСКАЛЕР T / C
ТАЙМЕР / СЧЕТЧИК2 ИСТОЧНИК ЧАСОВ
clkI / O clkT2S
TOSC1
AS2
CS20
CS21
CS22
cl
k T
2S
/ 8
cl
k T
2S
/ 6
4
cl
k T
2S
/ 1
28 год
cl
k T
2S
/ 1
02
4
cl
k T
2S
/ 2
56
cl
k T
2S
/ 3
2
0ПСРАЗИ
Прозрачный
clkT2
180ATmega640 / V-1280 / V-1281 / V-2560 / V-2561 / V [ТЕХНИЧЕСКАЯ ИНФОРМАЦИЯ]
2549Q – AVR – 02/2014
Источник часов для таймера / счетчика 2 называется clk. clk по умолчанию подключен к часам ввода-вывода основной системы
T2S T2S
clkIO.Установив бит AS2 в ASSR, таймер / счетчик2 синхронизируется асинхронно с вывода TOSC1. Этот
позволяет использовать таймер / счетчик2 в качестве счетчика реального времени (RTC). Когда AS2 

microchip-pic-avr-examples / atmega128-rtc-using-asynchronous-timer-mplab: Этот репозиторий описывает, как реализовать счетчик реального времени (RTC) на микроконтроллерах с модулем RTC. Для реализации требуется только один дискретный компонент — часовой кристалл 32,768 кГц.

GitHub — microchip-pic-avr-examples / atmega128-rtc-using-asynchronous-timer-mplab: в этом репозитории описывается, как реализовать счетчик реального времени (RTC) на микроконтроллерах с модулем RTC.Для реализации требуется только один дискретный компонент — часовой кристалл 32,768 кГц.

Файлы

Постоянная ссылка Не удалось загрузить последнюю информацию о фиксации.

Тип

Имя

Последнее сообщение фиксации

Время фиксации

В этом репозитории описывается, как реализовать счетчик реального времени (RTC) на микроконтроллерах AVR с модулем RTC.Для реализации требуется только один дискретный компонент — часовой кристалл 32,768 кГц. Приложение имеет очень низкое энергопотребление, поскольку микроконтроллер большую часть времени работает в режиме энергосбережения. В режиме энергосбережения контроллер AVR находится в спящем режиме, и работает только таймер. Таймер синхронизируется внешним кристаллом. При каждом переполнении таймера считается время, дата, месяц и год. Эта реализация RTC написана для ATmega128 и может быть легко перенесена на другие AVR с помощью модуля RTC.Используемое оборудование для тестирования указано ниже.
Преимущества программной реализации RTC по сравнению с внешним аппаратным RTC очевидны:

  • Меньшая стоимость
  • Несколько внешних компонентов
  • Меньшая мощность
  • Больше гибкости


Этот пример основан на примечании к применению AVR134 — Часы реального времени (RTC) с использованием асинхронного таймера

Связанная документация

Используемое программное обеспечение

Используемое оборудование

Настройка

  1. Подключите 32.Кварцевый генератор 768 кГц непосредственно между выводами TOSC1 и TOSC2. Подробную информацию о подключениях кристалла см. В техническом описании устройства. Для устройств, не установленных на плате, можно использовать Starter Kit STK600 от Microchip, в нем также есть гнездо для подключения кристалла.

Эксплуатация

  1. Подключите плату к ПК.

  2. Загрузите zip-файл или клонируйте пример, чтобы получить исходный код.

  3. Откройте проект в MPLAB X IDE.

  4. Соберите решение и запрограммируйте устройство.

Заключение

Теперь вы видели пример того, как реализовать счетчик реального времени на контроллерах AVR, которые имеют модуль RTC.

Около

В этом репозитории описывается, как реализовать счетчик реального времени (RTC) на микроконтроллерах с модулем RTC. Для реализации требуется только один дискретный компонент — 32.Часовой кристалл 768 кГц.

ресурсов

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

Установка таймера avr

AVR130: Настройка и использование функций таймеров AVR ® • Описание событий таймера / счетчика • Уведомление о событии таймера / счетчика • Параметры часов • Пример кода для Timer0 — Прерывание переполнения • Пример кода для Timer1 — Прерывание захвата входа • Пример кода для Timer2 — Асинхронная работа — сравнение прерывания совпадения • Основы ШИМ • Пример кода для работы ШИМ таймера2 8-битный микроконтроллер RISC Примечание к приложению Введение В этом примечании к приложению описывается, как использовать различные таймеры AVR.В качестве примера используется AT90S8535. Цель этого документа — дать общий обзор таймеров , показать их возможности и объяснить, как их настроить. Примеры кода прояснят это и могут быть использованы в качестве руководства для других приложений. Начиная с общего обзора таймеров , несколько примеров покажут, как работают таймеры и как они настроены. Опытные пользователи могут начать непосредственно с раздела «Настройка таймеров» на странице 7.Последний раздел — это краткое описание режима ШИМ. Дополнительную информацию можно найти в таблицах данных и в примечаниях к применению, где используются таймеры . Общее описание В принципе, таймер — это простой счетчик. Его преимущество состоит в том, что входные часы и работа таймера не зависят от выполнения программы. Детерминированные часы позволяют измерять время путем подсчета прошедших циклов и учитывать входную частоту таймера .Почему разные таймеры Ответ довольно прост: иметь правильный таймер для правильного приложения и иметь достаточно ресурсов для этого. Как правило, 90S- и megaAVR имеют два 8-битных и один 16-битный таймер . Таймер с разрешением 16 бит, безусловно, более гибок в использовании, чем таймер с разрешением 8 бит. Однако поговорка «чем больше, тем лучше» не всегда применима к миру микроконтроллеров. Для многих приложений достаточно 8-битного разрешения.Использование более высокого разрешения означает большие накладные расходы на программу, которые требуют затрат времени на обработку, и их следует избегать в коде, оптимизированном по скорости. Это также означает более высокую стоимость устройства. Rev. 2505A – AVR – 02/02 1

Ateml AVR Последовательная передача данных микроконтроллера (USART)

Микроконтроллер — это устройство управления, которое содержит ряд необходимых периферийных устройств, таких как RAM, ТАЙМЕРЫ ПЗУ, последовательный обмен данными и т. Д. для выполнения некоторых заранее определенных задач. В настоящее время микроконтроллеры усовершенствованного типа используются в широком спектре приложений в зависимости от их возможностей и возможностей для выполнения некоторых желаемых задач, и эти контроллеры включают микроконтроллеры 8051, AVR и PIC.В этой статье мы узнаем о продвинутом микроконтроллере семейства AVR и его программировании.


Микроконтроллер AVR

AVR — это тип управляющего устройства, произведенного корпорацией Atmel в 1996 году. AVR не означает ничего, это просто название. Микроконтроллеры AVR состоят из архитектуры Гарварда, поэтому устройство работает очень быстро с уменьшенным количеством инструкций машинного уровня (RISC). По сравнению с другими микроконтроллерами микроконтроллеры AVR имеют особые особенности, такие как 6-спящие режимы, встроенный АЦП, внутренний генератор и последовательный обмен данными и т. Д.Микроконтроллеры AVR доступны в различных конфигурациях: 8-битные, 16-битные и 32-битные для выполнения различных операций.

Микроконтроллер AVR

Последовательная передача данных USART в микроконтроллере AVR

USART означает универсальный синхронный и асинхронный приемник и передатчик. Это последовательная связь двух протоколов. Этот протокол используется для передачи и приема данных побитно относительно тактовых импульсов по одному проводу. Микроконтроллер AVR имеет два контакта: TXD и RXD, которые специально используются для последовательной передачи и приема данных.Любой микроконтроллер AVR состоит из протокола USART со своими особенностями.


Коммуникация USART в микроконтроллере AVR

Основные характеристики AVR USART

  • Протокол USART поддерживает полнодуплексный протокол.
  • Он генерирует скорость передачи с высоким разрешением.
  • Он поддерживает передачу последовательных битов данных от 5 до 9 и состоит из двух стоповых битов.

Конфигурация контактов USART

USART AVR состоит из трех контактов:


  • RXD: контакт приемника USART (контакт 2 ATMega8; контакт 14 ATMega16 / 32)
  • TXD: контакт передатчика USART (контакт 3 ATMega8 ; ATMega16 / 32 Pin 15)
  • XCK: Контакт синхронизации USART (ATMega8 PIN 6; ATMega16 / 32 Pin 1)

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

Микроконтроллер AVR протокола USART работает в трех режимах:

  • Асинхронный нормальный режим
  • Асинхронный двухскоростной режим
  • Синхронный режим
Режимы работы

Асинхронный нормальный режим

В этом режиме связи данные передаются и принимаются побитно без тактовых импульсов с заранее определенной скоростью передачи устанавливается регистром УБРиР.

Асинхронный режим двойной скорости

В этом режиме связи данные, передаваемые с удвоенной скоростью передачи, задаются регистром UBBR и устанавливают биты U2X в регистре UCSRA. Это высокоскоростной режим синхронной связи для быстрой передачи и приема данных. Эта система используется там, где требуются точные настройки скорости передачи данных и системные часы.

Синхронный режим

В этой системе для передачи и приема данных в отношении тактового импульса установлено значение UMSEL = 1 в регистре UCSRC.

Конфигурация USART в микроконтроллере AVR

USART может быть настроен с использованием пяти регистров, таких как три управляющих регистра, один регистр данных и регистр выбора скорости передачи, например UDR, UCSRA, UCSRB, UCSRC и UBRR.

7 шагов для составления программы

Step1: Расчет и установка скорости передачи

Скорость передачи USART / UART устанавливается регистратором UBRR. Этот регистр используется для генерации передачи данных с определенной скоростью.UBRR — это 16-битный регистр. Поскольку AVR — это 8-битный микроконтроллер, и любой размер его регистра — 8-битный. Следовательно, здесь 16-битный регистр UBRR состоит из двух 8-битных регистров, таких как UBRR (H), UBRR (L).

Формула скорости передачи:

BAUD = Fosc / (16 * (UBBR + 1))

Формула регистра UBRR:

UBRR = Fosc / (16 * (BAUD-1) )

Частота микроконтроллера AVR 16MHz = 16000000; Предположим, что скорость передачи составляет 19200 бит / с, тогда

UBRR = 16000000 / (16 * (19200-1))

UBRR = 16000000 / (16 * (19200-1))

UBRR = 51 .099

В конечном итоге найти скорость передачи

BAUD = 16000000 / (16 * (51 + 1))
UBRR = 19230bps

Step2: Выбор режима данных

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

Выбор режима данных

Шаг 3: Выбор режима передачи данных

Синхронный и асинхронный режимы выбираются битом UMSEL регистра состояния управления.Если мы даем UMSEL = 0, то USART работает в асинхронном режиме, в противном случае работает в синхронном режиме.

Выбор режима передачи данных

Step4: Стартовый бит и стоповый бит

Стартовый бит и стоповые биты служат для последовательной отправки и получения данных. Обычно любая слава данных состоит из одного бита статистики и одного стопового бита, но микроконтроллер AVR имеет один стартовый бит и два стоповых бита для обработки данных. Дополнительный стоповый бит может быть полезен для добавления небольшого дополнительного времени обработки приема.Это особенно полезно при высокой скорости передачи данных, когда скорость передачи данных очень высока, поэтому мы не получаем правильные данные. Таким образом, мы можем увеличить время обработки, используя два стоповых бита для получения правильных данных.

Стартовый бит и стоповый бит

Количество стоповых битов выбирается битом USBS UCSRC — регистра состояния управления. USBS = 0 для одного стопового бита и USBS = 1 для двух стоповых битов.

Шаг 5: Установите размер символа

Как и в случае с базовыми микроконтроллерами, отправляющими и принимающими байт данных (8 бит) за раз, будь то микроконтроллер AVR, мы можем выбрать формат кадра данных для каждого кадра битом UCSZ регистра UCSRC.

Формат кадра данных

Шаг 6: Сохранение полученных данных

Микроконтроллер AVR состоит из буферного регистра UDR для передачи и приема данных. UDR — это 16-битный буферный регистр, в котором 8 бит используются для приема (RXB) данных, а другие биты используются для передачи данных (TXB). Передаваемый буферный регистр данных будет местом назначения в регистр UDR для записанных данных в его местоположении. Регистр буфера получающих данных будет возвращать содержимое регистра UDR.

Step7: Включение передатчика и приемника

Переданные и полученные данные будут разрешены выводами RXC и TXC микроконтроллера, которые устанавливаются регистром UCSRA микроконтроллера. Этот бит флага, установленный микроконтроллером для данных, завершается приемом и передачей (TXC = RXC = 1).

Удвоение скорости передачи данных

Мы можем удвоить скорость передачи данных USART микроконтроллера AVR с 16 бит до 8 бит с помощью U2X –бита в регистре UCSRA.Этот бит влияет только на асинхронную работу. Если мы можем установить этот бит (U2X = 1), он снизит скорость передачи с 16 бит до 8 бит, эффективно удвоив скорость передачи для синхронной связи.

Это расширенная функция микроконтроллера AVR для быстрой обработки данных.

Программа USART

Для каждого микроконтроллера заранее определена конкретная IDE, и на основе этой IDE микроконтроллеры программируются со встроенным языком C или ассемблером.Программирование микроконтроллера AVR разработано студией AVR. Кроме того, если вам нужна дополнительная информация о шагах по созданию проектов на основе микроконтроллеров или подробная информация по этой теме, вы можете связаться с нами, оставив комментарий ниже.

ПРИМЕЧАНИЕ ПО ПРИМЕНЕНИЮ. Atmel AVR134: часы реального времени (RTC) с использованием асинхронного таймера. 8-битный микроконтроллер Atmel AVR. Вступление.

РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ EDBG.Описание

РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ EDBG Описание Atmel Embedded Debugger (EDBG) — это встроенный отладчик для интеграции в комплекты разработки с микроконтроллерами Atmel. Помимо поддержки программирования и отладки через Atmel

Подробнее

Оценочный комплект AT88CK490

Оценочный комплект AT88CK490 USB-ключ для криптоаутентификации HARDWARE РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ Atmel AT88CK490 Оценочный комплект для криптоаутентификации Введение Комплект для оценки криптоаутентификации Atmel AT88CK490 —

Подробнее

AN3252 Указание по применению

Замечания по применению Создание генератора волн с использованием STM8L-DISCOVERY Обзор приложения В этих замечаниях по применению дается краткое описание того, как использовать STM8L-DISCOVERY в качестве основного генератора волн для

. Дополнительная информация

AN974 ПРИМЕЧАНИЕ ПО ПРИМЕНЕНИЮ

AN974 ПРИМЕЧАНИЕ ПО ПРИМЕНЕНИЮ Часы реального времени с функцией сравнения выходных сигналов таймера ST7, разработанное группой по применению MCD 1 ВВЕДЕНИЕ Целью данной заметки является представление того, как использовать функцию сравнения выходных сигналов таймера ST7.Как

Дополнительная информация

AN3265 Примечание по применению

Замечания по применению Обработка аппаратных и программных сбоев с помощью STM8S-DISCOVERY Обзор приложения Это приложение основано на STM8S-DISCOVERY. Он демонстрирует, как использовать сторожевой таймер окна STM8S

. Дополнительная информация

AN2604 Замечания по применению

AN2604 Примечание по применению Калибровка RTC STM32F101xx и STM32F103xx Введение Точность часов реального времени (RTC) является требованием для большинства встроенных приложений, но из-за температуры внешней среды

Дополнительная информация

AN3332 Указание по применению

Примечание по применению Генерация сигналов ШИМ с использованием STM8S-DISCOVERY Обзор приложения В этом руководстве пользователя приложения содержится краткое описание того, как использовать периферийное устройство Таймера 2 (TIM2) для генерации трех

Дополнительная информация

avr-libc:: Управление снижением энергопотребления

Макрос питания

Описание

power_aca_disable ()

Отключить аналоговый компаратор на PortA.

power_aca_enable ()

Включите аналоговый компаратор на PortA.

power_adc_enable ()

Включите модуль аналого-цифрового преобразователя.

power_adc_disable ()

Отключите модуль аналого-цифрового преобразователя.

power_adca_disable ()

Отключить модуль аналого-цифрового преобразователя на PortA

power_adca_enable ()

Включение модуля аналого-цифрового преобразователя на PortA

power_evsys_disable ()

Отключить модуль EVSYS

power_evsys_enable ()

Включить модуль EVSYS

power_hiresc_disable ()

Отключить модуль HIRES на PortC

power_hiresc_enable ()

Включение модуля HIRES на PortC

power_lcd_enable ()

Включите ЖК-модуль.

power_lcd_disable ().

Отключить ЖК-модуль.

power_pga_enable ()

Включите модуль усилителя с программируемым усилением.

power_pga_disable ()

Отключить модуль усилителя с программируемым усилением.

power_pscr_enable ()

Включите модуль контроллера ступени пониженной мощности.

power_pscr_disable ()

Отключить модуль контроллера ступени пониженной мощности.

power_psc0_enable ()

Включите модуль Power Stage Controller 0.

power_psc0_disable ()

Отключите модуль Power Stage Controller 0.

power_psc1_enable ()

Включите модуль Power Stage Controller 1.

power_psc1_disable ()

Отключите модуль Power Stage Controller 1.

power_psc2_enable ()

Включите модуль Power Stage Controller 2.

power_psc2_disable ()

Отключите модуль Power Stage Controller 2.

power_ram0_enable ()

Включить блок SRAM 0.

power_ram0_disable ()

Отключить блок SRAM 0.

power_ram1_enable ()

Включить блок SRAM 1.

power_ram1_disable ()

Отключить блок SRAM 1.

power_ram2_enable ()

Включить блок SRAM 2.

power_ram2_disable ()

Отключить блок SRAM 2.

power_ram3_enable ()

Включить блок SRAM 3.

power_ram3_disable ()

Отключить блок SRAM 3.

power_rtc_disable ()

Отключить модуль RTC

power_rtc_enable ()

Включить модуль RTC

power_spi_enable ()

Включите модуль последовательного периферийного интерфейса.

power_spi_disable ()

Отключить модуль последовательного периферийного интерфейса.

power_spic_disable ()

Отключить модуль SPI на PortC

power_spic_enable ()

Включение модуля SPI на PortC

power_spid_disable ()

Отключить модуль SPI на PortD

power_spid_enable ()

Включение модуля SPI на PortD

power_tc0c_disable ()

Отключить модуль TC0 на PortC

power_tc0c_enable ()

Включение модуля TC0 на PortC

power_tc0d_disable ()

Отключить модуль TC0 на PortD

power_tc0d_enable ()

Включение модуля TC0 на PortD

power_tc0e_disable ()

Отключить модуль TC0 на PortE

power_tc0e_enable ()

Включение модуля TC0 на PortE

power_tc0f_disable ()

Отключить модуль TC0 на PortF

power_tc0f_enable ()

Включение модуля TC0 на PortF

power_tc1c_disable ()

Отключить модуль TC1 на PortC

power_tc1c_enable ()

Включение модуля TC1 на PortC

power_twic_disable ()

Отключить модуль двухпроводного интерфейса на PortC

power_twic_enable ()

Включение модуля двухпроводного интерфейса на PortC

power_twie_disable ()

Отключить модуль двухпроводного интерфейса на PortE

power_twie_enable ()

Включение модуля двухпроводного интерфейса на PortE

power_timer0_enable ()

Включите модуль таймера 0.

power_timer0_disable ()

Отключить модуль таймера 0.

power_timer1_enable ()

Включите модуль Timer 1.

power_timer1_disable ()

Отключить модуль Таймера 1.

power_timer2_enable ()

Включите модуль Timer 2.

power_timer2_disable ()

Отключить модуль Timer 2.

power_timer3_enable ()

Включите модуль Timer 3.

power_timer3_disable ()

Отключить модуль Timer 3.

power_timer4_enable ()

Включите модуль Timer 4.

power_timer4_disable ()

Отключить модуль Timer 4.

power_timer5_enable ()

Включите модуль Timer 5.

power_timer5_disable ()

Отключить модуль Timer 5.

power_twi_enable ()

Включите модуль двухпроводного интерфейса.

power_twi_disable ()

Отключить модуль двухпроводного интерфейса.

power_usart_enable ()

Включите модуль USART.

power_usart_disable ()

Отключить модуль USART.

power_usart0_enable ()

Включите модуль USART 0.

power_usart0_disable ()

Отключить модуль USART 0.

power_usart1_enable ()

Включите модуль USART 1.

power_usart1_disable ()

Отключить модуль USART 1.

power_usart2_enable ()

Включите модуль USART 2.

power_usart2_disable ()

Отключить модуль USART 2.

power_usart3_enable ()

Включите модуль USART 3.

power_usart3_disable ()

Отключить модуль USART 3.

power_usartc0_disable ()

Отключить модуль USART0 на PortC

power_usartc0_enable ()

Включение модуля USART0 на PortC

power_usartd0_disable ()

Отключить модуль USART0 на PortD

power_usartd0_enable ()

Включение модуля USART0 на PortD

power_usarte0_disable ()

Отключить модуль USART0 на PortE

power_usarte0_enable ()

Включение модуля USART0 на PortE

power_usartf0_disable ()

Отключить модуль USART0 на PortF

power_usartf0_enable ()

Включение модуля USART0 на PortF

power_usb_enable ()

Включите модуль USB.

power_usb_disable ()

Отключите модуль USB.

alexxlab

Добавить комментарий

Ваш адрес email не будет опубликован.