Универсальный внешний накопитель для всех iOS-устройств, совместим с PC/Mac, Android
Header Banner
8 800 100 5771 | +7 495 540 4266
c 9:00 до 24:00 пн-пт | c 10:00 до 18:00 сб
0 Comments

Электронный кодовый замок на ATmega8 — Меандр — занимательная электроника

Данный проект будет отличным вариантом для повторения новичками, в нем используется ЖКИ дисплей 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)

Возможно, вам это будет интересно:

meandr.org

Кодовый замок с ЖК дисплеем на микроконтроллере ATmega8 - Охрана и контроль доступа - Микроконтроллеры - Каталог статей

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

Как видно из схемы, устройство ввода представляет собой клавиатуру из 12 клавиш. Из них 10 для ввода символов(SB1...SB10), и 2 для подтверждения (SB11) и сброса (SB12). При сборке использовались обычные кнопки, но можно поэкспериментировать и с графитовыми контактами, однако придется подобрать сопротивление R1 ...R4. Если же планируется выводить клавиатуру на проводах, превышающих в длине 20 см, то для более устойчивой работы необходимо уменьшить сопротивление до 4...5 кОм. Введенные символы дублируются на ЖКИ, который также осуществляет отображение режима работы. Функции управления реализованы на микроконтроллере ATmega8, который настроен на работу от внутреннего генератора 8 МГц. Для подключения к другим устройствам используется разъем, в котором предусмотрены следующие выходы: SW-для включения/выключения (изменяет свое состояние при правильном вводе кода на противоположное: логический "0" на "1" и обратно при повторном вводе), STR - на нем в течении 5 с после правильного кода устанавливается логическая "1". По истечении этого времени устанавливается "0" (преимущественно предусмотрен для замка двери). Данные выходы рассчитаны на максимальный ток нагрузки 20 мА и позволяют самостоятельно разработать исполнительный элемент (транзисторный ключ с реле, например) либо без особого труда связать замок с другим устройством. Питание осуществляется однополярным напряжением 5 В, которое снимается со стабилизатора главной схемы. При отсутствии такового можно применить микросхему 7805. Если вы уверены в возможности ввода кода "в слепую", то ЖКИ можно не подключать. На работу схемы зто не повлияет, но создаст неудобства при смене кода.

ЖКИ может быть использован любой марки, но с такой же конфигурацией и возможностью вывода 16 символом на 2 строки. Конденсатор С1 можно исключить в случает наличия цепей фильтрации в управляемом устройстве.

Базовый вариант данного устройства предусматривает 9 символов кода. Однако, для простоты использования, программа микроконтроллера была изменена. Более подробно см. в главе Прошивка.

При первом включении устройства в ячейках 0-8 (в зависимости от кода) EEPROM памяти находятся значения FFh. Так и должно быть, ведь при стирании МК "с заводской конфигурацией" стирается и этот вид памяти. Следовательно, физически с клавиатуры ввести 255 одним символом невозможно. Поэтому в программу введена специальная процедура проверки EEPROM. При запуске схемы она считывает значение с адреса 0 и анализирует. Если оно не является О, 1,2.. .9 (физически доступным символом), то производиться запись во все ячейки кода значений 0. Следовательно, код будет "000000000" в базовой версии (9 символов). Если же все нормально, то в ОЗУ загружается значения из памяти. На индикатор будет выведено слово "Code: (рус. версия Код:)". На обоих выходах будет присутствовать логический "0". С этого момента устройство работает в режиме ожидания кода (далее РО).


Для открытия замка необходимо ввести код с клавиатуры и нажать клавишу "Ok". При правильном коде вы увидите сообщение "Ок!!! (Верно!!!)" и произойдет изменение на выходах устройства. После 5 с - переход в РО. Если же код не верен, вы получите соответствующее сообщение, и схема будет заблокирована на 10 с. Это вынужденный шаг, который позволяет увеличить время взлома замка путем перебора кода. При варианте 9 символов из {0...9}, данная операция от первой до последней комбинации займет около 310 лет (По 9 комбинаций). В целях безопасности код дублируется на индикаторе символом "#". При превышении количества введенных символов выполняется автоматическая очистка ЖКИ. Кнопка "Clear" служит для произвольной очистки в случае ошибки.

