Электронный кодовый замок  – для новичков в радиоделе

April 8, 2014 by admin Комментировать »

Автор: erde 04062010 11:54

Простую схему электронного кодового замка, использующего четыре кнопки для ввода кода, можно собрать на двух микросхемах по схеме RS триггеров Благодаря использованию КМОП микросхем, данная схема потребляет ток  в режиме ожидания единицы микроампер и работает в диапазоне напряжения от 3 до 18 вольт Схема собрана на двух микросхемах К561ТЛ1 либо аналог CD4093 A-B Четыре RS триггера, DD1-DD2, работают по принципу последовательного включения Комбинация замка соответствует  последовательному  нажатию кнопок S1, S2, S3, S4 При этом на выводах 9-11 DD2 появляется логический ноль При неправильной последовательности набора кода, либо нажатии на кнопки S5-S12, все триггеры переключаются в исходное состояние Схема также исключает возможность срабатывания, если нажать на все кнопки, поскольку все триггеры перейдут в запрещающий режим В схеме подключены резисторы к входам R и S для стабильной работы триггеров, а также для исключения срабатывания от статического напряжения Сопротивление всех резисторов должны быть одинаковым Для стабильной работы схемы следует использовать стабилизатор питающего напряжения К выводам 9-11 DD2 можно подключить (через резистор) транзистор p- n-p и исполнительное устройство, либо подключить формирователь импульса  для привода автомобильного центрального замка

Рис 321 Схема кодового замка

Начнём со схемы Каждая из микросхем К561ТЛ1 содержит четыре двухвходовых триггера Шмидта со схемой И на входе Таким образом, они играют роль элементов 2И-НЕ На двух базовых элементах микросхемы собирается RS-триггер Посмотрим, как работает подобный триггер

Вначале обсудим таблицу истинности, а затем рассмотрим «осциллограммы»

Рис 322 Работа RS триггера на двух элементах 2И-НЕ

Каждый из компонентов (программы моделирования) S и R работает как генератор (их можно заставить работать в противофазе), устанавливая на входах элементов И-НЕ попеременно уровни логической единицы и логического нуля

Рис 323 Динамические диаграммы работы триггера

Чтобы избежать сомнений, вернёмся к началу обсуждения, рассмотрев, как работает базовый элемент 2И

Логическую операцию И можно запомнить как аналог арифметической операции умножения Единица на выходе появляется только тогда, когда на обоих входах уровень логической единицы (единица при умножении 1*1)

Для элемента 2И-НЕ на выходе в этом случае появляется уровень логического нуля

Рис 324 Таблица истинности для элемента 2И

Вернёмся к RS триггеру Предположим, что на входе S ноль, на входе R единица Для элемента 2И любой вариант присутствия ноля хотя бы на одном из входов (это видно на таблице истинности) означает ноль на выходе При инверсии (2И-НЕ) это означает на выходе единицу То есть наличие нуля на входе S будет отвечать тому, что на выходе A_out будет единица, которая, благодаря перекрёстной связи, попадёт на вход другого элемента 2И-НЕ, где есть единица по входу R А две единицы на входе приведут к тому, что на выходе B-out появится ноль Это устойчивое состояние триггера

Поскольку мы обозначили выход A_out как прямой, то установка его в единицу определяет вход S как вход установки (Set), а вход R как вход сброса (Reset)

А теперь обратимся к схеме кодового замка Исходно на всех входах присутствуют уровни логической единицы, устанавливаемые «подтягиванием» входов с помощью резисторов к плюсу питания Нажимая на кнопку S1, мы подаём ноль на вход первого триггера На выходе 3 микросхемы DD1 появится единица, а на выходе 4 ноль Кнопкой S2 мы этот ноль подаём на вход второго триггера, а на его выходе 11 появляется ноль, который «обслуживает» кнопку S3 Завершается этот процесс после нажатия на кнопку S4 появлением логического нуля на выходе 11 микросхемы DD2 Активный низкий уровень на выходе устройства объясняет, почему рекомендовано использование транзистора структуры p-n-p, включение которого и произойдёт после подключение его входа через резистор к общему проводу

Я не считаю, что замена микросхем серии К561 микроконтроллером  – это  удачное решение Поэтому мы просто постараемся на бумаге (вернее, за компьютером) создать устройство с теми же свойствами, что и вышеописанное

В качестве микроконтроллера я использую PIC16F628A И схема в этом случае может выглядеть так:

