II
"РЛ" - НАЧИНАЮЩИМ
Ц
.V
Роман Абраш
г. Новочеркасск
E-mail: arv@radioliga.com
j%________ Продолжение. Начало в №1-7/2007
Глава 16. Экономия и надежность
В этой небольшой, но важной главе мы познакомимся со
средствами, при помощи которых можно обеспечить повы-
шенную надежность работы устройств с микроконтроллера-
ми, а также добиться их максимальной экономичности.
Под надежностью любой системы, работающей под уп-
равлением программного устройства, будь то супер-ЭВМ или
простейший микроконтроллер, в первую очередь подразу-
мевается гарантированное отсутствие “зависаний” програм-
мы. Дело в том, что микроконтроллер может зависнуть не
только из-за ошибки в программе, которую теоретически
всегда можно найти и исправить, но и из-за различных не-
предсказуемых событий: импульсной помехи по цепи пита-
ния, сбоя во внешнем ОЗУ и т.п. Любое из таких воздей-
ствий может привести к тому, что управляющее устройство
микроконтроллера получит искаженный код команды или ад-
рес данных, в результате чего выполнение программы мо-
жет пойти по пути, абсолютно непредусмотренному програм-
мистом со всеми вытекающими последствиями. Например,
если в результате сбоя счетчик команд PC увеличится не на
2 после выполнения команды MOV A, #73h, а на 1, то следу-
ющей командой будет выполнена совсем не та команда, что
было предусмотрено, а команда с кодом 73h, т.е. команда
JMP ©A+DPTR, что, совершенно очевидно, приведет к пе-
реходу к заранее неизвестному адресу! Как себя поведет про-
грамма в этом случае - совершенно неизвестно, весьма ве-
роятно, что она попадет в бесконечный цикл, т.е. “зависнет”,
перестав выполнять свои функции и реагировать на внешние
воздействия.
Для защиты от подобного рода неприятностей существу-
ет только один более-менее надежный способ: периодичес-
ки осуществлять принудительный сброс микроконтроллера.
Делать это можно при помощи какого-либо внешнего муль-
тивибратора, но было бы лучше, конечно, если бы такой муль-
тивибратор был встроен прямо в микроконтроллер.
.. И он
там есть! В большинстве современных микроконтроллеров,
и AT89S8252 не исключение, имеется специальное устрой-
ство, называемое
Watch-Dog Timer
(таймер-сторожевой пес,
принято сокращать это словосочетание до
WDT),
которое как
раз и может производить принудительный сброс микроконт-
роллера, если последний зависнет. Как же WDTузнает отом,
что программа зависла? А просто: в программе предусмат-
ривается периодическое обращение к этому самому псу, ко-
торое как бы сообщает ему, что все нормально. Если про-
грамма зависла, то такое обращение не происходит, по край-
ней мере, нарушается его периодичность, на что сразу и сре-
агирует наш сторож, произведя сброс контроллера.
Небольшое отступление. Существуют специальные
микросхемы, выполняющие функцию WDT, например,
ТС 1232 фирмы Microchip или МАХ705 фирмы Dallas
Semiconductor. Во многих случаях применение этих микро-
схем предпочтительнее встроенного WDT, т.к. во-первых, эти
микросхемы помимо сторожевых функций выполняют конт-
роль качества напряжения питания и способны сбросить мик-
роконтроллер при недопустимом снижении его уровня, а кро-
ме того, способны производить сброс не только микроконт-
роллера, но и других аппаратных систем устройства. Недо-
статок у этих микросхем только один - требуется минимум 1
вывод микроконтроллера, чтобы информировать WDTо нор-
мальном состоянии программы.
Итак, разобравшись с теорией, можно изучить на прак-
тике все эти возможности. WDT в микроконтроллере
AT89S8252 реализован в виде независимого счетчика, веду-
щего подсчет импульсов от отдельного встроенного RC-re-
нератора. При переполнении этого счетчика формируется
сигнал внутреннего аппаратного сброса (который никак не
отражается на состоянии вывода RST микроконтроллера).
Чтобы при нормальном ходе выполнения программы этого
не происходило, следует производить периодический сброс
этого счетчика специальной командой. Для управления WDT
служит специальный регистр WMCON (см. таблицу 16).
Вы уже знакомы с одним флагом этого регистра (это мно-
гофункциональный регистр, используется для управления
несколькими разными функциями)-DPS, при помощи кото-
рого выбирается один из пары регистров-указателей DPTRO
или DPTR1. Управление же WDT осуществляется при по-
мощи флагов PSO, PS1, PS2, WDTRST и WDTEN. Обратите
внимание, что доступ к отдельным битам этого регистра
невозможен!
После сброса в регистре WMCONустановлен только флаг
WDTRST, остальные сброшены.
Важно! Запись флага WDTRST приводит к сбросу счет-
чика WDT, но чтение этого флага возвращает значение, не
имеющее отношение к работе WDT! При чтении этот флаг
работает как флаг RDY/BSY и используется при работе со
встроенной EEPROM данных.
Флаги PSx определяют интервал времени, через кото-
рый произойдет переполнение WDT (см. таблицу 17).
Так как WDT считает импульсы от RC-генератора,
стабильность частоты которого невелика (ведь это и не
Таблица 16. Регистр WMCON
Разряд
7
6
5
4
3
2
1
0
Флаг
PS2
PS1
PS0
EEMWE
EEMEN
DPS
WDTRST
RDY/BSY
WDTEN
Таблица 17. Управление периодом переполнения WDT
PS2
PS1
PSO
Интервал переполнения WDT, мс
0
0
0
16
0
0
1
32
0
1
0
64
0
1
1
128
1
0
0
256
1
0
1
512
1
1
0
1024
1
1
1
2048
Радиолюбитель - 0 8 /2 0 0 7 [|
27
предыдущая страница 27 Радиолюбитель 2007-08 читать онлайн следующая страница 29 Радиолюбитель 2007-08 читать онлайн Домой Выключить/включить текст