Кодовый замок на микроконтроллере PIC16F628A

mc164-4Ограничивать доступ посторонних лиц в помещения с ценными вещами поможет кодовый замок. Один из вариантов реализации кодового замка на микроконтроллере PIC16F628A приведён в данной статье.

На рисунке ниже изображена схема кодового замка. Ядром схемы является микроконтроллер PIC16F628A. Алгоритм выполнения основных команд изображен на рисунке 2. Код программы написан на языке ассемблер, смотреть листинг в папке CL\16F628ATEMP.ASM архива с проектом. Прибор управляется одной кнопкой. Нажатием на кнопку добиваются последовательной смены режимов работы прибора. Звуковое сопровождение нажатия кнопки обеспечивает пьезоизлучатель звука. Для визуального отображения информации служит дисплей со встроенным контроллером.

Схема кодового замка

Полный цикл внутрисхемного программирования и отладки микроконтроллера PIC16F628A был осуществлён при помощи MPLAB IDE v8.15 (интегрированная среде разработки), компилятор MPASM v5.22 (входит в MPLAB IDE v8.15) и MPLAB ICD 2 (внутрисхемный отладчик). Для тех, кто не располагает средствами приведёнными выше, а имеет свою программу для работы с HEX файлами и иной программатор, можно в соответствующем проекте найти файл 16F628ATEMP.HEX.

Микроконтроллер DD1 имеет функциональные выводы RA0, RB0 – RB7, CCP1, которые служат для ввода и вывода информации. Микроконтроллер DD1 не имеет функции принудительного сброса, вывод для сброса подключен через резистор R1 к положительному потенциалу питания. Для генерации тактовой частоты используется встроенный RC-генератор на кристалле.

Алгоритм работы

К выводу RA0 через токоограничивающий резистор R3 подключена тактовая кнопка SB1. В отжатом положении тактовой кнопки SB1 резистор R7 имитирует низкий логический уровень. Микроконтроллер DD1 распознаёт три состояния тактовой кнопки SB1:

  1. Не нажата;
  2. Нажата кратковременно (менее 1 с);
  3. Нажата и удерживается (более 1 с).

Пьезоизлучатель звука P1 помогает различать состояния тактовой кнопки SB1. Так при 1 состоянии генерации звука не происходит, при 2 состоянии звук генерируется до того момента пока микроконтроллер не распознает 3 состояние, а в 3 состоянии генерации звука не происходит.

Для отображения информации используется жидкокристаллический дисплей HG1. Техническую спецификацию дисплея можно найти на сайте [3]. Он имеет контроллер, в котором реализована функция знакогенерации. Отображает две строки по шестнадцать символов в каждой. Управление дисплеем осуществляется через выводы микроконтроллера RB0, RB1, RB4 – RB7. Загрузка данных происходи полубайтами, через выводы RB4 – RB7. «Защёлка» - RB1. Выбор регистра сигнала формируем на выводе RB0. Резисторами R5 и R6 устанавливаем контрастность дисплея HG1. Подсветка дисплея подключена к питанию через токоограничивающий резистор R4. Дисплей HG1 прикручивается к плате 3 x 15 мм латунными стойками и 3 x 6 мм винтами.

Формированием логики на RB2 добиваются открытия или закрытия полевого транзистора VT1 [4], который включает и выключает подключенный к клеммнику X1 электрический замок. Электрический замок должен быть рассчитан на рабочее напряжение 9-15 В и потреблять ток не более 1 А. При подачи напряжения на электрический замок должен открываться, при отсутствии напряжения блокируется (закрывается).

К выводу CCP1 (аппаратная реализация ШИМ, частота 4 кГц, скважность 2) через токоограничивающий резистор R2 подключен пьезоизлучатель звука P1 с рабочей частотой генерации звука 4 кГц.

Прибор запитывается от переменного или постоянного источника напряжения, подключаемого к разъему X2. Номинальное напряжение источника питания 9 – 15 В. Номинальный ток источника питания 1 А. Для стабилизации питания используется обычная схема из диодного моста VD1, линейного стабилизатора DA1, фильтрующих конденсаторов C1 – C4.

Прибор может эксплуатироваться в диапазоне температур от –20 °С до +70 °С.
Микроконтроллер запрограммирован таким образом, что имеет одиннадцать рабочих состояний.

Отображение статистики

Ввод кода