Рис 325 Повторение схемы кодового замка на микроконтроллере

Программа для микроконтроллера в промежутках между включением, например, соленоида, открывающего замок, ждёт нажатия кнопок

Все элементы ввода (input) требуют переменной В данном случае создана переменная push Это переменная типа byte Мы записываем в переменную значение всего порта B Входы имеют подтягивающие резисторы, так что нет необходимости добавлять внешние сопротивления Пока ни одна кнопка не нажата, переменная push равна FF

Добавляем в программу проверку нажатия хотя бы одной кнопки Если кнопка нажата правильно, то есть, кнопка S1, то мы начнём формирование кода в переменной code, которую создаём

Рис 326 Начало работы над программой

Кто-то предпочтёт собрать всю программу сразу, а затем начать её отлаживать Я предпочитаю отладку небольших фрагментов, поскольку легче выявить все ошибки и неприятности, которые могут возникать по разным причинам Одна из этих причин в значении переменной push Если бы входы были подтянуты к земле, а кнопки подавали высокий уровень при нажатии, то исходное значение переменной было бы нулевым, а правильная последовательность нажатых кнопок в десятичном виде выглядела бы как 1, 2, 4, 8 Можно, конечно, внести изменения в схему, но…

Микроконтроллер удобен тем, что не обязательно менять схему, достаточно изменить своё отношение к получаемым результатам Как человек ленивый, не очень склонный заниматься вычислениями на бумаге без особенной необходимости, я воспользуюсь калькулятором операционный системы компьютера для определения нужных значений: FE, FD, FB, F7

Для отладки программы в пошаговом режиме я добавлю пять кнопок, которые в расширенных свойствах обозначу, как кнопки с фиксацией, так удобнее работать в пошаговом режиме В свойствах подключения я  подключу  их к входам RB0-RB4 И проверю, создав ветвление программы, что у меня получается Для наблюдения за переменными я добавлю их в окно наблюдения, щёлкнув правой кнопкой мышки в окне после запуска отладки в пошаговом режиме

Рис 327 Отладка первого фрагмента программы

Вот и первая неприятность подоспела Вместо начального значения переменной push, которое я ожидал, это значение равно 1F Можно отложить решение проблемы, а можно попытаться сейчас понять, в чём причина расхождений

Я подозреваю, что те входы порта, к которым я не подсоединил кнопки, не обозначил активное состояние кнопок, оказались подтянуты к земле Чтобы проверить это, я добавлю ещё три кнопки (в программу) и обозначу их активный уровень как низкий И это помогает, исходное значение переменной становится равно FF (0xFF, конечно) или десятичное значение 255

В разделе определения кода, программный элемент Вычисление, я добавляю запись: code = code AND push Нажимая кнопки в нужной последовательности, я должен сформировать правильный  код,  записанный  в  переменной  code  Но  по  умолчанию  эта  переменная  будет

обнулена Это следует исправить, добавив в самом начале до входа программы в цикл присвоение переменной значения code = 0xFF

И, нажимая подряд все «правильные» кнопки, я могу получить правильное значение кода: 0xF0 (240) И могу получить значение кода, если нажата любая неправильная кнопка: 0xEF (239)

В  этом  месте  есть   возможность   выбрать,  будет   ли   правильным  любой  порядок  нажатия

«правильных» кнопок, как это сейчас в программе – я могу нажать кнопки в любой последовательности – или сохранить единственный порядок нажатия кнопок, как это сделано в исходной схеме

Я оставлю соответствие исходной схеме Для этого я добавлю ещё одну проверку

Если нажата кнопка S1, то значение порта B становится равно 0xFE Это значение я и проверяю

В условии ветвления я воспользовался возможностью изменить порядок перехода, поменяв местами результаты Да и Нет

Если нажата кнопка S1, то происходит формирование кода, если нет, то значение кода восстанавливается до исходного значения

Всё было бы хорошо, если бы не было плохо Этот порядок задан только для первой кнопки Если после этого нажать вторую кнопку, то программа вернётся к первоначальному виду

Значит, решение не то, что нам нужно Следует изменить решение, добавить какие-то новые элементы программы

Рис 328 Продолжение сборки программы

Вместе с тем, программа начинает разрастаться Можно воспользоваться механизмом подпрограмм (макросов), чтобы части программы были обозримого вида Создадим макрос, например, code_1 В этом макросе начнём формировать код И я пока не знаю, не потребуется ли ещё один или несколько макросов для формирования кода

