AVR таймеры принцип работы

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

На что способны таймеры?

Отмерять временной интервал с разной скоростью
Подсчитывать внешние импульсы (режим счетчика в микроконтроллере)
Тикать от внешнего кварца на частоту 32768гц
Генерировать несколько разнообразных ШИМ сигналов
Формировать прерывания (по полудесятку разных событий) и устанавливать флаги

Различные таймеры обладают разной функциональностью и имеют разную разрядность. Смотри подробней в AVR Technical Library.

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

Управлять любым портом МК X можно тремя регистрами: DDRx; PORTx; PINx.

Таймер-Счетчик (сокращение Т/С) может подсчитывать, либо тактовые импульсы от встроенного генератора, либо импульсы идущие со счетного входа. Посмотрите внимательно на распиновку выводов микроконтроллера ATmega16, видите там пины T1 и T0?

микроконтроллер ATmega16

Это счетные входы Timer 0 и Timer 1. При соответствующей настройке таймер-счетчик будет подсчитывать либо перепад с 0-1, либо задний перепад с 1-0 фронта импульсов, идущих на эти входы. Только нужно помнить о том, чтобы частота входящих импульсов не должна быть выше тактовой частоты МК, иначе он не сможет правильно посчитать счетные импульсы.

Кроме того, Т/С2 может работать в асинхронном режиме. То есть Т/С считает не тактовые импульсы следующие на свои выводы, а импульсы своего собственного внутреннего генератора, работающего от отдельного кварца. Для этого у Т/С2 имеются входы TOSC1 и TOSC2, на которые при необходимости подключается кварцевый резонатор.

Когда таймер считает импульсы, то в случае необходимости их можно пропустить через предделитель. Т.е еще до момента попадания в счетный регистр частота импульсов будет делиться с заданным коэффициентом: 8, 32, 64, 128, 256, 1024. Так что если подключить к Т/С2 часовой кварц, да пропустить через предделитель на 128, то таймер будет тикать со скоростью один тик в секунду. Для сброса предделителей необходимо записать бит PSR10 в регистр SFIOR. Бит PSR10 будет сброшен автоматически на следующем такте.

При необходимости поделенные импульсы накапливается в счетном регистре TCNTх, где х номер таймера. он может быть как восьмиразрядным, так и шестнадцати разрядным, в последнем случае он состоит из двух регистров TCNTxL и TCNTxH — младший и старший байты соответственно.

Причем тут есть одна особенность, если в 8 разрядный регистр следует отправить число, то это просто: OUT TCNT0,Rx, а вот с двухбайтными числами процесс записи идет так. Запись в старший регистр (TCNTxH) осуществляется вначале в служебный регистр TEMP. Т.о записываем старший байт в регистр TEMP (TCNTxH), а затем записываем младший байт. В этот момент, в реальный TCNTxH, заносится ранее записанные нами данные. То есть оба байта, младший и старший, записываются параллельно! В програмном коде можно записать так:

запись двухбайтного числа

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

Программатор AVR

Прошивка микроконтроллера - это запись в его постоянную память заданной программы, которая представляет собой код в шеснадцатеричной системе счисления (файл с расширением hex). Прошивка происходит с помощью специального устройства - программатора. Они отличаются по способу подключения к персональному компьютеру, например через USB, LTP,COM интерфейсы.

Осциллограф на микроконтроллере AVR

Основой этой схемы является микроконтроллер AVR ATmega32. ЖК дисплей с разрешением 128 х 64 точек. Схема осциллографа на микроконтроллере предельно проста. Но есть один существенный минус - это достаточно низкая частота измеряемого сигнала, всего лишь 5 кГц.