Кодовый замок на avr. Кодовый замок на микроконтроллере. Схема собрана на двухсторонней печатной плате



Данный проект будет отличным вариантом для повторения новичками, в нем используется ЖКИ дисплей 1602, клавиатура 4х4 из кнопок и конечно же сам контроллер. Кроме того, применены реле, кнопка и разъемы питания, PLS штырьки, пару транзисторов ну и по мелочи. Кстати, яркость дисплея в проекте будет регулироваться по методу ШИМ.

Это устройство может быть использовано для защиты практически любых объектов, пользователь должен ввести правильный пароль для получения доступа. Плата уже спроектирована удобным образом, и остается изготовить только красивый корпус для него. Пароль вводится с помощью встроенной в клавиатуру матрицы 4×4. Основной модуль ЖК-дисплея используется для отображения сообщений пользователю и текущей информации. Как только будет введен правильный пароль – сработает реле. Об этом так же будет свидетельствовать светодиод, установленный рядом с реле. Для отключения реле нужно нажать соответствующую кнопку на клавиатуре.

После ввода четырехзначного пароля необходимо нажать кнопку "ОК" (S8). В любое время вы можете нажать кнопку "Отмена" (S12), чтобы очистить код (например, при вводе любых неправильных цифр).

Код блокировки можно легко изменить, для этого нужно ввести специальный пароль “0000”, как только вы введете этот пароль, устройство переключится в режим смены пароля. Здесь нужно ввести старый пароль, чтобы получить разрешение, а затем ввести новый пароль, все очень просто.

Подсветка ЖК-дисплея выключается автоматически, после того как система находится в режиме ожидания нескольких секунд. Затемнение подсветки происходит очень плавно, так же как например в мобильных телефонах. Дисплей можно заменить на любой аналогичный, с похожим контроллером или даже другого разрешения, главное советую обратить внимание на распиновку выводов, в некоторых моделях распиновка дисплеев может отличаться. Программа для контроллера написана в среде С++, исходники, а так же прошивка для контроллера прилагаются. Микроконтроллер можно применить с любым индексом, буква L означает пониженное энергопотребление.

Список используемых радиодеталей:

01 330 Ом резистор (2 шт), R3, R5

02 4.7 кОм резистор R2, R4, R6

03 200 Ом резистор R1

04 0.1мкФ керамический конденсатор C1, C3, C4, C5

05 1N4007 Диод (2 шт), D1, D3

06 5мм светодиоды любого цвета D4

07 Микроконтроллер ATmega8L U1

08 Стабилизатор напряжения 7805 U2

09 Разъем питания CON1

10 PCB реле RL1

11 Выключатель Вкл / Выкл SW1

12 DC гнездо X1

13 16×2 LCD дисплей LCD1

14 10 кОм подстроечный резистор RV1

15 28 PIN кроватка для микроконтроллера IC

16 BC548 транзистор (2 шт.) Q1, Q2

17 Кнопки (16 штук)

Файл печатной платы для изготовления методом ЛУТ находится ниже в архиве, печатную плату можно заметно уменьшить, если применить кнопки поменьше, или если вынести клавиатуру на отдельную плату. Цифровые клавиши можно взять от старой клавиатуры компьютера или ноутбука.

Скачать файл печатной платы, исходник и прошивку

Оригинал статьи на английском языке (перевод: Адвансед для сайта cxem.net)

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

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

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

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

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

  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 – резервное питание.

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

В данном устройстве можно заменить следующие детали. Микроконтроллер 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

Устройство предназначено для защиты помещений, шкафов и сейфов от несанкционированного вскрытия. Все установки и код хранятся в энергонезависимой памяти микроконтроллера. Основой устройства служит микро­контроллер PIC16F628A (DD1 на схеме рис. 1). После подачи пита­ния программа микроконтроллера настраивает его порты, а также отклю­чает источник образцового напряже­ния, модуль ШИМ захвата сравнения, таймеры, компараторы и аппаратный USART - эти модули не нужны для ра­боты замка. Затем начинается опрос клавиатуры.

Она состоит из двух частей. Первая - кнопки SB3-SB 14 - находится снару­жи охраняемого объекта. Вторая - кнопки SB1, SB2 и выключатель SA1 - расположена внутри помещения. Кнопки SB3-SB 13 первой части кла­виатуры объединены в матрицу. Кноп­ка SB 14 в матрицу не входит, она пред­назначена для перезапуска микрокон­троллера в случае какого-либо сбоя в программе, а также в ряде других случаев, о которых будет рассказано ниже.