В созданный макрос я перенесу свои задумки по определению первой «правильной» кнопки

Рис 329 Новый вид программы

В этом месте пришло время напомнить вам, что меняя программу, а мы не знаем ещё, двигаемся ли мы в правильном направлении или нет, удобно сохранять программу под разными именами и в отдельных папках Если последующие изменения не будут успешны, можно  оставить вновь созданные изменения и вернуться к тому месту, где всё было правильно, всё было проверено

Итак, создав макрос, мы не решили проблемы Одним из решений было бы изменить, скажем, в основной программе условие перехода к подпрограмме Изначально это была проверка, нажата ли  хотя  бы  одна  кнопка  Мы  знаем,  как  меняется  вид  переменной  push,  когда  нажаты

«правильные» кнопки И можем изменить условие: If push = 0xFE OR push = 0xFD OR push = 0xFB OR push = 0xF7

Теперь вызов макроса обусловлен нажатием только правильных кнопок С правильным нажатием первой кнопки мы тоже, худо-бедно, но определились – код не изменится, если нажата не первая кнопка Пришло время позаботиться о второй «правильной» кнопке И я предлагаю добавить в макрос code_1 ещё один компонент ветвления

Отличается  новый  элемент  только условием  проверки: If push = 0xFD AND code = 0xFE

Таким  образом,  мы  проверяем,  какая  кнопка  нажата  и  была  ли  нажата первая кнопка Если всё так, код будет изменён

Рис 3210 Определение второй кнопки в макросе code_1

Не мудрствуя лукаво, я повторю всё это для остальных «правильных» кнопок Условия ветвления для них будут такими:

If push = 0xFB AND code = 0xFC If push = 0xF7 AND code = 0xF8

Осталось  добавить  в  макрос  срабатывание  замка  при  правильном  наборе  Я  добавлю  вызов макроса code_2, который создам, и в котором «открою дверь»

Рис 3211 Новый макрос code_2

Поскольку мы управляем низким уровнем сигнала на выходе, в начале программы следует установить это выход в высокий уровень Добавив к отладочной панели светодиод, подключённый к выходу А2, можно проверить работу схемы И ещё одно, что следует сделать, это обслужить все остальные кнопки Для этого добавим к длинному условию в основной программе проверку ещё одного входа:

If push = 0xFE OR push = 0xFD OR push = 0xFB OR push = 0xF7 OR push = EF

И в макросе code_1 добавим реакцию на эту кнопку

Рис 3212 Обслуживание последних кнопок

Можно   проверить   работу,   запустив   интерактивную   отладку   Можно   проверить   работу   в программе ISIS И эта проверка показывает, что входы порта B не подтягиваются к плюсу питания

Рис 3213 Проверка работы схемы в программе ISIS

Чтобы наверняка подтянуть резисторами входы, добавим в программу небольшую вставку на языке Си до входа программы в цикл

Рис 3214 Добавление вставки на языке Си для подтягивания входов резисторами

Вставка изменяет в регистре OPTION второго банка (банк определяется в регистре status = 0x20) значение бита, отвечающего за включение резисторов Строка option_reg &amp 0x7А использует маску

Теперь входы в состоянии высокого логического уровня, и программа работает

Рис 3215 Работающая программа в ISIS

Я уже говорил, что не считаю замену двух цифровых микросхем микроконтроллером удачным решением Но это решение можно сделать удачным

При любых действиях оператора удобно отображать эти действия на индикаторе Когда нажата какая-то кнопка, и чтобы вы видели, что кнопка нажата, можно зажигать светодиод Для этого добавим в основной текст программы небольшую конструкцию

Рис 3216 Добавление фрагмента программы, зажигающего индикатор

Добавьте на панель отладки ещё один светодиод, соедините его с выходом RA0 и измените его цвет, и вы увидите:

Рис 3217 Отображение нажатой кнопки индикатором Когда кнопка отпущена, любая кнопка, индикатор гаснет

Ещё одно улучшение, которое оправдано названием «кодовый замок», это блокировка работы замка при неправильно нажатой кнопке

Чтобы изменить логику работы замка, добавим в макрос code_1 новое ветвление программы, рассчитанное на правильно нажатую первую кнопку Если этого не происходит, создав новый макрос block, мы в этом макросе заблокируем дальнейшую работу замка

Условие проверки нажатой кнопки выглядит так:

