Логотип

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

Программирование микроконтроллеров. Урок 19
Работа таймера/счетчика Т2 в асинхронном режиме.

Урок 19 (Работа таймера/счетчика Т2 в асинхронном режиме.)

На прошлом занятии мы с вами подключили энкодер и отображали на дисплее Nokia 5110 разную информацию. Сегодня мы подключим к нашему МК часовой кварц и сделаем электронные часы. А для этого нам надо перевести работу счетчика/таймера Т2 в асинхронный режим.

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

Про работу счетчика Т2 в асинхронном режиме я надеюсь вы уже прочитали. Евстифеев А.В. «Микроконтроллеры AVR семейства Tiny и Mega фирмы Atmel» 2008г. Страницы 276…279. А значит знаете, что для переключения таймера/счетчика в этот режим имеется специальный регистр ASSR. Помимо его, таймер/счетчик Т2 использует регистры:
TCCR2 – регистр управления;
TCNT2 – счетный регистр;
OCR2 – регистр сравнения.
Мы пока не будем касаться работы этого счетчика в режиме ШИМ или описывать его работу с регистром сравнения. Сегодня у нас только асинхронный режим.

Но все же перед тем как мы начнем говорить о работе Т2 в этом режиме я бы хотел напомнить формат регистра управления TCCR2.
7 разряд FOC2 – принудительное изменение состояние вывода OC2 в режимах работы Normal и CTC.
6, 3 разряды WGM20, WGM21 – режим работы таймера/счетчика (нормальный, ШИМ с точной фазой, сброс при совпадении с регистром OCR2, быстродействующий ШИМ). Таблицу режимов смотрим в даташите.
5, 4 разряды COM21, COM20 – Режим работы блока сравнения. Работает вместе с FOC2 и определяет поведение вывода OC2.
2, 1, 0 разряды CS22, CS21, CS20 – управление тактовым сигналом.

Асинхронный режим отличается от других тем, что его тактовый сигнал не является производным от сигнала генератора микроконтроллера, а поступает от внешнего устройства, кварцевого резонатора или схемы тактирования. Частота работы Т2 в асинхронном режиме может варьироваться от 0 до 256 кГц, но лучше всего таймер/счетчик работает на частоте часового кварца 32768 Гц. Одним словом, этот режим предназначен для того, чтобы у нас была возможность организовать работу таймера/счетчика Т2 в качестве часов реального времени.

Для переключения работы Т2 в асинхронный режим необходимо проделать определенные манипуляции с регистром ASSR который имеет следующий формат:
3 разряд AS2 – Переключения режима работы. (1) – асинхронный режим.
2 разряд TCN2UB – флаг состояния обновления счетного регистра. Он необходим при синхронизации работы таймера/счетчика с микроконтроллером и указывает на то, что новые данные хранящиеся во временном регистре были перенесены в счетный регистр TCNT2.
1 разряд OSR2UB – флаг состояния обновления регистра OCR2. Работает также, как и TCN2UB, но указывает на обновление регистра сравнения.
0 разряд TCR2UB – флаг состояния обновления регистра TCCR2. Указывает на обновление регистра управления.
Флаги TCN2UB, OSR2UB, TCR2UB нужны для правильной организации передачи данных от быстродействующего устройства, в данном случае это МК, к медленному устройству - таймеру/счетчику.

Перед переключением счетчика желательно запретить все прерывания, а манипуляции по переключению Т2 рекомендуется проводить в следующей последовательности.

// Перевод в асинхронный режим работы Т2
ASSR |= (1<<AS2); //переключаем в асинхронный режим работы счетчик Т2
TCNT2 = 0x00; 	  //устанавливаем новые значения в счетный регистр таймера 2
OCR2 = 0x00;	  //устанавливаем новые значения в регистр сравнения
TCCR2 = 0x07;	  //конфигурируем регистр управления, ставим делитель тактовых импульсов, например на /1024 
while (ASSR & (1<<TCN2UB));	// ждем сброс флага TCN2UB 
while (ASSR & (1<<OSR2UB));	// ждем сброс флага OSR2UB 
while (ASSR & (1<<TCR2UB));	// ждем сброс флага TCR2UB 

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

Схема подключения кварцевого резонатора к МК

Схема подключения кварцевого резонатора к МК

Питание схемы можно использовать как 3.3V, так и 5V, если позволяет дисплей. Кварцевый резонатор необходимо установить, как можно ближе к выводам МК. У меня это выгладит вот так.

Подключение кварцевого резонатора к МК

Подключение кварцевого резонатора к МК

Чтобы быстро проверить правильность работы таймера счетчика Т2 пишем вот такую тестовую программу.

    #include <mega8.h>
    #include "lib_macro.c"  				 //Общие макросы
//Процедуры и функции
    #include "Lib_Nokia_5110_ATmega.c"  		 //Подпрограммы работы с дисплеем
    interrupt [TIM2_OVF] void tim2_ovf_interrapt (void); //Прерывание по TIM2_OVF
void main(void)
{
//настройки
    // Таймер 2. Асинхронный режим работы
    TIMSK = 0x00;               	//запрещаем прирывания от таймеров
    ASSR |= (1<<AS2);             	//переключаем счетчик в асинхронный режим
    TCNT2=0x00;                 	//обнуляем счетный регистр
    TCCR2 = 0x04; 			//Режим работы "normal", делитель на 64.
    while (ASSR & (1<<TCN2UB));    	//обнуление TCN2UB регистра ASSR
    while (ASSR & (1<<TCR2UB));    	//обнуление TCR2UB регистра ASSR
    TIMSK |= (1<<TOIE2);        	//разрешаем прерываине по переполнению Т2
    lcd_init();                 	//инициализация дисплея
    SEI;                        	//включаем прерывание
while (1) {}
} //END void main(void)
    //Прерывание по TIM2_OVF переполнение таймера счетчика Т2
    interrupt [TIM2_OVF] void tim2_ovf_interrapt (void){
        static char f_half_sec = FALS;  //флаг полусекунды
        if (f_half_sec){
            LED_ON;
            f_half_sec = FALS;
        }
        else {
            LED_OFF;
            f_half_sec = TRUE;
        }
    }

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

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

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

Программа не сложная, но процесс переключения режима работы заставит слегка напрячься. Более того, категорически не советую делать что-то громоздкое в прерывании. Советую даже отсчет полусекунд делать в основном блоке. И да. Прилагаемая к уроку программа только в качестве примера отображения цифр и организации прерывания.

Еще я не упомянул о том, как у нас получаются секунды. Уверен, что вы и так уже все посчитали, но если кто еще не понял, то дело обстоит так. Делим частоту кварца (32768Гц) на величину делителя тактовых импульсов Т2 (в моем случае это 64) и затем делим полученное на 256 (количество состояний регистра TCNT2 с учетом нуля). Получаем ответ 2. Т.е. два раза в секунду у нас будет срабатывать прерывание по переполнению таймера/счетчика Т2. Если же делитель поставить на 124, то прерывания будут соответственно только один раз в секунду.

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

На следующим уроке нам понадобится переменный резистор на 10кОм, и постоянный такого же номинала. Мы с вами поговорим об АЦП и сделаем вольтметр. Поэтому на сон грядущий читаем -

   Евстифеев А.В. «Микроконтроллеры AVR семейства Tiny и Mega фирмы Atmel» 2008г. Страницы 310…323.


А на сегодня всё. Удачи.


07.09.19



Если вдруг найдете в статье неточности или заблуждения. Напишите мне об этом. Я подправлю.



Приложение:
Файлы к уроку 19