Лекція №7 сторожовий таймер
Сторожовий таймер (Watchdog Timer, WDT) - одне з найбільш корисних вуст-влаштування в складі мікроконтролерів, тому, що він застосовується на практиці майже у всіх розроблюваних додатках. Причому його корисність не завжди очевидна: в нормальному режимі роботи, коли все налаштоване ідеально, він, в общем-то, і зовсім не ну-дружин.
Однак особливістю функціонування МК-систем управління є те, що вони практично завжди працюють в автономному режимі (без участі або контролю з боку людини-оператора). Причому МК-системи часто формують коди керуючих впливів для виконавчих механізмів і помилки, а тим більше неконтрольовані дії можуть коштувати дуже дорого, тому вони повинні бути виключені незалежно від варіантів розвитку подій.
Наприклад, цілком реальними видаються такі ситуації: МК налаштований на обробку деякою сукупності даних, при цьому можливе виникнення їх поєднання, яке не передбачено програмістом, що може привести до зациклення програми. Або на практиці досить поширеним є випадок збою програмного коду при перепадах напруги, що також може привести до непередбачених ситуацій. Найбільш розумним виходом в даних і їм подібних ситуаціях є перезапуск програмного коду (перезапуск контролера), який повинен бути виконаний без участі людини.
Перезапуск контролера - виконання повного скидання системи (переініціалізація шляхом скидання і запуску з нуля).
Ідентифікація аварійного стану (аварійного ходу виконання програми) може бути проведена шляхом оцінки часу виконання сукупності стандартних операцій (основного циклу) МК-системи.
В принципі цю роботу може виконати один зі стандартних таймерів лічильників МК, проте тут є свої особливості. По-перше стандартні Т / С необхідні для вирішення завдань управління, а крім того, цей пристрій має тактіроваться окремим генератором, для того, щоб мати можливість керувати виходом з різних режимів енергозбереження.
Перераховані вище завдання і вирішує WDT, який скине МК після закінчення деякого терміну, якщо його вчасно не зупинити.
Для запобігання переходу мікроконтролера в режим нескінченного цик-ла, коли на нього неможливо вплинути ззовні (такі ситуації виникають при помилках в програмах користувача) компанія Atmel оснастила всі мікрокон-Троллер базової серії сімейства АVR так званими сторожовими таймерами - WDT.
WDT подклю-чає до автономного RC-генератора з частотою приблизно 1 МГц при пита-ванні 5В (в старих моделях ця частота могла зменшуватися пропорційно зниженню харчування МК, в Mega її стабільність дещо підвищена).
Сторожовий інтервал може приймати одне з 8 значень від 16 до2048 мс за допомогою установки коефіцієнта вбудованого предделителя (управляється спеціальними бітами).
Якщо після закінчення настроюється часу затримки програма пользовате-ля не виконає команду скидання системи, це зробить сторожовий таймер. Після скидання сторожового таймера відлік часу затримки поновлюється. Якщо тре-буется контролювати хід виконання програми, то програміст повинен акти-візувати сторожовий таймер і через регулярні проміжки часу включати в програму команду скидання, яка забезпечує своєчасне скидання перед початком нового відліку часу.
Крім того до функцій WDT відноситься і пробудження системи, що знаходиться в одному з режимів енергозбереження, якщо "пробу-ждающего" подія не настав. На відміну від виходу з "сну" через зовніш-нього подія, при цьому виконані не переривання, а початкова процедура RESET, як при включенні. Відзначимо, що включений WDT споживає струм приблизно 70 мкА.
Для того щоб внаслідок якої-небудь перешкоди WDT не запуститься і, глав-ное, що не виключився випадково, і для запуску і для виключення його перед-бачено досить "наворочена" процедура. Для того щоб запобігти ненавмисному відключення сторожового таймера, необ-ходимо дотримуватися певної процедури, описаної нижче в розділі, по-священному регістру управління WDTCR.
Якщо в якій-небудь простій програмі контроль за допомогою сторожового тай-мера не потрібно, то його можна відключити. За замовчуванням, сторожовий таймер після надходження сигналу скидання по включенню живлення відключається.