# 16. Таймер и счетчик со сторожевым регистром [support: Устройство таймера](/ttfdHMD3Rrabf2KNMRe74A) ## Источники: [studfile.net](https://studfile.net/preview/2014438/) [Даташит](http://ww1.microchip.com/downloads/en/devicedoc/doc2466.pdf) ## Назначение Cторожевой таймер , который представляет собой аппаратно-реализованную схему контроля над зависанием системы. Это таймер, который периодически сбрасывается контролируемой системой. Если вдруг сброса не произошло за определённый интервал времени после предыдущего сброса данного таймера, то происходит принудительная перезагрузка системы. Это может быть полезно, когда мы ждем от другого устройства данных, потому что они могут и не прийти, или например, когда у нас есть цикл, из которого мы никогда не выходим. и если бы не система WDT, то это было бы зависание системы навечно. После того, как данные приходят - обновляем сброс (таким образом показываем WDT, что все збс, программа будет работать дальше). Сбрасывать WDT нужно регулярно Для каждой микросхемы нужен всего один сторожевой таймер. В любом мик­роконтроллере АVR такой таймер имеется. Любой таймер также может рассматриваться как счетчик. ## Устройство :::spoiler Оригинал на английском The Watchdog Timer is clocked from a separate On-chip Oscillator which runs at 1 MHz. This is the typical value at VCC = 5V. By controlling the Watchdog Timer prescaler, the Watchdog Reset interval can be adjusted. The Watchdog Timer is also **reset** when **it is disabled** and when **a Chip Reset occurs**. Eight different clock cycle periods can be selected to determine the reset period. If the reset period expires without another Watchdog Reset, the ATmega16 resets and executes from the Reset Vector. To prevent unintentional disabling of the Watchdog, a special turn-off sequence must be followed when the Watchdog is disabled. ::: Сторожевой таймер тактируется от отдельного встроенного генератора, работающего на частоте 1 МГц. Это типичное значение при VCC = 5В. Управляя предварительным делителем сторожевого таймера, можно настроить интервал сброса сторожевого таймера.Сторожевой таймер также **сбрасывается** при его **отключении и при сбросе чипа**. Для определения периода сброса можно выбрать восемь различных периодов тактового цикла. Если период сброса истекает без другого сброса сторожевого устройства, ATmega16 сбрасывается и выполняется из вектора сброса. Чтобы предотвратить непреднамеренное отключение сторожевого таймера, необходимо соблюдать специальную последовательность отключения, когда сторожевой таймер отключен. ## Схема крайне похож на предделитель, который используется обычными таймерами [support: Prescaller](/xRRZwK1LR42uuuzX0FBAog) watchdog oscillator - осциллятор - генератор сигналов. Походу именно он отвечает за генерацию тактовой частоты и выдает сигнал, который обрабатывается таймером. Это отдельный тактовый генератор, причем он не очень стабильный, обычные таймеры используют другой. Перед тем, как попасть на вход таймера, этот сигнал проходит схему watchdog prescaler (который делит насчитанную частоту на 16k, 32k, 64k и так далее...) Далее через мультиплексор проверяется, пришла ли нужная частота. Флагами WDP0, WDP1, WDP2 регистра WDTCR мы кодируем то, до какого значения нам считать Если частота нужная, и WDE = 1 (прерывания по watchdog разрешены), то считаем, что таймер отработал и подаем сигнал к mcu reset, что инициализирует сброс ![](https://i.imgur.com/ZVUGV1C.png)