Аппаратные хитрости использования PIC-контроллеров

Дежурный режим


Основное преимущество PIC-контроллеров заключается в их низком потреблении при высоком быстродействии, что очень полезно в приборах с автономным питанием. Еще большей экономии энергии можно достичь при использовании дежурного режима. При этом основное время микроконтроллер находится в режиме sleep, при котором приостанавливается выполнение программы, выключается тактовый генератор, но может продолжать свою работу Watch Dog таймер и некоторые периферийные устройства. Выход из этого режима может производиться по-разному, в зависимости от типа контроллера.

Например, можно запрограммировать Watch Dog таймер («собаку») на определенный период, при срабатывании которого контроллер «проснется», опросит свои входы и, если нужно, перейдет к процедуре обработки. Если никаких действий совершать не нужно, он выполнит команду SLEEP и будет находиться в этом состоянии до следующего срабатывания таймера. При выполнении процедуры обработки следует периодически сбрасывать «собаку» для предотвращения те повторного срабатывания. Используя подобную методику, можно "строить приборы, не требующие выключателя питания, различные сигнализирующие и контрольные приборы.

Очень часто прибор должен быть выполнен в виде пульта (к примеру - пульт ДУ телевизора), который большую часть времени находится в выключенном состоянии, а при нажатии кнопок управления производить соответствующие действия. Реализовать режим «пульт» можно несколькими способами, один из которых описан выше. Период «собаки» в этом случае следует выбирать в диапазоне 0.05-0.1 секунды.

Другие способы не основаны на использовании «собаки», т.е. контролер не просыпается для опроса кнопок, а остается спать до их нажатия.

В PIC-контроллерах старого семейства (16С5х), для выхода из режима sleep нужно использовать специальную схемотехнику и программирование. При этом обеспечивается подача сигнала «сброс» на контроллер при нажатии любой кнопки (рис. 1).


В дежурном режиме выходы RB2 и RB3 находятся в состоянии «0», конденсатор С заряжен до уровня «1».
При нажатии любой кнопки конденсатор быстро разряжается через резистор R2 или R3, что приводит к подаче сигнала «сброс». При сбросе выходы переходят в высокоимпедансное состояние, и разряд конденсатора через R2 (R3) прекращается. Время разряда должно быть больше требуемого для сброса контроллера (около 18 мс), но меньше минимальной длительности нажатия на кнопку (примерно 50-100мс). После снятия сигнала «сброс» (заряде конденсатора через R1) контроллер начинает выполнение программы. При этом на выходы RB2 и RB3 «0», на короткое (около 10 мкс) время, за которое конденсатор не успевает разрядиться, а с входов RB0 и RB1 считывается состояние кнопок. Аналогично можно подключить матрицу клавиатуры, рис. 2.

Новые PIC-контроллеры имеют возможность генерировать прерывание, выводящее из спящего режима при изменении состояния определенных входов, обычно RB4-RB7. При этом возможно как применение нескольких кнопок, так и матрицы клавиатуры (рис.3). Выводы RB4-RB7 запрограммированы на ввод, с включенными внутренними подтягивающими резисторами. Перед входом в режим sleep включается генерация прерываний по изменению состояния (в случае матрицы - выходы RB0-RB3 устанавливаются в «0»).
При нажатии любой кнопки вызывается прерывание, выводящее контроллер из режима sleep, после чего он может приступить к процедурам подавления дребезга контактов, определения нажатой кнопки (сканирования матрицы) и выполнению соответствующих нажатой кнопке действий. Работа «прерывания по изменению» имеет свои некоторые особенности, в связи с которыми его следует применять только для выхода из спящего режима, а при нормальной работе оно должно быть выключено во избежание ложных срабатываний.

Содержание раздела