Кнопка SB1 "Открыть" установлена внутри помещения около двери. Нажа­тием на нее можно открывать дверь изнутри, не набирая кода. SB2 - кноп­ка перезапуска программы; кнопки SB2 и SB 14 включены параллельно. Кноп­кам матрицы присвоены обозначения: SB3 - "1", SB4 - "4", SB5 - "7", SB6 - "Открыть", SB7 - "2", SB8 - "5", SB9 - "8", SB 10 - "0", SB11 - "3", SB 12 - "6", SB 13 - "9". Тумблером SA1 выбирают режим закрывания замка. Код вводят поочередным кратковременным нажа­тием на цифровые кнопки. В подтверж­дение нажатия прозвучит короткий то­нальный сигнал пьезоизлучателя НА1, управляемого транзистором VT2.

Перед тем как открыть дверь, вводят четырехзначный код с паузами между соседними нажатиями не более 3 с, а затем в течение 3 с надо кратковре­менно нажать на кнопку SB6. Через 2 с на выходе RA0 микроконтроллера DD1 установится высокий уровень, откроет­ся транзистор VT1 и сработает элек­тромагнит, который приведет в дви­жение ригель замка, сжимая его пру­жину, и дверь откроется. Если пауза между соседними нажа­тиями превысит 3 с, то прозвучит сиг­нал с уменьшающейся частотой. Это означает, что программа начала выпол­няться заново и код надо вводить сна­чала. Диод VD1 предназначен для за­щиты транзистора VT1 от всплеска на­пряжения самоиндукции обмотки электромагнита Y1. Перед срабатыва­нием электромагнита прозвучит сигнал такой же частоты, как и при нажатии цифровых клавиш, но большей дли­тельности, что сигнализирует об откры­вании двери.

Когда контакты выключателя SA1 разомкнуты, электромагнит закроет замок через определенное время (по умолчанию - 12 с). Это время устана­вливают при программировании мик­роконтроллера. В программе, которую нужно будет загрузить в контроллер, в поле работы с EEPROM, в ячейку с адре­сом 0x06 (седьмая по счету) необходи­мо вставить число от 0x01 до OxFF, из расчета 1 единица = 2,5 с. Минимально возможная пауза равна 2,5 с, макси­мальная - 10 мин.

В случае, если контакты выключателя SA1 замкнуты, т. е. на входе RA4 мик­роконтроллера DD1 установлен низкий уровень, то закрывание замка происхо­дит после нажатия на кнопку SB 14 либо на SB2. После того как закроется транзи­стор VT1, электромагнит обесточится и пружина замка вытолкнет ригель обрат­но - дверь снова окажется запертой.

Для открывания двери изнутри поме­щения нажимают на кнопку SB1 и удер­живают ее до срабатывания электро­магнита, о чем оповестит тональный сигнал длительностью 2 с. Открыть дверь изнутри можно в любой момент. Если открывания двери не произойдет, необходимо нажать на кнопку SB2 (перезапустить программу) и снова нажать на кнопку SB1.

Когда необходимо сменить код, снача­ла вводят старый точно так же, как и при операции открывания двери, но потом нажимают на кнопку SB6 не кратковре­менно, а удерживают ее до того момента, пока не прозвучат три тональных сигнала. Затем необходимо немедленно отпустить кнопку SB6, ввести новый четырехзнач­ный код и сразу же в подтверждение вве­дения еще раз нажать на кнопку SB6. Далее прозвучит сигнал с нарастающей частотой, который известит о том, что новый код принят. Он хранится в первых четырех ячейках энергонезависимой памяти микроконтроллера DD1.

Устройство снабжено системой блоки­ровки. Каждый раз при введении невер­ного кода замок воспроизведет два сиг­нала частотой 1000 Гц и один частотой 500 Гц. Ошибочным контроллер считает нажатие на кнопку SB6 в то время, когда в рабочих регистрах находится неверный код, и введение пяти цифр кода. После трех ошибок подряд микроконтроллер DD1 установит на выходе RA2 высокий уровень. При этом откроется транзистор VT3, который включит тревожное устрой­ство. Этим устройством может быть сире­на или узел дозвона по телефону.

Одновременно включится светодиод HL1, установленный на панели клавиату­ры, который покажет, что опрос клавиа­туры (кроме тумблера SA1 и кнопок SB1, SB2, SB 14) отключен. Затем следует десятиминутная пауза, во время кото­рой работает тревожное устройство и включен светодиод HL1. В течение этого времени открыть замок можно только изнутри. Если нажать на кнопки SB 14 и SB2 (кнопки перезапуска программы микроконтроллера), то десятиминутный отсчет начнется заново. После паузы контроллер предоставит только одну возможность ввести код, и если он будет неверным, десятиминутная пауза с включением тревожного устройства повторится снова. И так будет продол­жаться до введения правильного кода. Каждый раз после верного введения кода счетчик ошибок обнуляется.

