МОДУЛЬ УПРАВЛЕНИЯ КОДОВЫМ ЗАМКОМ
П. РЕДЬКИН, г. Ульяновск
Применение современной элементной базы, в частности микроконтроллеров, позволяет уменьшить массу и габариты электронных устройств, увеличить число выполняемых ими функций. В предлагаемой статье рассказано о модуле кодового замка, выполненном с использованием Р1С-контроллера. Таблицу прошивки можно получить на нашем ftp-сервере по адресу ftp.paguo.ru/pub/zamok/ccc.hex .
Устройство предназначено для применения в качестве узла секретности (электронной замковой "личинки") в кодовых замках, системах управления сигнализацией или иных устройствах, доступ к использованию которых необходимо ограничить полностью или в отдельных режимах.
Модуль обеспечивает появление высокого логического уровня на своем выходе при наборе с клавиатуры семизначного десятичного числа - кода. При повторном его наборе на выходе возникает низкий уровень. В составе модуля - два независимых друг от друга канала, каждый из них управляет одним выходом. Коды доступа в канал могут быть заданы (модифицированы) пользователем в специальном режиме предустановки. В него канал переходит при наборе с клавиатуры семизначного кода предустановки (каждый канал имеет свой код). Из этого режима можно модифицировать как код доступа, так и сам код предустановки. Все коды обоих каналов сохраняются в электрически программируемой памяти данных (ЕЕРROM) модуля, которая доступна для записи программно.
Схема модуля показана на рис. 1. Его основа - микроконтроллер PIC16F84 фирмы MICROCHIP, что обеспечивает малое энергопотребление и минимальные затраты [1]. Все функции реализованы программно. Выводы порта В микроконтроллера DD1 (RB0- RB6) используются для подключения стандартной 12-кнопочной клавиатуры, RB0-RB3 запрограммированы на ввод данных, a RB4-RB6 - на вывод. Вывод RB7, запрограммированный как выход, применяется для подачи звуковых сигналов.
Puc.1При каждом нажатии на любую клавишу, которое обнаруживается и оценивается программой как "истинное", на выводе 13 DD1 появляется пачка из 124 импульсов с периодом между ними около 4 мс. Звучит короткий звуковой сигнал. При удерживании клавиши пачки следуют друг за другом без пауз (постоянный сигнал). При наборе правильного кода (доступа или предустановки) на этом выводе появляются 1240 таких импульсов (звуковой сигнал длительностью около 5 с).
На элементах R5, R6, С4, VD1 выполнен узел внешнего сброса микроконтроллера при включении питания. Выводы порта А микроконтроллера RA0- RA4 запрограммированы как выходы. RA0 является флагом разрешения ре-
жима предустановки для обоих каналов. Установка этого флага (разрешение режима предустановки) индицируется свечением светодиода HL1. Флаг устанавливается при нажатии на кнопку "*" клавиатуры, а сбрасывается при нажатии на кнопку "#" или по окончании модификации кодов в режиме предустановки в любом канале или в момент системного сброса (при отключении- включении питания).
RA1 и RA2 - флаги режимов предустановки каналов 1 и 2. Каждый из них устанавливается при наборе соответствующего кода предустановки, а сбрасывается при нажатии на кнопку "#" или по окончании модификации кодов в режиме предустановки в соответствующем канале или при системном сбросе. Установка каждого из этих флагов индицируется свечением соответствующего светодиода HL2, HL3. Модификация кодов в выбранном канале возможна только в том случае, если установлены флаг режима предустановки этого канала и флаг разрешения режима предустановки.
RA3 и RA4 - выходы каналов 1 и 2 соответственно. На каждом из них возникает высокий уровень во время набора соответствующего кода доступа, а сбрасывается при повторном наборе этого кода или системном сбросе. RA3 имеет ТТЛ-уровни, a RA4 - выход с открытым стоком. К выходам каналов подключают исполнительные устройства.
Из сказанного следует, что модуль фактически является четырехканальным: кроме двух "полных" каналов, устанавливаемых и сбрасываемых только набором кодов доступа, имеются еще два "неполных" канала (RA1 и RA2). Их устанавливают набором кодов предустановки, а сбрасывают нажатием на кнопку "#", т. е. они ограничивают доступ только к включению исполнительных устройств, но не к их выключению. Во избежание ошибочной модификации кодов в EEPROM, при использовании "неполных" каналов следует следить, чтобы флаг разрешения режима предустановки был сброшен.
Упрощенная блок-схема алгоритма работы программы показана на рис. 2. После включения питания происходит системный сброс, обнуление всех флагов и выходов порта А. Далее программа начинает опрашивать клавиатуру. При обнаружении нажатой клавиши опрос приостанавливается, пока клавиша не будет отпущена. Защита от дребезга контактов клавиш реализована программно. Набираемый код накапливается в регистровом ОЗУ микроконтроллера.
Puc.2После ввода седьмой цифры набранный код сравнивается с кодом предустановки канала 1. В случае несовпадения - сравнивается с кодом предустановки канала 2. Когда набранный код совпадает с одним из этих кодов, программа устанавливает соответствующий флаг режима предустановки и сбрасывает набранный код. Если же не совпадает, он сравнивается последовательно с кодами доступа каналов 1 и 2. Если и с ними набранный код не совпадает, он сбрасывается.
Следом за вводом с клавиатуры каждой цифры программа проверяет, установлен ли флаг разрешения режима предустановки. Убедившись, что это произошло, программа последовательно уточняет, установлены ли флаги режима предустановки каналов 1 и 2. Если хотя бы один из них установлен, произойдет переход в режим предустановки. В результате каждого нажатия на клавиши "0"-"9" в этом режиме производится запись в ячейку EEPROM кода соответствующей цифры, "стирая" находившийся там ранее код. После ввода четырнадцати цифр (семи цифр кода доступа и семи - кода предустановки) автоматически осуществляется выход из режима предустановки (сброс всех флагов).
Выйти из режима предустановки можно также путем набора любого количества цифр (меньше четырнадцати), например, когда требуется модифицировать только код доступа. Для этого надо нажать на кнопку "#" после набора семи цифр.
Программа была подготовлена в среде MPLAB [2]. При программировании кристалла следует установить OSC=XT, WDT=Off, PWRTE=On, CP=Off, а в EEPROM данных записать код 00h по всем адресам.
Для питания модуля можно использовать источник постоянного напряжения +7,5...+15 В. Ток потребления микроконтроллера DD1 от интегрального стабилизатора DA1 при погашенных светодиодах HL1-HL3 составляет около 1 мА. Кварцевый резонатор ZQ1 можно применить любой на частоту 2...4 МГц (можно заменить RC-цепью), однако следует учитывать, что от частоты тактового генератора зависит тональность звуковых сигналов на выводе 13 DD1. Пьезоизлучатель НА1 - ЗП-3.
Для согласования логических уровней на выходе канала 2 (вывод 3 DD1) с исполнительным устройством нижний по схеме вывод резистора R12 отключают от стабилизатора и подключают к плюсовому выводу источника питания исполнительного устройства.
Конструктивное исполнение модуля должно быть таким, чтобы исключить доступ извне к цепям его выходов.
Устройство не требует наладки, однако перед началом эксплуатации пользователю необходимо ввести в память обоих каналов свои собственные коды. Это делают следующим образом. После первого включения питания нужно семь раз нажать на кнопку "0". Должен загореться светодиод HL2 и прозвучать длинный звуковой сигнал. Затем нажимают на кнопку "*". Теперь должен загореться светодиод HL1. Следующая операция - пользователь с клавиатуры вводит четырнадцать цифр, первые семь из которых будут кодом доступа канала 1, а остальные - кодом предустановки этого канала.
Когда будут набраны четырнадцать цифр, светодиоды HL1, HL2 погаснут. Повторно нажав семь раз на кнопку "0" (должен загореться светодиод HL3 и прозвучать длинный звуковой сигнал), а затем на кнопку "*" (должен загореться светодиод HL1), пользователь вводит еще четырнадцать цифр - код доступа и код предустановки канала 2. Светодиоды HL1 и HL3 гаснут. Теперь в EEPROM модуля записаны собственные коды пользователя.
В случае, если пользователь забыл свой код доступа, его просто заменяют на новый из режима предустановки. Если забыт код предустановки, то увидеть его можно только с помощью программатора, считав EEPROM данных PIC-контроллера. Код предустановки канала 1 расположен там по адресам 19h-1Fh, а канала 2 - по адресам 27h-2Dh.
Следует заметить, что EEPROM имеет ограниченное число циклов записи данных контроллера, поэтому не рекомендуется очень часто модифицировать коды.
Кнопкой "#" можно принудительно сбросить набранный код при ошибке в наборе.
ЛИТЕРАТУРА
1. Современные микроконтроллеры: архитектура, средства проектирования, примеры применения, ресурсы сети Интернет. "Телесистемы". Под ред. Коршуна И. В. - М.: Аким, 1998.
2. CD-ROM. Современные микроконтроллеры: документация, средства разработки, примеры использования. "Телесистемы", 1998.
Радио 8/2000, с.30-31.