СТОРОЖЕВОЙ ТАЙМЕР В МК AVR

February 26, 2011 by admin Комментировать »

Основная функция сторожевого таймера {Watchdog Timer) – защита устройства от сбоев. Благодаря сторожевому таймеру можно прервать выполнение зациклившейся программы или выйти из

Рис. 4.5. Структурная схема сторожевого таймера

других непредвиденных ситуаций, препятствующих ее нормальному выполнению. Структурная схема сторожевого таймера приведена на рис. 4.5.

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

Таблица 4.11. Формат регистра WDTCR

№ разряда

7

6

5

4

3

2

1

0

Имя

WDTOE

WDE

WDP2

WDP1

WDPO

Для включения;выключения сторожевого таймера используют два разряда регистра WDTCR-WDE и WDTOE. Если разряд WDE установлен в 1, сторожевой таймер включен, если сброшен в О – выключен. Непосредственно перед включением таймера рекомендуется также сбросить его командой WDR.

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

Исходя из сказанного, для выключения сторожевого таймера рекомендуем следующий порядок действий:

1) одной командой записать 1 в разряды WDE и WDTOE;

2)  в течении следующих четырех машинных циклов записать О в разряд WDE.

Период наступления тайм-аута сторожевого таймера задается с помощью разрядов WDP2-WDP0 регистра WDTCR согласно табл. 4.12.

Чтобы избежать непреднамеренного сброса микроконтроллера при изменении периода сторожевого таймера, необходимо перед записью разрядов WDP2-\\^P0 запретить работу таймера либо сбросить его (WDR).

Таблица 4.12. Задание периода сторожевого таймера для AT90S8515

 

 

 

Число тактов генератора

Период наступления

WDP2

WDP1

WDPO

тайм-аута (типовое значение)

VCC = 3,0 В

VCC = 5,0 В

0

0

0

16-1024

47 мс

15 мс

0

0

1

32-1024

95 мс

30 мс

0

1

0

64-1024

0,19 с

60 мс

0

1

1

128-1024

0,38 с

0,12 с

1

0

0

256-1024

0,75 с

0,24 с

1

0

1

512-1024

1,5 с

0,49 с

1

1

0

1024-1024

3,0 с

0,97 с

1

1

1

2048-1024

6,0 с

1,9 с

Программирование сторожевого таймера

Подготовить программу для исследования сторожевого таймера. Полагая, что при нажатии на кнопку SWO тайм-аут таймера наступает через 0,49 с, а при нажатии на SW1 – через 1,9 с, выберем из табл. 4.12 (VCC= 5 В) значения загружаемых коэффициентов согласно заданному периоду сторожевого таймера. В обоих случаях до наступления тайм-аута светодиоды должны быть включены, после происходит сброс микроконтроллера, и светодиоды гаснут.

Программа для микроконтроллера приведена ниже. (Внимание! Перед программированием микроконтроллера ATmega8515 в окне STK500 AVR Studio 4 на вкладке Fuses установить флажок S8515C и запрограммировать конфигурационную ячейку.)

Коммутация выводов: SWO – PDO, SW1 – PD1, LED – РВ 10-проводным шлейфом.

Программа 4.6

.•Программа 4.6 для МК АТ9х8515: демонстрация работы ;сторожевого таймера с независимым генератором. ;При нажатии на SWO (PERI0D_1) наступление тайм-аута .•происходит через 0,4 9 с (время включения светодиодов) , ;SW1 (PERI0D_2) – через 1,9 с.

.•Соединения: PDO : PD1-SW0 : SW1, PB-LED (10-проводной шлейф)

.include "8515def.inc" ;файл определений AT90S8515

.-.include "m8515def. inc"   ;файл определений ATmega8515

.def temp = rl6              ;временный регистр

.Выводы порта PD

.equ PERI0D_1 = 0

.equ PERI0D_2 = 1

.org $000

rjmp INIT                .-обработка сброса ;***Инициализация МК

INIT: Idi temp, low (RAMEND) .-установка

out SPL,temp             ; указателя стека

Idi temp, high (RAMEND)  .- на последнюю

out SPH,temp             ; ячейку ОЗУ

clr temp                 .-инициализация порта PD

out DDRD,temp            ; на ввод

Idi temp, 0x03           .-включение подтягивающих

out PORTD,temp               ; резисторов порта PD

ser temp                     ;инициализация порта РВ

out DDRB,temp                ; на вывод

out PORTE,temp               ;выключение светодиодов

Idi temp,$18                 ;выключение

out WDTCR,temp               ; сторожевого

Idi temp,$10                 ; таймера:

out WDTCR,temp               ;WDE=0

WAIT_SWO: sbic PIND,PERI0D_1 ;ожидание нажатия

rjmp WAIT_SW1                ; кнопки PERI0D_1

;***Назначение периода наступления тайм-аута = 0,4 9 с clr temp ;включение

out PORTB,temp               ; светодиодов

Idi temp,$OD ;включение сторожевого таймера, out WDTCR,temp ; период 0,4 9 с WAIT_SW1: sbic PIND,PERI0D_2 ;ожидание нажатия

rjmp WAIT_SWO                ; кнопки PERI0D_2

;***Назначение периода наступления тайм-аута = 1,9 с clr temp   ;включение

out PORTB,temp               ; светодиодов

Idi temp,$OF ;включение сторожевого таймера, out WDTCR,temp ; период 1,9 с rjmp WAIT_SWO

Задания для самостоятельного программирования

1.   Изменить программу 4.1, добавив в нее обработку нажатия кнопки, исключающую влияние дребезга.

Для этого запрограммировать линию порта РВО на вывод для программного ввода событий в таймер. Ввод событий выполнять при условии замыкания кнопки SWx, присоединенной к порту (линию и порт выбрать самостоятельно). Выполняя проверку состояния кнопки SWx, эмулировать сигнал 1 на выводе РВО при замкнутом состоянии О кнопки. Перед загрузкой программы выполнить ее отладку в AVR Studio и, убедившись в правильности работы программы, проверить ее в STK500.

2.   Изменить программу 4.1 так, чтобы при замыкании кнопки START (SW1) состоялся вывод на индикаторы числа зарегистрированных событий.

3.  Подготовить программу по примеру 4.2 для проверки работы таймера;счетчика Т1 в режиме таймера. Время включения светодиодов 1 и 8 с.

4.  Написать программу, которая каждые 50 мс по запросу прерывания от таймера считывает состояние кнопочного регистра SW, при замыкании определяет номер замкнутой кнопки и высвечивает его на линейке светодиодов.

5.  Написать программу для электронного секундомера, предусмотрев вывод секундных значений в младшзто тетраду, десятков секунд – в старшую тетраду светодиодной линейки STK500. Для отсчета времени использовать 16-разрядный таймер Т1, при переполнении которого формируется запрос прерывания для вызова обработчика прерывания, выполняющего накопление таймерных интервалов времени и обновление показаний индикатора.

Оставить комментарий

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