class="eliadunit">

Питает устройство источник постоян­ного тока напряжением 10... 15 В. При отключении электроэнергии в сети 220 В замок продолжает работать от аккуму­ляторной батареи. Схема простейшего варианта такого блока питания показа­на на рис. 2. Трансформатор Т1 пони­жает сетевое напряжение 220 В до 15...20 В. Максимальный ток вторичной обмотки трансформатора не должен быть менее 1,5 A DA1 - регулируемый стабилизатор напряжения. Изменяя со­противление построечного резистора R2, устанавливают на выходе стабили­затора DA1 такое напряжение, при кото­ром ток зарядки заряженной аккумуляторной батареи GB1 не превышает 100...200 мкА. При этом во время боль­шого потребления тока, когда сработал электромагнит Y1, основную часть тока дает аккумуляторная батарея, что позволяет не перегружать стабилизатор DA1. Диод VD5 предназначен для защи­ты стабилизатора DA1 в случае отсут­ствия на его входе напряжения.

Аккумуляторная батарея должна обес­печивать ток 300...600 мА (емкость - 7 А-ч). Стабилизатор DA1 следует уста­новить на теплоотвод площадью 30...40 см 2 . Клавиатуру можно изготовить из отдельных кнопок. Подойдут, к примеру, DIPTRONICS DTSMW-66N. Но можно применить и готовую клавиатуру от кно­почного телефонного аппарата или калькулятора. Как правило, можно легко подключить такую клавиатуру к устрой­ству, собрав кнопки в подходящую матрицу. Также необходимо вынести на панель клавиатуры светодиод HL1.

Пьезоизлучатель подойдет любой из серии ЗП. Электромагнит Y1 применен от лентопротяжного механизма магни­тофона, но подойдет любой другой, подходящий по габаритам и с макси­мальным током обмотки не более 1,3 А. Если ток, потребляемый электромагни­том, будет больше 1 А, то транзистор VT1 следует установить на теплоотвод площадью 30...40 см 2 .

Схема кодового звонка реализована на микроконтроллере ATtiny2313. Схема кодового замка состоит из микроконтроллера AVR и транзисторного ключа, управляющего реле.

Для записи кода замыкаем тумблер "sw", тем самым переводим замок в режим записи кода. Вводим размерность кодовой комбинации кнопками от 1 до 7 (кнопки 8, 9 и 0 в наборе размерности не задействованы), набираем любую кодовую комбинацию равную размерности кода.

Сработает эл. магнит замка, открыв его, тем самым сигнализируя, что кодовая комбинация записана в память "EEPROM".
Рабочий режим. Отключаем тумблер "sw", переводим замок в режим проверки, записанной кодовой комбинации. Повторяем последовательность для режима записи, вводим размер, вводим записанный код.

Принципиальная схема кодового замка на микроконтроллере AVR:

Набор кода всегда начинается с кн. 1 _ 7 (размерность). При наборе кодовой комбинации, код можно вводить не только по одной цифре, а так - же например, нажав кн. 7, не отпуская, нажать кн. 8 далее нажать кн. 6 и отпускать по одной кнопке в любой последовательности, в результате будет набрана пятизначная кодовая комбинация.

Если при правильно набранной комбинации замок не открылся нужно несколько раз нажать кн. 8 - 9 или 0, максимум 7 раз или нажать одновременно эти кнопки раза два и повторить набор кода. Это косвенно может означат, что замок пытались открыть.

При прошивке микроконтроллера fuse-биты надо выставить следующим образом:

Собранный кодовый замок выглядит так:


Исполнительным механизмом в электронном замке, схема которого показана на рис. 1, служит электромеханический замок ЗНЭМ-1-2, открывающийся при подаче на встроенный в него электромагнит Y1 постоянного напряжения 12 В. Логическая часть электронного замка построена на микроконтроллере PIC16F630-I/R Кнопки SB1 и SB2 предназначены для ввода открывающего его кода. Светодиоды HL1—HL3 разного цвета свечения сигнализируют о состоянии и режиме работы. Полевой транзистор VT1 по сигналу, формируемому микроконтроллером на выходе РСЗ, управляет электромагнитом Y1.

Рис. 1

Устройство питается от гальванической или аккумуляторной батареи напряжением 12 В. Такое напряжение необходимо для надёжного срабатывания электромагнита Y1. Его можно подавать как от гальванической или аккумуляторной батареи, так и от сетевого блока питания. Батарея гарантирует возможность открыть замок при отсутствии напряжения в сети, но придётся постоянно следить за её заряженностью.