push <> 0xFE AND code = 0xFF

То есть, если код ещё не изменился, а нажата не первая

«правильная»      кнопка,     то     мы      вызываем     макрос блокирования замка block

Рис 3218 Начало работы программы по блокированию замка Новый макрос выглядит следующим образом:

При входе в макрос мы зажжём индикатор на выводе RA1, который покажет, что ввод кода сделан неверно Затем установим флаг (создав новую переменную типа byte) И пока не будет выполнен сброс, программа останется в цикле опроса кнопок За это отвечает условие выполнения цикла, while block = 1

Опрашивая кнопки, программа ожидает нажатия  кнопки S4 Если эта кнопка нажата, флаг block сбрасывается, переменная code возвращается в исходное положение, гасится индикатор блокировки Затем следует пауза в 3 секунды, без которой, это можно проверить, выйти из блокировки будет трудно

Поскольку условие работы цикла подошло к концу, программа покидает макрос block, и замок готов принимать правильный ввод кода

Условие выхода из блокировки замка можно изменить, если это нужно В частности можно выбрать любую комбинацию нажатых кнопок, которая разблокирует замок

Рис 3219 Макрос блокирования замка block

Остаётся проверить работу устройства за компьютером, упорядочить записи в рабочей тетради, добавить комментарии в программу и сохранить все варианты

Достаточно часто устройство, которое разрабатывалось на элементной базе, пусть и самой современной на момент разработки, вполне может продолжить своё существование, но есть необходимость перевести его на современную элементную базу

Когда создавалась схема кодового замка, я не исключаю, что  микроконтроллеры были очень дорогостоящими компонентами Сегодня их цена существенно снизилась Я думаю, что те дополнения в функциональности устройства, которые мы сделали, можно было выполнить и на цифровых микросхемах Но тогда схема была бы не на двух микросхемах

Кроме того, собрав устройство и пользуясь им, и это бывает часто, начинаешь понимать, что представляя работу с этим устройством до его разработки, а, главное, до пользования им, ты не учёл чего-то, что-то оказалось лишним, а чего-то, что хотелось бы иметь, у устройства нет

Если вы выполнили устройство на цифровых микросхемах, то переделки потребуют существенных изменений схемы, и полной переделки устройства Используя микроконтроллер, вы можете создать новую программу и загрузить её в микроконтроллер Многие контроллеры допускают программирование микросхемы без удаления её с печатной платы Впрочем, если условия эксплуатации вполне благоприятные, вы можете установить микроконтроллер на панельку, снять его и перепрограммировать

Переделывая схему кодового замка, мы познакомились с возможностями и микроконтроллера, и возможностями программ, которые при этом использовали Чем больше опыт работы с программами, тем яснее можно понять и область их применения, и особенности их работы А это не менее важно, чем научиться работать с ними

Если вам не нужен кодовый замок, как мне, то не считайте, что вы напрасно потратили время Используя ту же схему, можно придумать совсем другое устройство Такое придумывание очень полезное занятие Например, используя не кнопки, а контакты, располагая контакты в определённом порядке, можно собрать детскую игрушку – «соедини точки в картинку» Если нажимать точки-контакты в правильном порядке, то точки (со светодиодами рядом с контактами) в завершении высветят рисунок домика или машины, иначе будет мигать огонёк – «ты ошибся»

Заменив кнопки датчиками, можно отслеживать правильную последовательность срабатывания датчиков О нарушении правильной последовательности можно сигнализировать, а можно вернуть процесс в исходную точку и повторить его Здесь всё будет зависеть от самого процесса

Придумывать новое применение уже готового устройства, занятие очень интересное, но микроконтроллер позволяет внести в устройство новые свойства, а переделать программу совсем не сложно В этом, конечно, микроконтроллер имеет большое преимущество перед другими цифровыми микросхемами

Поскольку в этом примере мы использовали кнопки, то рассмотрите, повлияет ли дребезг контактов на работу исходной схемы и той, что мы собрали на микроконтроллере

Источник: Гололобов ВН,- Самоучитель игры на паяльнике (Об электронике для школьников и не только), – Москва 2012

Оставить комментарий

микросхемы мощности Устройство импульсов питания пример приемника провода витков генератора выходе напряжение напряжения нагрузки радоэлектроника работы сигнал сигнала сигналов управления сопротивление усилитель усилителя усиления устройства схема теория транзистора транзисторов частоты