Смена кода: Если верить паспорту микроконтроллера, то количество гарантированных циклов данной операции ограничено 100000.
Для смены текущего кода необходимо знать сам код и код входа в данный режим.

Поэтому процедура выглядит следующим образом:

1. Ввести комбинацию "123" (она фиксирована), нажать "Ok". На индикаторе отобразиться строка "Enter code" ("Введите код")

2. Ввести ваш старый код (при первом запуске все 0) и нажать "Ok". Если все правильно, то вы перейдете на следующий уровень (("Enter new" (Введите новый)), в противном случае - сообщение об ошибке, блокировка и переход в РО.
3. Ввести новый код, который отображается на индикаторе соответствующими символами при нажатии клавиш. При переполнении количества символов, отображаться и использоваться будут те, что были введены первыми. Если количество символов соответствует необходимому, то после нажатия на "Ok" появиться сообщение "Code is changed (Код изменен)", устройство перепишет код в EEPROM и перейдет в РО с измененным кодом. В противном случае-сообщение о несоответствии количества символов и переход в РО. На любом этапе смены кода выход из данного режима осуществляется нажатием на кнопку "Clear". Это необходимо в том случае, если вы не согласны с тем, что ввели. Так как в данной операции на ЖКИ отображается реальный код, то ее следует производить при отсутствии посторонних.

Для данного устройства было написано 6 прошивок: русский и английский язык по 4, 6 и 9 символов. Английский вариант предусмотрен в тех случаях, когда контроллер ЖКИ не отображает русских символов. У них нет функции "мастер код", при помощи которой можно открыть замок в независимости от основного кода. Код" 123" не осуществляет воздействия на выходы устройства. Для настройки на внутренний генератор 8 МГц необходимо установить биты конфигурации (они же FUSE bits) CKSEL 0-3 в положение 1101 соответственно. В программаторе от "CodeVisionAVR" 1 соответствует установленная "галочка", т.е. данный бит программируется

прошивки (разные варианты).

проект в протеусе.


cxema21.ru

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

Данный

кодовый замок на микроконтроллере собран на достаточно простом микроконтроллере AVR ATtiny13. Его можно применить для ограничения допуска в различные складские помещения, запирание ворот гаража и дверь дома, а также для включения различных приборов, включение которых нужно ограничить.

Принцип работы

Работа замка на микроконтроллере основана на поочередном вводе трех чисел. Размер каждого числа может быть в диапазоне от 0 до 255. Это в свою очередь повышает уровень секретности кодового замка по сравнению с другими замками, у которых каждое секретное число имеет размер от 0 до 9.

В том случае если введенная последовательность этих трех чисел совпадает с тремя числами, которые внесены в память микроконтроллера кодового замка, то на выходе (вывод 3) появится управляющий сигнал ( лог.1),   на 15 секунд  загорится светодиод HL4 сигнализируя о правильности ввода и сработает реле К1 управляющее исполнительным механизмом замка. По истечении 15 секунд на выводе 4 микроконтроллера появится лог. 0 и замок перейдет в первоначальное состояние ожидания.

Управление работой кодового замка осуществляется всего двумя кнопками, руководствуясь только индикацией светодиодов. Причем ввод секретного кода осуществляется только одной кнопкой SB2, которая находится на наружной панели замка. Вторая кнопка SB1 предназначена для программирования, и она расположена на самой плате.

Этапы управления кодовым замком

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

Рассмотрим это на конкретном примере. Допустим, нам нужно задать следующий секретный код: первая цифра 8, вторая цифра 12, третья цифра 9.  Для этого подаем  питание на устройство, затем нажимаем и удерживаем обе кнопки (SB1 и SB2). После этого отпускаем кнопку SB1, и как только начал мигать светодиод HL1 отпускаем и кнопку SB2. После этих манипуляций светодиод HL1 будет гореть постоянно, а светодиоды HL2 и HL3 не будут гореть. Это состояние светодиодов говорит о том, что устройство перешло в режим программирования.

Теперь чтобы записать первое число нам нужно нажать и удерживать кнопку SB2, при этом все три светодиода начнут мигать. Нужно отсчитать необходимое количество вспышек (в нашем случае это 8) и отпустить кнопку. После этого, в подтверждении правильности введенного числа, светодиоды промигают такое же количество раз (8 раз). Все, первое число записано. Далее загорается светодиод HL2 – напоминая нам, что необходимо записать второе число.

Поступаем точно так же как и с записью первого числа: нажимаем и удерживаем кнопку SB2 и отсчитываем необходимое число вспышек светодиодов (в нашем примере это 12), отпускаем кнопку и проверяем правильность ввода по повторным вспышкам. Затем загорается светодиод HL3 для третьего числа, и повторяем туже процедуру и для третьего числа (число 9).

После того так мы записали в память микроконтроллера все три числа и для выхода из режима программирования нужно нажать кнопку SB1.

  •  Набора секретного кода

Рассмотрим так же это на примере. До этого мы записали секретный код 8-12-9. Для ввода вначале нажимаем кнопку SB1 и отпускаем ее сразу, после того как загорится светодиод HL1, тем самым переводим наш замок в режим ввода кода. Свечение светодиода HL1 свидетельствует, что нужно ввести первую цифру. Процедура ввод цифр  аналогична тому, как вводились цифры при программировании. То есть, нажимая на кнопку SB1, отсчитываем необходимое количество, после чего отпускаем кнопку и наблюдаем подтверждение наборной цифры путем мигания светодиодов. Затем переходим ко второй и третьей цифре.

В том случае если все три цифры секретного кода введены верно, сработает реле и на 15 секунд включится светодиод HL4, светодиоды HL1,HL2,HL3 будут светиться в режиме бегущих огней.

Для ввода секретного кода предоставляется три попытки. Если в третий раз код введен неверно, возможность ввода блокируется на 2,5 минуты. По прошествии этого времени замок снова будет готов к вводу кода.

 При программировании микроконтроллера следует выставить следующие фьюзы:

  • CKDIV8 = 0
  • BODLEVEL0 = 0
  • SPMEN = 0

Скачать прошивку (1,3 Mb, скачано: 1 613)

www.joyta.ru

Кодовый замок с ЖК дисплеем на микроконтроллере ATmega8 - Охрана и контроль доступа - Микроконтроллеры - Каталог статей

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

Как видно из схемы, устройство ввода представляет собой клавиатуру из 12 клавиш. Из них 10 для ввода символов(SB1...SB10), и 2 для подтверждения (SB11) и сброса (SB12). При сборке использовались обычные кнопки, но можно поэкспериментировать и с графитовыми контактами, однако придется подобрать сопротивление R1 ...R4. Если же планируется выводить клавиатуру на проводах, превышающих в длине 20 см, то для более устойчивой работы необходимо уменьшить сопротивление до 4...5 кОм. Введенные символы дублируются на ЖКИ, который также осуществляет отображение режима работы. Функции управления реализованы на микроконтроллере ATmega8, который настроен на работу от внутреннего генератора 8 МГц. Для подключения к другим устройствам используется разъем, в котором предусмотрены следующие выходы: SW-для включения/выключения (изменяет свое состояние при правильном вводе кода на противоположное: логический "0" на "1" и обратно при повторном вводе), STR - на нем в течении 5 с после правильного кода устанавливается логическая "1". По истечении этого времени устанавливается "0" (преимущественно предусмотрен для замка двери). Данные выходы рассчитаны на максимальный ток нагрузки 20 мА и позволяют самостоятельно разработать исполнительный элемент (транзисторный ключ с реле, например) либо без особого труда связать замок с другим устройством. Питание осуществляется однополярным напряжением 5 В, которое снимается со стабилизатора главной схемы. При отсутствии такового можно применить микросхему 7805. Если вы уверены в возможности ввода кода "в слепую", то ЖКИ можно не подключать. На работу схемы зто не повлияет, но создаст неудобства при смене кода.

ЖКИ может быть использован любой марки, но с такой же конфигурацией и возможностью вывода 16 символом на 2 строки. Конденсатор С1 можно исключить в случает наличия цепей фильтрации в управляемом устройстве.

Базовый вариант данного устройства предусматривает 9 символов кода. Однако, для простоты использования, программа микроконтроллера была изменена. Более подробно см. в главе Прошивка.

При первом включении устройства в ячейках 0-8 (в зависимости от кода) EEPROM памяти находятся значения FFh. Так и должно быть, ведь при стирании МК "с заводской конфигурацией" стирается и этот вид памяти. Следовательно, физически с клавиатуры ввести 255 одним символом невозможно. Поэтому в программу введена специальная процедура проверки EEPROM. При запуске схемы она считывает значение с адреса 0 и анализирует. Если оно не является О, 1,2.. .9 (физически доступным символом), то производиться запись во все ячейки кода значений 0. Следовательно, код будет "000000000" в базовой версии (9 символов). Если же все нормально, то в ОЗУ загружается значения из памяти. На индикатор будет выведено слово "Code: (рус. версия Код:)". На обоих выходах будет присутствовать логический "0". С этого момента устройство работает в режиме ожидания кода (далее РО).


Для открытия замка необходимо ввести код с клавиатуры и нажать клавишу "Ok". При правильном коде вы увидите сообщение "Ок!!! (Верно!!!)" и произойдет изменение на выходах устройства. После 5 с - переход в РО. Если же код не верен, вы получите соответствующее сообщение, и схема будет заблокирована на 10 с. Это вынужденный шаг, который позволяет увеличить время взлома замка путем перебора кода. При варианте 9 символов из {0...9}, данная операция от первой до последней комбинации займет около 310 лет (По 9 комбинаций). В целях безопасности код дублируется на индикаторе символом "#". При превышении количества введенных символов выполняется автоматическая очистка ЖКИ. Кнопка "Clear" служит для произвольной очистки в случае ошибки.

Смена кода: Если верить паспорту микроконтроллера, то количество гарантированных циклов данной операции ограничено 100000.
Для смены текущего кода необходимо знать сам код и код входа в данный режим.

Поэтому процедура выглядит следующим образом:

1. Ввести комбинацию "123" (она фиксирована), нажать "Ok". На индикаторе отобразиться строка "Enter code" ("Введите код")
2. Ввести ваш старый код (при первом запуске все 0) и нажать "Ok". Если все правильно, то вы перейдете на следующий уровень (("Enter new" (Введите новый)), в противном случае - сообщение об ошибке, блокировка и переход в РО.
3. Ввести новый код, который отображается на индикаторе соответствующими символами при нажатии клавиш. При переполнении количества символов, отображаться и использоваться будут те, что были введены первыми. Если количество символов соответствует необходимому, то после нажатия на "Ok" появиться сообщение "Code is changed (Код изменен)", устройство перепишет код в EEPROM и перейдет в РО с измененным кодом. В противном случае-сообщение о несоответствии количества символов и переход в РО. На любом этапе смены кода выход из данного режима осуществляется нажатием на кнопку "Clear". Это необходимо в том случае, если вы не согласны с тем, что ввели. Так как в данной операции на ЖКИ отображается реальный код, то ее следует производить при отсутствии посторонних.

Для данного устройства было написано 6 прошивок: русский и английский язык по 4, 6 и 9 символов. Английский вариант предусмотрен в тех случаях, когда контроллер ЖКИ не отображает русских символов. У них нет функции "мастер код", при помощи которой можно открыть замок в независимости от основного кода. Код" 123" не осуществляет воздействия на выходы устройства. Для настройки на внутренний генератор 8 МГц необходимо установить биты конфигурации (они же FUSE bits) CKSEL 0-3 в положение 1101 соответственно. В программаторе от "CodeVisionAVR" 1 соответствует установленная "галочка", т.е. данный бит программируется

Скачать прошивки (разные варианты).

Скачать проект в протеусе.

cxema21.ucoz.ru

Три схемы простейших кодовых замка.

РадиоКот >Схемы >Цифровые устройства >Бытовая техника >

Три схемы простейших кодовых замка.

Представлю вашему бесценному вниманию несколько простых схемок для охраны вашего спокойствия. В настоящее время радиолюбительский рынок прочно наводнили устройства, которые используются в системах оповещения и сигнализации. Эти устройства, от самых простых до сложных, собраны, как правило, по стандартным классическим схемам. Все рассматриваемые устройства доступны для повторения начинающими радиолюбителями - конструкторами, не обладающими глубокими теоретическими знаниями в электронике, и могут быть использованы для охраны таких объектов, как квартиры, офисы, дачи и т.п. от несанкционированного доступа.
Кодовый замок вообще очень удобная и практичная вещь. Тебе не нужно постоянно таскать кучу металлических ключей в кармане чтобы открыть тот или иной сарай, для этого достаточно просто вспомнить код записанный к тебе в мозг или в книжку твоего мобильного телефона, вообще кодовые замки по своим характеристикам можно разделить на несколько групп, но самые популярными остаются только две - механические и электронные. Каким из этих чудес техники воспользоваться решать вам, мы же рассмотрим лишь некоторые конструкции с электронной начинкой. Большинство электронных кодовых замков выполнено на микросхемах хорошо известных вам триггеров К561ТМ2, КТ3 или на специализированных как раз для этого дела микросхем, особенно изощренные конструкции появляются в наше время на микроконтроллерах и сенсорах.

Итак, первый наш охранник спокойствия - Кодовый замок на микросхеме 4017.
Да друзья микросхема так и называется 4017, существует множество фирм выпускающих эту продукцию исходя из этого буквы перед цифрами могут немного видоизменяться, например моя микросхема родом из Китая, однако потомки Конфуция смело и бесцеремонно белым по черному корпусу влепили логотип PHILIPS и, следовательно, маркировка следующая: HEF4017BP. Но ближе к телу.
Предлагаемая схема поможет вам собрать простой кодовый замок с высокой шифростойкостью. Чтобы подобрать забытый вами по пьяни или по другим причинам код, придется перебрать 10000 вариантов. При этом код замка состоит из 4-х цифр нажатых в определенной последовательности. Итак, сама схема:

На мой взгляд, ничего сложного, спаял, повесил. Принцип работы этого девайса не отличается от принципа работы других электронных кодовых замков на микросхемах. Кто долгое время копается в стране электроники уже в этом шарит, но для новичков поясню.
Кнопками S6-S9 на схеме обозначены "правильные" кодовые цифры, кнопками S1-S5 - цифры, которые в коде не нужны вовсе.
Первоначально на выводе 3 мc присутствует напряжение (логическая "1"). Когда нажимается кнопка "S6", логическая "1" поступает на вход счетчика 14, и логическая "1" появляется на выводе 2. Таким же образом, после нажатия кнопки "S7" логическая "1" появляется на выходе 4, а после нажатия кнопки "S8" - на выходе 7. После нажатия последней верной цифры - "S9" - логическая "1" появляется на выходе 10, транзистор VT2 открывается, реле срабатывает и своими контактами подключает нагрузку. Срабатывание реле индицируется светодиодом.
В случае нажатия любой из "неверных" цифр (S1-S5) логическая "1" поступит на вывод 15 ("Reset"- сброс в исходное состояние), и подбор кода придется начинать сначала. Вот такая вредная пакость.

Следующий замок на микросхеме К561ИЕ9 и полевом транзисторе КП501А.
Принципиальных отличий в сложности от предыдущей схемы немного, в общем смотри сам:

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

Далее.
Замок на микросхеме К561ТМ2.
Точнее на двух микросхемах.

Работает электрическая схема следующим образом. В начальный момент, при подаче питания, цепь из конденсатора С1 и резистора R1 формирует импульс обнуления триггеров (на выходах 1 и 13 микросхем будет лог "0"). При нажатии на кнопку первой цифры кода (на схеме - SВ4), в момент ее отпускания триггер D1.1 переключится, т. е. на выходе D1/1 появится лог. "1", так как на входе D1/5 есть пог. "1". При нажатии очередной кнопки, если на входе 0 соответствующего триггера имеется лог. "1", т. е. предыдущий сработал, то пог. "1" появится и на его выходе. Последним срабатывает триггер D2.2 , а чтобы схема не осталась в таком состоянии надолго, используется транзистор VT1. Он обеспечивает задержку обнуления триггеров. Задержка выполнена за счет цепи заряда конденсатора С2 через резистор R6. По этой причине на выходе D2/13 сигнал лог. "1" будет присутствовать не более 1 секунды. Этого времени вполне достаточно для срабатывания реле К1 или электромагнита. Время, при желании, легко можно сделать значительно больше, применив конденсатор С2 большей емкости.
В процессе набора кода нажатие любой ошибочной цифры обнуляет все триггеры.
Ну вот в принципе и все.

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

Вопросы, как обычно, складываем тут.


Как вам эта статья?

Заработало ли это устройство у вас?


Эти статьи вам тоже могут пригодиться:

www.radiokot.ru

Кодовый замок | AVR Lab устройства на микроконтроллерах AVR

  • #include <avr/io.h>

  • #include <avr/interrupt.h>

  •  

  • #define NUMBER_SIZE 6 //Максимальная разрядность числа

  •  

  • #define RS 2 //RS=PD2

  • #define E 3 //E=PD3

  •  

  • #define TIME 10 //временная константа для ЖКИ

  • //Тактовая частота 4Mhz

  •  

  • #define CODE 123456 //Код нашего кодового замка

  •  

  • unsigned char key_code[4][4]={{'C','D','E','F'},

  • {'B','3','6','9'},

  • {'A','2','5','8'},

  • {'0','1','4','7'}}; //Коды клавиш

  •  

  • unsigned char row[NUMBER_SIZE]={}; //массив, который содержит нажатые клавиши

  • unsigned char row_counter=0; //количество нажатых клавиш

  •  

  • unsigned long int number=0; //Число морганий курсора

  •  

  • void pause (unsigned int a)

  • { unsigned int i;

  •  

  • for (i=a;i>0;i--)

  • ;

  • }

  •  

  • //Передача команды ЖКИ

  • void lcd_com (unsigned char lcd)

  • { unsigned char temp;

  •  

  • temp=(lcd&~(1<<RS))|(1<<E); //RS=0 – это команда

  • PORTD=temp; //Выводим на portD старшую тетраду команды, сигналы RS, E

  • asm("nop"); //Небольшая задержка в 1 такт МК, для стабилизации

  • PORTD=temp&~(1<<E); //Сигнал записи команды

  •  

  • temp=((lcd*16)&~(1<<RS))|(1<<E); //RS=0 – это команда

  • PORTD=temp; //Выводим на portD младшую тетраду команды, сигналы RS, Е

  • asm("nop"); //Небольшая задержка в 1 такт МК, для стабилизации

  • PORTD=temp&~(1<<E); //Сигнал записи команды

  •  

  • pause (10*TIME); //Пауза для выполнения команды

  • }

  •  

  • //Запись данных в ЖКИ

  • void lcd_dat (unsigned char lcd)

  • { unsigned char temp;

  •  

  • temp=(lcd|(1<<RS))|(1<<E); //RS=1 – это данные

  • PORTD=temp; //Выводим на portD старшую тетраду данных, сигналы RS, E

  • asm("nop"); //Небольшая задержка в 1 такт МК, для стабилизации

  • PORTD=temp&~(1<<E); //Сигнал записи данных

  •  

  • temp=((lcd*16)|(1<<RS))|(1<<E); //RS=1 – это данные

  • PORTD=temp; //Выводим на portD младшую тетраду данных, сигналы RS, E

  • asm("nop"); //Небольшая задержка в 1 такт МК, для стабилизации

  • PORTD=temp&~(1<<E); //Сигнал записи данных

  •  

  • pause(TIME); //Пауза для вывода данных

  • }

  •  

  • //Иниализация ЖКИ

  • void lcd_init (void)

  • {

  • lcd_com(0x2c); //4-проводный интерфейс, 5x8 размер символа

  • pause(100*TIME);

  • lcd_com(0x0c); //Показать изображение, курсор не показывать

  • pause(100*TIME);

  • lcd_com(0x01); //Очистить DDRAM и установить курсор на 0x00

  • pause (100*TIME);

  • }

  •  

  •  

  • void init_timer (void)

  • {

  • TIMSK=(1<<TOIE0); //Разрешить прерывания по переполнению таймера0

  • TCCR0=(1<<CS00)|(1<<CS01)|(0<<CS02); //Делитель =/64

  • }

  •  

  • //Проверка, является ли х цифрой, если да результат =1, иначе результат =0

  • unsigned char is_digit (unsigned char x)

  • {

  • if ((x>='0')&&(x<='9')) return 1;

  • else return 0;

  • }

  •  

  • //Конвертирует "row" в int значение number

  • void get_number(void)

  • { unsigned char i;

  • number=0;

  • for (i=0;i<row_counter;i++)

  • {

  • number=number*10;

  • number=number+row[i]-0x30;

  • }

  • }

  •  

  • //Пишем row на ЖКИ

  • void write_row (void)

  • { unsigned char i;

  •  

  • lcd_com(0x86); //Перейдем в начало

  • for (i=0;i<row_counter;i++) //Пишем row

  • lcd_dat(row[i]);

  • for(i=row_counter;i<NUMBER_SIZE;i++) //Очистим незаполненные ячейки

  • lcd_dat(' ');

  • }

  •  

  • ISR (TIMER0_OVF_vect)

  • { unsigned char i,j;

  •  

  • DDRC=0x00; //PortC как вход

  • PORTC=0x0f;

  • DDRB=0x0f; //PortB как выход

  • PORTB=0x00;

  •  

  • pause(10); //Задержка для устренения всяких переходных процессов, важно ее не забыть!

  • i=4;

  • if ((PINC&0x01)==0x00) i=0; //Если нажата клавиша в 0й колонке, i=0

  • if ((PINC&0x02)==0x00) i=1; //...

  • if ((PINC&0x04)==0x00) i=2;

  • if ((PINC&0x08)==0x00) i=3;

  •  

  • DDRC=0x0f; //PortC как выход

  • PORTC=0x00;

  • DDRB=0x00; //PortB как вход

  • PORTB=0x0f;

  •  

  • pause(10); //Задержка для устренения всяких переходных процессов, важно ее не забыть!

  • j=4;

  • if ((PINB&0x01)==0x00) j=0; //Если нажата клавиша в 0й строке, j=0

  • if ((PINB&0x02)==0x00) j=1; //...

  • if ((PINB&0x04)==0x00) j=2;

  • if ((PINB&0x08)==0x00) j=3;

  •  

  • if ((i!=4)&&(j!=4))

  • { //Если была нажата клавиша

  • while ((PINB&_BV(j))==0x00) //Ждем отжатия

  • ;

  •  

  • if ((is_digit(key_code[i][j])==1)&& //Нажата цифра и не достигнут лимит в NUMBER_SIZE

  • (row_counter<NUMBER_SIZE)) { //Добавить в row и увеличить row_counter

  • row[row_counter]=key_code[i][j];

  • row_counter++;

  • }

  • if (key_code[i][j]=='F') row_counter=0x00; //Если нажата 'F' очищаем row

  • if ((key_code[i][j]=='E')&&

  • (row_counter>0x00)) row_counter--; //Если нажата 'E'

  • //и есть введенные цифры – удалить последнюю

  • if (key_code[i][j]=='C') { //Если нажата 'C' тогда сверяем number и код доступа замка

  • get_number();

  • if (number==CODE) {

  • //отпираем замок

  • }

  • }

  • }

  • write_row(); //Пишем row на ЖКИ

  • }

  • TCNT0=0x00; //Очищаем таймер и флаг переполнения

  • TIFR=0x00;

  •  

  • return;

  • }

  •  

  • int main(void)

  • {

  • DDRD=0xfc; //Инициализация PortD

  • PORTD=0x00;

  •  

  • pause(1000); //Задержка для включения ЖКИ

  • lcd_init(); //Инициализация ЖКИ

  • init_timer(); //Инициализация нулевого таймера

  • lcd_dat('D'); //Напишем на ЖКИ "Data= "

  • lcd_dat('a');

  • lcd_dat('t');

  • lcd_dat('a');

  • lcd_dat('=');

  • lcd_dat(' ');

  •  

  • sei(); //Разрешения прерываний

  •  

  • while(1) //Вечный цикл

  • ;

  •  

  • return 1;

  • }

  • avrlab.com

    Электронный кодовый замок на ATmega8 « схемопедия


    Данный проект будет отличным вариантом для повторения новичками, в нем используется ЖКИ дисплей 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)

    shemopedia.ru

    Отправить ответ

    avatar
      Подписаться  
    Уведомление о