Напряжение 5 В {требующееся для питания микроконтроллера) получается из 12 В с помощью интегрального стабилизатора DA1. Если использовать исполнительное устройство на другое напряжение или отдельный источник его питания, напряжение, подаваемое на вход стабилизатора, может быть уменьшено до 7 В или увеличено до 15 В.

Ток, потребляемый замком, когда он закрыт, очень невелик и не превышает нескольких миллиампер. В процессе набора кода он возрастает до десятков миллиампер в зависимости от числа включённых светодиодов, а при срабатывании электромагнита — приблизительно до 1 А.

Рис. 2a. Вид со стороны компонентов

Рис. 2b. Вид со стороны дорожек

Замок собран на печатной плате. Расположение элементов и чертёж печатных проводников на ней показаны на рис. 2. Светодиоды HL1—HL3 и кнопки SB1, SB2 установлены отдельно на раме запираемой замком двери. Открывающему замок человеку светодиоды должны быть видны, а кнопки доступны для нажатия. Светодиоды, типы которых указаны на схеме, имеют диаметр корпуса 10 мм и повышенную яркость. Однако можно применить и другие, подходящих цветов свечения.

Программа микроконтроллера создана в среде "PIC Simulator IDE v6.91". Открывающий код представляет собой комбинацию из восьми нажатий в определённом порядке на кнопки SB1 и SB2. В программе нажатие на кнопку SB1 представляется логическим нулём в соответствующем порядковому номеру нажатия разряде ячейки памяти, а нажатие на кнопку SB2 — логической единицей в таком разряде. Общее число возможных комбинаций — 256.
Нажатие на любую кнопку подтверждается включением светодиода HL1, что позволяет визуально их контролировать. Набирая код, нельзя нажимать на обе кнопки одновременно. Это приведёт к отмене попытки набора и блокировке замка на 4 с. В случае слишком продолжительной паузы между нажатиями на кнопки или слишком длительного (более 3 с) удержания кнопки нажатой программа включает свето-диод HL3 и также отменяет попытку ввода, блокируя замок на 4 с.

Если код набран до конца, но не совпал с хранящимся в памяти микроконтроллера образцом, замок блокируется на 4 с, но светодиод HL3 при этом мигает. Три неверных набора кода заблокируют замок на минуту, что сопровождается включением всех трёх светодиодов. До окончания произошедшей по любой причине блокировки нажатия на кнопки не дают никакого эффекта.

Образцовая кодовая комбинация хранится в EEPROM микроконтроллера по адресу 1. В начале своей работы программа читает содержимое этой ячейки и присваивает его переменной code. Первоначально код заносят в EEPROM на этапе программирования микроконтроллера. Средства для этого имеются в программном обеспечении любого программатора. Например, в главном окне среды программирования "PIC Simulator IDE v6.91" достаточно перед загрузкой программы в микроконтроллер открыть пункт меню "Tools-* EEPROM Memory Editor" и в окне с образом EEPROM записать нужный код в ячейку по указанному выше адресу. Содержимое памяти здесь представляется в шестнадцатеричной системе счисления, поэтому, например, код 00110011 выглядит как 33.

В процессе эксплуатации замка можно сменить код, не перепрограммируя микроконтроллер. Для этого следует включить замок и правильно ввести код, действующий на данный момент. Должен включиться светодиод HL2, а замок — открыться. Пока он открыт, нажмите на обе кнопки одновременно.

Светодиод HL2 начнёт мигать, a HL3 включится. Отпустите кнопки и после того, как светодиод HL3 погаснет, начинайте ввод новой комбинации- Если требования к длительности нажатий на кнопки и пауз между ними при вводе не нарушены, светодиод HL2 продолжит мигать, а светодиод HL3 снова будет включён- После того как светодиод HL3 вновь погаснет (для этого обе кнопки должны быть отпущены), наберите ту же комбинацию ещё раз. Если она идентична первой, программа её примет и запишет в EEPROM.

Приложенный к статье исходный текст программы на языке BASIC содержит описания всех используемых переменных и комментарии к наиболее важным строкам. Таймер TMR0 микроконтроллера сконфигурирован так, что переполняется с периодом около 65,5 мс, каждый раз формируя запрос прерывания. Обрабатывая эти запросы, микроконтроллер определяет состояние кнопок и отсчитывает необходимые интервалы времени. Например, приблизительно минутная блокировка замка основана на отсчёте 1000 прерываний. Их счёт в данном случае ведётся в переменной den_p. Поскольку она имеет тип long, занимая четыре байта памяти, то может принимать значения от 0 до 232-1 (4294967295). Если, например, задать предельное значение результата счёта равным 3600/0,0655^56000, продолжительность блокировки увеличится до часа.

  • Сергей Савенков

    какой то “куцый” обзор… как будто спешили куда то