Decode

  1. При включении прибора происходит чтение энергонезависимой памяти данных EEPROM, где происходит выгрузка данных состояния замка и кода. Прибор открывает или закрывает электрический замок согласно прочитанному регистру состояния замка. Прибор переходит в состояние где отображает статистику кодирования, т.е. 2.
  2. В данном состоянии прибор в верхней строке выводит на дисплее надпись «Stat. Стат.» и в нижней строке отображает статистику кодирования, а именно число кодирований и число декодирований*. После кратковременного или удерживаемого нажатия тактовой кнопки прибор руководствуясь регистром о состоянии замка переходит в состояние кодирования если замок открыт, т.е. 3 и переходит в состояние декодирования если замок закрыт, т.е. 4.
  3. Прибор выводит в верхней строке на дисплее надпись «Code Код» и переходит в состояние где происходит ввод кода (подпрограмма «Ввод кода»), т.е. 5. Происходи инкрементирование счётчика числа кодирований. Прибор переходит в состояние где меняет состояние замка, закрывая его, т.е. 9.
  4. Прибор выводит в верхней строке на дисплее надпись «Decode Д.код» и переходит в состояние где происходит ввод кода (подпрограмма «Ввод кода»), т.е. 5. Происходи инкрементирование счётчика числа декодирований. Прибор сравнивает введённый код с кодом сохранённым в энергонезависимой EEPROM памяти. Если код совпадает тогда прибор переходит в состояние где меняет состояние замка, открывая его, т.е. 10, а если код не совпадает переходит в состояние где выводит информацию о ошибке, т.е. 11.
  5. В нижней строке дисплея квадратными скобками выделяется первая цифра четырехзначного кода. Кратковременным нажатием на тактовую кнопку происходит инкрементирование регистра вводимой цифры**. Если тактовая кнопка нажата и удерживается более 1 с, то прибор переходит в состояние где происходит выбор второй цифры кода, т.е. 6.
  6. В нижней строке дисплея квадратными скобками выделяется вторая цифра четырехзначного кода. Кратковременным нажатием на тактовую кнопку происходит инкрементирование регистра вводимой цифры**. Если тактовая кнопка нажата и удерживается более 1 с, то прибор переходит в состояние где происходит выбор третей цифры кода, т.е. 7.
  7. В нижней строке дисплея квадратными скобками выделяется третья цифра четырехзначного кода. Кратковременным нажатием на тактовую кнопку происходит инкрементирование регистра вводимой цифры**. Если тактовая кнопка нажата и удерживается более 1 с, то прибор переходит в состояние где происходит выбор четвёртой цифры кода, т.е. 8.
  8. В нижней строке дисплея квадратными скобками выделяется четвёртая цифра четырехзначного кода. Кратковременным нажатием на тактовую кнопку происходит инкрементирование регистра вводимой цифры**. Если тактовая кнопка нажата и удерживается более 1 с, то прибор переходит в состояние на то место откуда запрашивалась подпрограмма «Ввод кода», т.е. 3 или 4.
  9. Прибор закрывает замок и сохраняет состояние замка и код. В верхней строке выводит на дисплее надпись «Saving Сохран.» и в нижней строке четырёхзначный код.  Далее прибор переходит в состояние где отображает статистику кодирования, т.е. 2.
  10. Прибор открывает замок и сохраняет состояние замка и код. В верхней строке выводит на дисплее надпись «Saving Сохран.» и в нижней строке четырёхзначный код. Далее прибор переходит в состояние где отображает статистику кодирования, т.е. 2.
  11. В верхней строке выводит на дисплее надпись «Error Ошибка» и в нижней строке четырёхзначный код. (Фото 4) После кратковременного или удерживаемого нажатия тактовой кнопки прибор переходит в состояние где отображает статистику кодирования, т.е. 2.

Ошибка

*После переполнения счётчика (больше 65535) происходит обнуление и счёт начинается заново, что приводит к сбою в статистике, в том смысле, что число кодирования может быть больше числа декодирований. Таким образом, рекомендуется обесточить прибор для сброса счётчиков.

**При инкрементировании цифры 9 происходит обнуление.

Так как у микроконтроллера защищена от внутрисхемного чтения EEPROM память (задано в конфигурации) внутрисхемно прочитать и узнать пароль, а следовательно и включить электрический замок не получится. Остаётся более простой способ вскрытия – непосредственно на прямую подать напряжение на электрический замок. Делаю вывод, прибор «кодовый замок» и электрический замок должны быть надёжно защищены от проникновения посторонних лиц. В свободном доступе должна быть кнопка и дисплей.

Стоит отметить, что прибор можно обесточивать, всё равно в энергонезависимой EEPROM памяти после ввода кода сохраняется состояние замка и код. Обесточивать прибор во время сохранения кода в энергонезависимой EEPROM памяти запрещено.

Стоит обратить внимание на одну важную деталь в работе прибора. При включении прибора он может кратковременно открывать электрический замок (на время мене 1 с), не смотря на то, что в энергонезависимой EEPROM памяти сохранено закрытое состояние электрического замка. Мной при симуляции выполнения программного кода в среде MPLAB IDE данная ошибка не была выявлена. При неожиданном обесточивании прибора во время сохранения кода в EEPROM памяти можно некорректно сохранить код и восстановить его не удастся, что приведёт к повторному программированию микроконтроллера. Отсюда следует рекомендация о необходимости стабильного и (или) резервного питания прибора. GB1  – резервное питание.

Файлы для изготовления печатной платы смотреть в папке [Board].

Печатная плата и расположение деталей:

Печатная плата и расположение деталей

В данном устройстве можно заменить следующие детали. Микроконтроллер DD1 из серии PIC16F628A-I/P-xxx с рабочей тактовой частотой 20 МГц в корпусе DIP18. Дисплей HG1 подойдет любой из серии WH1602x. Стабилизатор напряжения DA1 отечественный КР142ЕН5А (5 В, 1.5 А). Полевой MOSFET транзистор VT1 (N-канал) в корпусе I-Pak (TO-251AA), подойдёт аналог номинала указанного на схеме. Пьезоизлучатель звука P1 с рабочей частотой генерации звука 4 кГц. Диодный мост VD1 можно применить любой из серии 2Wxx. Разъём питания X2 аналогичный указанному на схеме с центральным контактом d=2.1 мм. Неполярные конденсаторы С1 и С2 номиналом 0.01 – 0.47 µF x 50 V. Электролитические конденсаторы С3 и С4 ёмкостной номинал тот же, а напряжение не ниже указанного на схеме.

Схема подключения электромагнита:

Схема подключения электромагнита

Схема подключения твердотельного реле:

Схема подключения твердотельного реле

Скачать архив с проектом кодового замка: 16F628Code_Lock.rar

Загрузка...