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

Содержание

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

Работаю я электромонтером в районе Крайнего Севера. Зимой у нас всегда возникала проблема, замерзает замок на входе в электроцех. И вот попался мне на глаза журнал «Радио» №5 за 2008 год. Там была опубликована статья Е. Переверзева «Цифровой кодовый замок».

Решил и сделал. Перерисовал печатку из журнала. Спаял схему.
Залил прошивку и схема заработала сразу, хотя это моя первая схема на микроконтроллере.

Содержание / Contents

На схеме показан аккумулятор, но я его не ставил.
Отсутствие электричества в электроцехе — это нонсенс, но на печатке аккумулятор я учел.
Файл «1.hex» — прошивка флэш, файл «2.hex» — прошивка EEPROM.
В EEPROM изначально заносится код открытия «1, 2, 3». Смена кода производится на открытом замке, после нажатия кнопки «#». Код может содержать до 125 знаков.

Версия печатки из статьи Е. Переверзева

Саму схему, кнопки «Открытие», «Закрытие», блок питания разместил к коробочке из под блока управления вакуумным выключателем.


Блок питания использовал от старого сканера.
Соленоид использовал от старой электоролаборатории, один минус — соленоид потребляет 1,5 А.

Клавиатуру взял от старого телефона.


Резиновые контакты пришлось удалить, т.к на морозе они работать не будут. На их место поставил кнопки SWT-9. Установить замок пока нет возможности (холодно). Но схема полностью работоспособна.

В архиве находятся печатка, схема, список компонентов и установка фузов, папка с прошивкой.
▼ Файловый сервис недоступен. Зарегистрируйтесь или авторизуйтесь на сайте.

Оригинальная статья из «Радио»:
▼ Файловый сервис недоступен. Зарегистрируйтесь или авторизуйтесь на сайте.

Вячеслав (vik_67)

Россия г. Новый Уренгой

Работаю электромонтером. Мое хобби машина, компьютер. Хотелось бы попробовать сделать что нибудь своими руками. Вобщем то заинтересовался микро контроллерами. Достижений пока не имею ни каких.

 

09.06.16 изменил Datagor. Исправлена схема, обновлен архив

Простейший кодовый замок на реле, для начинающих


Начну с того, что на работе у меня стоял какой-то древний самодельный кодовый замок, который уже не работал. Дверь можно было открыть одновременным нажатием всех кнопок.
И тут мне начальство не то чтобы приказало, но предложило мне из имеющихся в наличии ресурсов разобраться с этим замком, т.к. оно (начальство) знало, что я радиолюбитель.

Я решил сделать новый замок. Обычно легче собрать нечто с нуля, чем чинить, не имея ни схемы, ни малейшего понятия об устройстве.
Начал с простейших транзисторных ключей с временной задержкой. Собрал схему. В теории все работало, на практике нет.

Перерыл в Гугле много разной информации, но ничего простого так и не нашел. А требовалось собрать бесплатно, из подножных материалов…

Содержание / Contents

Отошел от транзисторных ключей. Задумался над созданием замка на триггерах, но подходящих микросхем в наличии не было. И тут я наткнулся на схему триггера на 4-х электромагнитных реле. Уже что-то, но для замка на 4 цифры требовалось аж 16 реле.

Что мне нужно было: код из четырех цифр, которые нажимаются последовательно, а при одновременном нажатии всех кнопок панели замок, естественно, не должен открываться. На основе найденной схемы, была разработана очень простая рабочая схема кодового замка на электромагнитных реле.

Для сборки замка потребуется всего ничего, а именно:

1. 5 электромагнитных реле, любых. Можно больше. Главное что-бы подходили вам по рабочему напряжению. Ну и еще одно условие, у четырех реле должно быть хотя-бы по одной группе нормально разомкнутых контактов, а в пятом реле — нормально замкнутых. Я использовал РЭС-32.

2. Сам механизм замка (электромагнитный, электромеханический, электромагнитная защелка). Короче то, что у вас есть или вы сможете приобрести или сами сделать.

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

4. Кнопка для открывания двери изнутри помещения.

5. Геркон с нормально разомкутыми контактами и небольшой магнит. Например, такое используют в сигнализации.


Ну или можно геркон выковырить из старого домашнего телефона (такой геркон можно вытащить из телефона, у которого трубка ложится на корпус и при этом не нажимает никаких видимых рычагов. Там в трубке собственно спрятан магнит, а в корпусе телефона — геркон), а магнит например из старого шкафа. Там на дверках стоят такие маленькие магнитики.

6. Паяльник, провода, припой, канифоль и прямые руки.

Вот моя схема на четыре цифры.

Принцип работы замка очень прост. На рисунке представлена схема замка в исходном положении при открытой двери.

При закрытии двери геркон замыкается и питание подается через нормально замкнутые контакты Р1 на нормально разомкнутые контакты Р2 (второе реле). Реле Р2 — Р5 включены по схеме самоподхвата.

В наборе кода участвуют кнопки КЛ2 — КЛ5. При нажатии кнопки КЛ2 запитывается реле Р2, и соответственно реле получает питание, и ее контакты замыкаются. При отпускании КЛ2 реле продолжает питаться через собственные контакты. Дальше питание поступает на контакты реле Р3 и таким-же образом до реле Р5. При замыкании контактов реле Р5, питание поступает, но исполняющее устройство (в моем случае это электромагнитная защелка, но может быть и высоковольтное реле, при питании механизма замка от 220В.)

Есть еще кнопки КЛ1 и КЛ6. При нажатии кнопки КЛ1 обесточивается вся дальнейшая схема, все реле сбрасываются в начальное положение. Паралельно КЛ1 включаются все свободные кнопки наборной панели.
Кнопка КЛ6 — это открытие замка изнутри помещения. При нажатии КЛ6 поочередно срабатывают реле р5-р4-р3-р2 и продолжают держать свои контакты, пока не откроется дверь (не разомкнется геркон и вся цепь не обесточится. Тоже происходит и при правильном наборе кода, только реле срабатывают в обратном порядке 2-3-4-5).

К относительным недостаткам этого замка можно отнести следующее:
1. Открытие двери и при одновременном нажатии всех «правильных кнопок».
2. Отсутствие резервного источника питания. При пропадании питания — замок не открыть. Хотя зарезервировать можно с помощью акума и еще одной релюшки.
3. Нельзя выбрать код с повторяющимися цифрами, например такой: 2325.

Вот фото моих двух замков. Работают уже больше года без проблем. Главное — придумать кодовую панель, но это уже дело вкуса.

Все реле вот в такой вот коробочке и блок питания

А это кодовая панель, здесь уже посложнее изготовление.

Прошу прощения за темные секунды, но там не хватало света.

Спасибо за внимание!

Дмитрий (criiol)

Беларусь

О себе автор ничего не сообщил.

 

AVR245: кодовый замок с клавиатурой 4×4 и I2C LCD | avr

Перевод даташита AVR245: Code Lock with 4×4 Keypad and I2C LCD on a tinyAVR [1], посвященного практической реализации кодового замка на микроконтроллере AVR.

Особенности кодового замка:

• Пример приложения идеально демонстрирует эффективное использование портов микроконтроллера, так что кодовый замок можно сделать на микроконтроллере с небольшим количеством выводов (14-выводный ATtiny24).

• Клавиатурная матрица 4×4 опрашивается через порты ввода/вывода (I/O).
• Для генерации звуков через пьезоэлектрический излучатель используется таймер/счетчик.
• Для обмена с экраном LCD (интерфейс I2C™) используется USI (универсальный последовательный интерфейс) в двухпроводном режиме (TWI).
• Программа firmware микроконтроллера полностью написана на C.

[1 Введение]

Кодовые замки делают задачу управления доступа в помещение более гибкой и простой для конфигурирования.

Механические замки требуют изготовления новых ключей, когда нужно дать привилегию доступа новым пользователям. Традиционный замок может быть переконфигурирован или заменен для изменения привилегий доступа одного пользователя, и если ключи потеряны, то требуется замена всего замка или его кодовой вставки. Подобные ситуации могут произойти, когда люди переезжают с одного места на другое, или когда компания принимает на работу новых сотрудников (или увольняет старых). Кодовые замки имеют преимущество, так как их можно просто перепрограммировать и оно могут держать в памяти уникальные коды для каждого пользователя.

Этот апноут описывает, как создать кодовый замок на микроконтроллере AVR и других подходящих компонентах. Кодовый замок использует клавиатурную матрицу 4×4 для ввода пользователя, пьезоэлектрический динамик для звуковых оповещений и экран LCD для вывода информации, см. рис. 1-1. Разработка основана на устройствах ATtiny24/44/84, но её можно просто портировать на другие микроконтроллеры AVR.

Рис. 1-1. Блок-схема кодового замка.

[2 Теоретические основы работы кодового замка]

Описываемый кодовый замок содержит tinyAVR, клавиатуру, LCD, пьезоизлучатель и электромеханический (дверной) замок. AVR постоянно сканирует клавиатуру в ожидании ввода пользователя, и откроет замок, когда будет введена правильная комбинация цифр кода. LCD используется для обратной связи и отображения информации о состоянии замка. Маленькая пьезопищалка используется для выдачи звуковых подтверждений о нажатиях клавиш и состоянии замка (оповещение о том, что дверь открыта).

2.1 Клавиатура

Устройством ввода является стандартная матрица кнопок 4×4. Поле клавиатуры содержит 16 клавиш, расположенных симметрично в 4 строках по 4 клавиши в каждой. Каждый столбец и строка подключен к порту I/O микроконтроллера.

Микроконтроллер постоянно сканирует клавиатуру, устанавливая все выводы строк (это выходы) в лог. 1, кроме одного, и при этом считывает состояние всех портов столбцов (это входы). Все входы столбцов имеют разрешенные верхние внутренние нагрузочные резисторы (pull-up), так что когда кнопка нажата, то на одном из входов столбцов будет прочитан низкий логический уровень.

2.2 Пьезоэлектрический излучатель

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

Излучателем звука в пьезодинамике служит диафрагма. Приложенное постоянное напряжение (DC) к обкладкам диафрагмы заставляет её деформироваться, а если подключить переменное напряжение (AC), то из-за возникающих механических колебаний получается звук. Высота звука, который производит пьезоизлучатель, прямо пропорциональна частоте приходящего переменного сигнала.

Таймер/счетчик AVR хорошо подходит для генерации сигнала управления для пьезоизлучателя.

2.3 LCD

Дисплей, используемый в этой разработке, имеет 2 строки по 16 символов (2×16 LCD), который имеет встроенный контроллер. Специальная особенность дисплея — наличие интерфейса I2C™ с контролером. Интерфейс I2C полностью совместим с двухпроводным интерфейсом (Two-Wire Interface, TWI) который имеется в микроконтроллерах AVR, и поскольку ATtiny24 оборудован универсальным последовательным интерфейсом (Universal Serial Interface, USI), который может работать в режиме TWI, то это означает, что LCD может управляться через только 2 вывода порта.

[3 Реализация]

Аппаратно замок реализован довольно просто. Прототип (макет) довольно просто изготовить с помощью STK500, STK505, если подключить клавиатуру и LCD к разъемам через соединительные кабели.

Прим. переводчика: можно также взять любую из макетных плат AVR-USB-MEGA16, AVR-USB162, AVR-USB162MU, AVR-USB32U4. На каждой из них есть макетное поле, на котором удобно собрать схему замка.

3.1 Аппаратная начинка замка

Схема показана на рисунке ниже.

Рис. 2-1. Принципиальная электрическая схема кодового замка.

Электрический замок является специфическим компонентом, и может быть электромеханической защелкой, магнитным запором, или любым другим замком, управляемым через реле. Такие замки делают многие производители, включая к примеру ASSA, ABLOY, Headen и ESMI.

3.2 Программная часть (firmware)

Код firmware микроконтроллера написан целиком на языке C. Это делает разработку простой для понимания, и делает будущие доработки и разработки на основе этого проекта максимально наглядными.

Программное обеспечение имеет полную документацию на основе doxygen, которая берет информацию из исходного кода (см. readme.html). В документации также приведены требования к компилятору.

3.2.1 Обзор алгоритма firmware

Алгоритм работы программы микроконтроллера показан на рисунке ниже.

Рис. 2-2. Диаграмма алгоритма основной программы замка.

3.2.2 Драйвер TWI

Драйвер TWI осуществляет поддержку протокола последовательного интерфейса с LCD. Драйвер базируется на апноуте AVR310, и использует универсальный последовательный интерфейс (Universal Serial Interface, USI) в двухпроводном режиме (Two-Wire Mode, TWI). Драйвер TWI предоставляет низкоуровневый слой обмена данными между драйвером LCD и контроллером LCD. Модуль драйвера TWI реализован в файлах:

• USI_TWI_Master.c
• USI_TWI_Master.h

3.2.3 Драйвер LCD

Драйвер LCD предоставляет дружественный интерфейс между основной программой и контроллером индикатора LCD. В комплект базовых функций драйвера LCD входят функции инициализации и очистки LCD. Также предоставляются функции для записи одного символа в любое место на экране индикатора, и вывод на экран целой строки текста. Модуль драйвера LCD реализован в файлах:

• LCD. c
• LCD.h

3.2.4 Драйвер клавиатуры

Драйвер клавиатуры использует таймер/счетчик 0 (timer/counter 0) для отсчета интервалов последовательности сканирования клавиатуры. После того, как таймер/счетчик переполнится, происходит переход к следующей активной строке, и по достижении последней строки сканирование начинается заново с первой. Нажатия на клавишу регистрируются и декодируются с использованием прерываний по изменению логического уровня на выводе (Pin Change Interrupt). Модуль драйвера клавиатуры реализован в файлах:

• KPD.c
• KPD.h

Примечание: в данной разработке порт отладки debugWIRE требует одной из ножек ATtiny24, которая используется для клавиатуры. Когда в файле KPD.h задан символ DEBUGWIRE, то эта ножка будет освобождена для отладки, но при этом нельзя использовать последнюю строку клавиатуры.

Прим. переводчика: чтобы можно было использовать ножку debugWIRE как обычный порт GPIO, требуется перепрограммирование фьюзов микроконтроллера ATtiny24.

3.2.5 Таймер событий (Event Timer)

В разработке используется сторожевой таймер (watchdog) в качестве обработчика окна события (event window handler). Каждое клавиатурное нажатие обновляет таймер watchdog, и если не было обнаружено никаких клавиатурных нажатий за заданное время, то сработает прерывание watchdog (по переполнению таймера). Для микроконтроллеров серий ATtiny24/44/84 можно выбрать, что будет происходить при переполнении watchdog — либо прерывание, либо аппаратный сброс.

Обработчик прерывания watchdog очистит буфер клавиатуры и очистит строку LCD от символов, которые были введены.

3.2.6 Драйвер пьезопищалки (Buzzer Driver)

Пьезоэлектрический излучатель звука подключен к выходу таймера/счетчика 1. Функция управления пищалкой использует входной параметр для прямой установки выходной частоты звука. Это означает, что ответ по частоте излучения будет обратно пропорционален параметру функции. Другими словами, увеличение значения параметра при вызове функции будет уменьшать частоту звука.

Более дружественный интерфейс должен был бы брать обратную величину от параметра в качестве значения для программирования таймера счетчика. Но это не было сделано по двум причинам: во-первых, генерируемые звуки достаточно просты, чтобы их заранее задать константами, а во-вторых, применение обратной величины потребует операций деления и значительно увеличит размер кода.

[4 Быстрый старт, как работает замок для пользователя]

Подайте питание на схему замка. Программа firmware отобразит приветственное сообщение:

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

Если в течение нескольких секунд не будут нажиматься клавиши, то буфер клавиатуры и вторая стока будут очищены.

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

[5 Указания по разработке]

Здесь рассмотрены некоторые идеи по улучшению и продолжению разработки кодового замка.

5.1 Защита от статического электричества (ESD Protection)

В некоторых случаях может потребоваться защита внутренней электроники от внешнего статического электричества (Electro-Static Discharge, ESD, электростатический разряд). Это можно осуществить добавлением токоограничивающих резисторов, включенных последовательно с столбцами и строками клавиатурной матрицы — в том месте, где они подключаются к микроконтроллеру. Как это сделать, показано на рисунке ниже.

Рис. 5-1. ESD-защита портов клавиатуры.

Резисторы могут иметь номинал около 1 кОм, или немного меньше.

5.2 Как можно освободить ножки I/O микроконтроллера

Эта разработка использует все доступные порты GPIO 14-выводного микроконтроллера AVR (ATtiny24). Это не очень удобно, поскольку для GPIO задействована даже ножка сброса (используется также как порт отладки GPIO). Для приложений, которым нужно больше портов I/O, можно было бы освободить некоторые порты, так что не будет необходимости мигрировать на микроконтроллер с большим количеством ножек. На сегодняшний день, для нашего кодового замка можно применить даже 8-выводный микроконтроллер AVR (например, ATtiny45 или ATtiny85). В этом разделе приведены советы по экономии портов ввода/вывода.

5.2.1 Уменьшение клавиатуры

Матрицу клавиатуры 4×4 можно было бы заменить на 4×3. Почти всегда этого будет достаточно, так как останутся 10 цифровых кнопок и две для дополнительных функций. Этот подход позволит сэкономить 1 порт I/O.

5.2.2 Мультиплексирование клавиатуры и LCD

Рассмотрите возможность совмещение портов для клавиатуры и LCD. Не требуется записывать в LCD и читать клавиатуру одновременно. Таким образом, эти функции могут быть мультиплексированы, и это позволит освободить 2 порта ввода/вывода. Прим. переводчика: однако это либо усложнит схему, либо усложнит код.

5.2.3 Компактный клавиатурный интерфейс

Рассмотрите вариант, что применение диодов позволит уменьшить количество выводов, требуемых для чтения клавиатуры. Можно использовать только 4 I/O для управления клавиатурной матрицей 4×3. Это изменение сохранит до 4 портов I/O. Для такого подключения потребуется 6 диодов, как показано на рис. ниже.

Рис. 5-2. 4-проводный интерфейс с клавиатурой 3×4.

В такой конфигурации драйвер клавиатуры может быть аналогичный тому, что применяется обычно; будут отличаться только коды возврата от портов I/O. Теперь не будет зависимости один-к-одному между нажатой клавишей и возвращенному коду. Нажатие одной клавиши может поменять состояние больше чем одного порта I/O.

Алгоритм для сканирования клавиатуры следующий. Сначала все 4 порта I/O устанавливаются как входы, и разрешаются резисторы pull-up. Затем одна из ножек I/O настраивается на выход с лог. уровнем 0, и читается состояние остальных портов I/O. Трехбитный считанный код покажет, была ли нажата кнопка в соответствующей строке, или нет. Таким же образом повторяется сканирование всех портов I/O, подключенных к клавиатуре.

Прим. переводчика: можно также уменьшить количество подключений к клавиатуре, если применить каналы АЦП и набор резисторов. К примеру, несколько кнопок можно опрашивать, если они будут подключены ко входу АЦП через набор резисторов. Какая кнопка нажата, можно определить по уровню напряжения, которое будет считано с помощью АЦП.

5.3 Дополнительные устройства с интерфейсом I2C

код firmware уже содержит в себе драйвер для обмена по шине I2C, так что очень просто можно добавить поддержку других устройств с интерфейсом I2C, так как их можно подключить параллельно к той же самой шине. Вот несколько примеров таких устройств:

• Карт-ридеры (доступ может быть организован не вводом кода, установкой в считыватель карты-ключа).
• Сенсоры отпечатка пальца.
• Сенсоры для удаленного управления (такие как инфракрасный пульт, или радиоинтерфейс).
• Дополнительные микросхемы памяти (к примеру, для хранения кодов доступа.

5.4 Добавление нескольких кодов доступа

В разработке можно применить индивидуальные кода доступа для каждого пользователя. Количество кодов ограничено только объемом доступной памяти. Изначально программа firmware помещается в память ATtiny24 без каких-либо техник сжатия кода. Если применить оптимизацию кода по размеру (путем установки компилятора IAR в режим генерации кода для релиза, Release Mode), то можно освободить место в памяти программ для хранения дополнительных кодов доступа. Конечно же, больше места в памяти имеют другие микроконтроллеры, полностью совместимые по функционалу и портам GPIO, такие как ATtiny44 и ATtiny84.

Прим. переводчика: для хранения кодов доступа можно использовать также EEPROM, встроенную в AVR, или внешние микросхемы EEPROM, которые имеют интерфейс I2C. Эти микросхемы можно также подключить к шине I2C вместе с контроллером LCD.

[Ссылки]

1. AVR245: Code Lock with 4×4 Keypad and I2C LCD on a tinyAVR site:atmel.com.
2. Подключение клавиатуры к AVR.
3. AVR245.zip — исходный код замка, документация.

Самодельные кодовые замки (три схемы на тиристоре, микросхемах и МК)

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

Схема кодового замка на тиристоре

На рисунке 1 показана схема наиболее простого варианта. «Триггером» является тиристор типа MCR100 (на любое напряжение). В его анодной цепи включено электромагнитное реле К1, которое, собственно, и служит выключателем. Питается схема от источника постоянного тока напряжением 12V.

Для включения используется клавиатура, состоящая из десяти кнопок S0-S9 (кнопки для удобства пронумерованы теми же цифрами, как и подписаны). Код задается соответствующим соединением кнопок. Кнопки все переключающие.

Кнопки, номера которых входят в кодовое число (в данном случае код:0478, соответственно, кнопки SO, S4, S7, S8) включены последовательно, используя замыкающие контакты. Кнопки, не входящие в кодовое число (в данном случае, S1, S2, S3, S5, S6, S9) включены последовательно размыкающими контактами.

Цепь из кнопок кодового числа включена через резистор R1 между управляющим электродом тиристора и плюсом питания 12V (до кнопки S10). Поэтому, при одновременном нажатии этих кнопок происходит подача открывающего тока на управляющий электрод тиристора, и он открывается, включая ток на обмотку реле К1, а то замыкает свои контакты и ими включает нагрузку или аппаратуру, для включения которой данная схема используется.

Рис. 1. Схема простого кодового замка на тиристоре MCR100.

Цепь кнопок, не входящих в кодовое число включена последовательно питанию обмотки реле К1 и тиристора VS1. Если будет нажата хотя бы одна из кнопок, не входящих в кодовое число, происходит разрыв цепи и на анод тиристора не поступает напряжение. Поэтому ток на реле тоже не поступает, даже если и были при этом нажаты все кнопки кодового числа.

После правильного набора кода, то есть, одновременного нажатия только кнопок, составляющих кодовое число, контакты реле К1 остаются включенными неограниченное время. Чтобы выключить, нужно нажать кнопку S10, которая служит для выключения. При этом размыкается цепь питания, и тиристор закрывается, после отпускания S10 он остается закрытым до очередного правильного набора кода.

Кодовый замок на микросхемах

Недостаток схемы на рисунке 1 в том, что кнопки кода нужно нажимать одновременно. Более удобен вариант, в котором кнопки нажимают последовательно согласно последовательности цифр в кодовом числе.

Такая схема показана на рисунке 2. Схема построена на двух микросхемах К561ТР2 и К561ЛА7. Кроме последовательного набора кода, здесь еще звуковая индикация нажима каждой кнопки.

Клавиатура для включения состоит из десяти кнопок S0-S9 (кнопки для удобства пронумерованы теми же цифрами, как и подписаны). Код состоит из четырех цифр, кнопки которых нужно нажимать последовательно.

В данном случае, код: 0478, соответственно, нужно сначала нажать кнопку S0, затем S4, затем S7 и закончить нажатием S8. Только в таком порядке. Естественно, код может быть и другим, все зависит от распайки кнопок.

Рис. 2. Принципиальная схема кодового замка на микросхемах К561ТР2 и К561ЛА7.

Микросхема К561ТР2 имеет такую особенность, что её RS-триггеры имеют приоритет по входам «S». То есть, пока на входе «S» есть единица состояние триггера «1», и оно не меняется при подаче единицы на его вход «R». Все четыре триггера микросхемы соединены так, что выход одного триггера соединен с входом «S» другого.

В результате, всю эту систему из четырех RS-триггеров можно установить в состояние нуля на выходе D1.4 только последовательной установкой в нулевые состояния, сначала D1.1, затем D1.2, затем D1.3 и только после этого, D1.4. И никак иначе.

Для установки триггеров в нулевые состояния нужно подать логическую единицу на вход «R». Здесь это делается четырьмя кнопками, выбранными по номерам соответственно коду. В данном случае код: 0478,соответственно, это кнопки SO, S4, S7, S8.

Эти кнопки включены так, что при их нажатии поступает логическая единица на «R» вход соответствующего триггера. После последовательного нажатия кнопок кода на выходе D1.4 появляется логический ноль. Он инвертируется элементом D1.4 и на управляющий электрод тиристора VS1 поступает через резистор R9 открывающий ток. Тиристор открывается и реле К1 включает своими контактами нагрузку или оборудование.

Для того чтобы установить единицу на выходе D1.4 нужно подать единицу на вход «S» D1.1. При этом все четыре триггера микросхемы D1 последовательно установятся в единичное состояние.

Все кнопки, номера которых не соответствуют коду, соединяют параллельно, и подключают к выводу 14 D1.1. При нажатии любой из них все триггеры возвращаются в исходное единичное состояние.

Для звуковой сигнализации нажатий кнопок используется мультивибратор на логических элементах D1.1 и D1.2. При нажатии любой из кнопок открывается один из диодов VD1-VD5 и подает напряжение логической единицы на вывод 2 D1.1. При этом мультивибратор запускается и звучит пьезоэлектрический звукоизлучатель BF1.

Звук длится столько времени, сколько нажата кнопка.

Для автоматического сброса схемы триггеров после включения реле К1 служит схема на конденсаторе С1, резисторе R7 и логическом элементе D1.3.

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

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

Недостаток схемы на рисунке 2, как и на рисунке 1, в том, что код приходится задавать распайкой кнопок, и его невозможно оперативно изменить. На рисунке 3 приводится схема, позволяющая оперативно менять код. Код, как и в схеме на рис.2, набирается последовательным нажатием кнопок кодового числа.

Схема выполнена на микроконтроллере P1C16F84A. Это позволяет оперативно изменять код, потому что он хранится в памяти микроконтроллера. Клавиатура для набора кода состоит из 16-ти кнопок.

Рис. 3. Принципиальная схема кодового замка на микроконтроллере P1C16F84A.

Это готовая клавиатура от стационарного сотового телефона с кнопочным набором номера. На схеме кнопки пронумерованы соответственно их обозначению на этой клавиатуре. Код четырехзначный, но может состоять не только их цифр от 0 до 9, но и букв от А до D. К тому же, цифры (и буквы) могут повторяться.

Это существенно увеличивает количество возможных кодовых комбинаций.

При наборе правильного кода на выводе порта RB2 микроконтроллера появляется импульс, который поступает на управляющий электрод тиристора VS1 через резистор R2. Тиристор открывается и реле К1 включает своими контактами нагрузку или оборудование.

Чтобы набрать код, нужно набрать четырехзначный код на клавиатуре последовательным нажатием соответствующих кнопок, затем подтвердить код нажатием кнопки #.

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

По умолчанию, после программирования микроконтроллера, в нем задан код «1234». Чтобы изменить код, нужно набрать действующий код, затем, нажать кнопку * и два раза набрать новый код через кнопку #. Например, чтобы установить новый код 0478, нужно набрать следующее: 1234*0478#0478#. После этого схема будет включать нагрузку или оборудование после последовательного набора 0478#.

Исходный файл на ассемблере — Скачать (2 КБ).

Тимуров А. РК-2016-05.

Литература:

  1. Котов В. Кодовый замок. РК-2006-04.
  2. Сайт jap.ru/electronics/.

Собери свою радиосхему!

Решил поиграться с давно заказанной с китая мембранной клавиатурой 3×4. Есть много видов и разновидностей данной клавиатуры, есть в пластмассовых корпусах, а есть пленочные. У моего вариант 3×4 7 контактов, распиновка клавиатуры 4×4 показана на схеме ниже, схема один к одному. Схема почти идентична с клавиатурой 3×4 за исключением того что отсутствует правый ряд клавиш «A,B,С,D». 

Схема подключения клавиатуры 3×4 :

Клавиатура 4×4 подключается аналогично, четвертый ряд «A,B,С,D» подключается к порту PD7 микроконтроллера. 

Исходный код программы:

$regfile = «m8def.dat»
$crystal = 1000000

‘конфигурация дисплея
Config Lcdpin = Pin , Rs = Portc.0 , E = Portc.1 , Db4 = Portc.2 , Db5 = Portc. 3 , Db6 = Portc.4 , Db7 = Portc.5
Config Lcd = 20 * 4
Cursor Off
Cls

‘конфигурация клавиатуры
Config Kbd = Portd , Debounce = 40 , Delay = 100

 

‘переменные
Dim Key_char As Byte                                        ‘номер нажатой клавиши
Dim Key_str As String * 1                                   ‘символ нажатой клавиши на клаивиатуре
Dim Result As String * 20                                   ‘результат нажатий на клавиатуру
Deflcdchar 1 , 32 , 14 , 10 , 31 , 27 , 27 , 14 , 32        ‘

Locate 1 , 4
Lcd Chr(1)

Result = «»

‘Главный цикл программы
Do

Key_char = Getkbd()                                         ‘когда клавиша не нажата функция возвращает переменной значение 16

If Key_char <> 16 Then                                      ‘если переменная не равна 16, значит была нажата кнопка
Key_str = Lookupstr(key_char , Keyboard_data)               ‘вытаскиваем из массива символ нажатой клавиши
Result = Result + Key_str
End If

Locate 2 , 3
Lcd Result                                                  ‘выводим на дисплей результат нажатий

Waitms 100

If Result = «123» Then
Locate 2 , 2
Lcd «UNLOCK»
Wait 1
Goto Pizdec
Else
End If


If Key_str = «5» Then
Locate 2 , 2
Lcd «RETURN»
Wait 1
Goto Pizdec
Else
End If

Loop

End

Keyboard_data:
Data «1» , «4» , «7» , «*» , «2» , «5» , «8» , «0»
Data «3» , «6» , «9» , «#» , «A» , «B» , «C» , «D»

Pizdec:
Return

При удержании клавиши символы начинают повторяться, программу можно слегка доработать если добавить в конец первого в примере строки:


 Key_char = Getkbd() 
 If Key_char <> 16 Then 
 Goto 1 
 End If 

 то мы избегаем повторения символов при удержании клавиши. Можем хоть минуту давить на кнопку, а символ будет один.

 

При включении прибора на верхней строке высвечивается иконка «замок», на нижней строке отображаются вводимые символы.

 

По умолчанию в исходнике код «123», как только мы введем этот код (как только нажмем третью правильную кнопку) на нижней строке выйдет надпись «UNLOCK». 

 

Если при вводе мы ошиблись цифрой, т.е. ввели не ту цифру — нажимаете кнопку 5 чтобы стереть все и начать ввод кода заного, при нажатии на кнопку 5 программа перезапускается. Статья дана лишь в ознакомительных целях и естественно клавишу 5 (клавишу которая стирает цифры) в идеале нужно перенести например на знак «решетка». Из за нехватки времени не стал переделывать, перепроверил все в железе и решил поделиться с вами.

 

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

 

Видео работы кодового замка:

 файлы проекта с исходным кодом (~15кб.)

 

Готовая версия кодового замка:

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

При верном вводе PIN кода привод сработает на 1 секунду, этого времени достаточно для работы механизма замка (открывания двери)? привод подключается через транзистор к порту PORTB. 4. Если же при попытке ввести PIN код ошиблись цифрой, нажимаете кнопку «решетка» и можно начать ввод кода заново…

При правильном вводе PIN кода открывается замок, а на дисплее выводится надпись «UNLOCK».

Проект в Proteus и прошивка лежат ниже в архиве, PIN код замка указан в архиве в названии файла прошивки. 

 

…по материалам сайта avrproject.ru

проект Proteus и файл прошивки (~16кб.)



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

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

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


Цифровой кодовый замок

с ЖК-дисплеем и клавиатурой с использованием микроконтроллера 8051

Система цифрового кодового замка с ЖК-дисплеем с использованием микроконтроллеров 8051 представляет собой систему на основе пароля. Этот проект можно использовать как систему проверки безопасности, чтобы запретить доступ в комнату только посторонним лицам с паролем. Таким образом, этот проект может иметь широкий диапазон названий, таких как цифровой кодовый замок, цифровой кодовый замок безопасности, система защиты паролем, электронный кодовый замок, цифровой кодовый замок.Люди называют этот тип системы безопасности разными именами, хотя все они означают создание системы безопасности на основе пароля с другим микроконтроллером с некоторыми дополнительными функциями, такими как автоматическое открытие или закрытие двери, SMS-оповещение на основе GSM, звуковая сигнализация и т.

Цифровой кодовый замок с ЖК-дисплеем с использованием микроконтроллера 8051

В нашей повседневной жизни безопасность является серьезной проблемой, и цифровые кодовые замки стали важной частью системы безопасности. Для обеспечения безопасности доступно несколько типов технологий, таких как PIR, RFID, Laser, биометрические и т. Д.Даже сейчас существуют цифровые кодовые замки, с которыми можно работать с помощью смартфонов, также основанных на IoT (Интернет вещей). В этой предлагаемой системе мы обсудили простой цифровой кодовый замок с использованием ЖК-дисплея и микроконтроллера 8051, который не может быть закрыт только предопределенным кодом, если мы введем неправильный код, система сгенерирует зуммер.


Блок-схема цифрового кодового замка

Этот проект может быть построен с микроконтроллером серии 8051, клавиатурой, зуммером, ЖК-дисплеем. Здесь микроконтроллер контролирует весь процесс, такой как ввод пароля с клавиатуры, сравнивает введенный пароль с предварительно заданным паролем, включает зуммер и отправляет статус на дисплей.Блок-схема цифрового кодового замка

Модуль клавиатуры

В этом проекте мы подключили клавиатуру 4X4 к микроконтроллеру 8051, используя методы мультиплексирования для ввода цифрового кода в систему. Здесь эта клавиатура 4 × 4 имеет 16 клавиш. Если мы хотим использовать 16 клавиш на клавиатуре, то нам потребуется 16 контактов для подключения микроконтроллера, но в этом методе мы требуем использовать только 8 контактов для взаимодействия с 16 клавишами. Так что он может взаимодействовать с модулем клавиатуры. Пожалуйста, перейдите по этой ссылке, чтобы узнать больше о матричной клавиатуре и ее интерфейсе

Модуль клавиатуры
ЖК-дисплей

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

LCD
AT89C51 Микроконтроллер

AT89C51 — это 8-битный микроконтроллер, который принадлежит к семейству Atmel 8051.


AT89S51 Микроконтроллер

Работа по проекту

Предлагаемая система использует матричную клавиатуру и ЖК-дисплей в качестве устройств ввода и вывода. Необходимо указать четырехзначный предварительно определенный пароль. Этот пароль сохраняется в системе. Если при открытии пароль от матричной клавиатуры совпадает с сохраненным паролем, то замок открывается, и на ЖК-дисплее отображается примечание. Кроме того, вывод o / p сделан высоко для использования в других целях.

Во время работы программы на ЖК-дисплее отображается строка «Введите пароль». Клавиатура проверяется на предмет введенных цифр по очереди. Каждый раз, когда отображается строка и столбец нажатой клавиши, на ЖК-дисплее отображается * параллельно введенному номеру.После того, как пароль введен, потребителя провоцируют «проверить пароль», и снова ключ проходит через ЖК-дисплей. Если заданные пароли не совпадают, отображается примечание с указанием «Неверный пароль»; в противном случае пользователя спровоцируют открыть устройство.

Чтобы открыть, человеку нужно «ввести пароль» с клавиатуры. Клавиатура снова проверяется на наличие введенных цифр и распознаются эквивалентные цифры. Ключ доступа отображается как «****» на ЖК-дисплее. После ввода пароля они сравниваются с заранее заданным паролем.Если все цифры равны заданному паролю, на ЖК-дисплее отображается «Lock Open» («Замок открыт»), и выходной контакт замка становится высоким. Если код неправильный, на ЖК-дисплее будет отправлено сообщение «Неверный пароль». Система будет защищена, если будет сделано более трех попыток с неправильным паролем для разблокировки цифрового кодового замка. В таком случае система желает перестроиться.

Таким образом, речь идет о функционировании цифрового кодового замка с ЖК-дисплеем на микроконтроллерах 8051. Надеемся, вы хорошо поняли проект.Если у вас есть вопросы. Пожалуйста, не стесняйтесь спрашивать, и если вы хотите реализовать аналогичные проекты, такие как проекты на основе клавиатуры, прокомментируйте в разделе комментариев.

Фото предоставлено:

Блок-схема цифрового кодового замка

Блокировка на основе микроконтроллера с использованием кода безопасности цвета

Безопасность. ..

ЗАМОК НА ОСНОВЕ МИКРОКОНТРОЛЛЕРА ИСПОЛЬЗОВАНИЕ ЦВЕТОВОГО КОДА БЕЗОПАСНОСТИ

ТОГДА DAO HUI

UNIVERSITI TEKNOLOGI MALAYSIA

PSZ 19:16 (Pind.1/07)

UNIVERSITI TEKNOLOGI MALAYSIA DECLARATION OF THESIS / UNDERGRADUENT PROJECT PAPER AND COPYRIGHT Полное имя автора:

THEN DAO HUI

Дата рождения

:

14 марта ЗАМОК НА ОСНОВЕ ИСПОЛЬЗОВАНИЯ ЦВЕТОВОГО КОДА БЕЗОПАСНОСТИ

Академическая сессия:

2012/2013

Я заявляю, что эта диссертация классифицирована как:

КОНФИДЕНЦИАЛЬНО

(Содержит конфиденциальную информацию в соответствии с Законом об официальной тайне 1972 года) *

ЗАПРЕЩЕНО Содержит информацию ограниченного доступа, как указано организацией, в которой проводилось исследование) *

ОТКРЫТЫЙ ДОСТУП

Я согласен с тем, что моя диссертация будет опубликована в виде открытого доступа в Интернете (полный текст)

Я подтверждаю, что Universiti Teknologi Malaysia оставляет за собой право на следующее: 1. Диссертация является собственностью Universiti Teknologi Malaysia. 2. Библиотека Universiti Teknologi Malaysia имеет право делать копии только в исследовательских целях. 3. Библиотека имеет право делать копии тезисов для академического обмена. Сертифицировано :

ПОДПИСЬ

8
-01-5369 (НОВЫЙ НОМЕР IC / НОМЕР ПАСПОРТА) Дата: 7

th

ПРИМЕЧАНИЯ:

*

июнь 2013

ПОДПИСЬ НАБЛЮДАТЕЛЯ Prof.

Dr Йохари Халим Шах ФАМИЛИЯ НАЧАЛЬНИКА Осман Дата: 7

th

июнь 2013

Если диссертация является КОНФИДЕНЦИАЛЬНОЙ или ОГРАНИЧЕННОЙ, приложите к письму от организации срок и причины конфиденциальности или ограничения.

«Настоящим заявляю, что я прочитал этот отчет и, по моему мнению, этого отчета достаточно с точки зрения объема и качества для присуждения степени бакалавра электротехники (мехатроника)»

Подпись

:

Имя

: Проф. Д-р Йохари Халим Шах бин Осман

Дата

:

7 июня 2013 г.

БЛОКИРОВКА НА ОСНОВЕ МИКРОКОНТРОЛЛЕРА ИСПОЛЬЗОВАНИЕ КОДА БЕЗОПАСНОСТИ ЦВЕТА

ТОГДА DAO HUI

Руководство для начинающих микроконтроллеров

Джон Уайлдер

Время от времени я вижу, как новички пытаются начать заниматься встраиваемой электроникой, но они просто поражаются и не знают, с чего начать.Некоторые даже совершают ошибку, пытаясь написать свой собственный код, не получив сначала полного понимания микроконтроллера / микропроцессора, с которым они работают, языка программирования, с которым они работают, или даже базовых концепций программирования. Но не волнуйтесь … эта статья должна стать хорошим учебником, чтобы познакомиться с миром встроенной электроники.

Эта статья не пытается рассказать о каком-либо конкретном микроконтроллере / микропроцессоре, но представляет собой скорее учебник, объясняющий общие концепции, применимые ко всем микроконтроллерам / микропроцессорам.

Во-первых, давайте … зададим себе пару вопросов. Первый вопрос —

Что такое микроконтроллер?
Микроконтроллер — это крошечный микрокомпьютер на микросхеме. Он имеет ЦП, ОЗУ (оперативное запоминающее устройство), регистры специальных функций, память ПЗУ программ, память ПЗУ данных, от одного до нескольких портов параллельного ввода / вывода (ввода / вывода) и может иметь множество встроенных периферийных устройств, включая но не ограничиваясь аналого-цифровой преобразователь (АЦП), цифро-аналоговый преобразователь (ЦАП), Serial UART, один или несколько таймеров, / на источник опорного напряжения чипа, захвата / сравнения / ШИМ (широтно-импульсная модуляция) модуля компараторов , Главный синхронный последовательный порт для связи SPI (последовательный периферийный интерфейс) / I2C (меж интегральная схема), порт USB, порт Ethernet, встроенные генераторы, а также множество других периферийных устройств.

Что такое микропроцессор (подождите, вы имеете в виду, что разница действительно есть)?
Микропроцессор — это все, что есть в микроконтроллере, но без программного ПЗУ на кристалле. Программный код находится вне кристалла в отдельной внешней микросхеме EPROM.

ПЗУ программ и ПЗУ данных
Встроенная память ПЗУ (постоянное запоминающее устройство) на микроконтроллере подобна жесткому диску микроконтроллера. Имеет две перегородки. Один раздел зарезервирован для хранения программного кода, а другой раздел зарезервирован для постоянного хранения данных, которые используются микросхемой во время нормального выполнения программы.На данном микроконтроллере PIC, имеющем, скажем, 8 Кбайт программного пространства, программное пространство будет занимать адреса ПЗУ 0x0000 — 0x1FFF (или 0-8191 в десятичном виде). Пространство данных начнется с адреса ПЗУ программы 0x2100. Если бы пространство ПЗУ данных было 256 байтов, пространство ПЗУ данных занимало бы адреса ПЗУ 0x2100 — 0x21FF (или 8448-8704 в десятичной системе).

ЦП
ЦП означает центральный процессор. По сути, это «мозг» микроконтроллера. Это то, что извлекает инструкции из памяти кода и выполняет полученные инструкции.

ОЗУ данных
ОЗУ данных (оперативное запоминающее устройство) — это пространство данных, которое используется для временного хранения значений констант и переменных, которые используются микроконтроллером во время нормального выполнения программы. Объем физического пространства RAM на данном микроконтроллере варьируется от одного микроконтроллера к другому. ОЗУ данных на микроконтроллере организовано в несколько «регистров», каждый из которых имеет свой уникальный «адрес». Регистр ОЗУ на 8-битном микроконтроллере может содержать всего 8 бит или один байт данных.Типичная спецификация пространства ОЗУ может указывать, что оно составляет 256 x 8. Это означает, что всего в ОЗУ 256 регистров, и эти регистры могут содержать 8 бит каждый.

Регистр — это просто место в памяти, в которое вы можете записывать или читать данные. Некоторые из нас называют регистры «местонахождением».

Регистры специальных функций
Регистры специальных функций (или просто SFR) в микроконтроллере аналогичны регистрам в ОЗУ данных. Вы можете записывать в них данные, а также читать из них данные.Они отличаются тем, что одни SFR напрямую управляют аппаратным обеспечением микроконтроллера, тогда как другие управляются аппаратным обеспечением микроконтроллера.

Каждый бит в SFR назначается функции. В SFR у вас есть биты управления и биты флагов. Управляющие биты подобны «переключателям», которые включают или выключают функцию в зависимости от того, записываете ли вы 1 или 0 в эту битовую позицию в SFR. Биты флагов похожи на «световые индикаторы», которые указывают, существует ли данное условие, в зависимости от того, равен ли бит флага 1 или 0.Биты управления напрямую управляют оборудованием. Биты флагов контролируются оборудованием. В любой данной программе мы обычно записываем в управляющие биты, пока читаем биты флагов (некоторые биты флагов должны быть очищены вручную путем записи в них, в зависимости от микроконтроллера… подробнее об этом позже).

Каждой аппаратной части микроконтроллера будет назначен как минимум 1 SFR. Некоторому оборудованию может быть назначено несколько SFR. Проконсультируйтесь с таблицей данных вашего микроконтроллера, чтобы узнать больше о его конкретной организации SFR.

Биты конфигурации
Большинство микроконтроллеров имеют специальные биты, известные как «биты конфигурации». Эти биты настраивают специальные параметры микроконтроллера, включая, помимо прочего, —

.

* Тип осциллятора
* Сторожевой таймер Вкл. / Выкл.
* Таймер включения / выключения
* Сброс выхода из строя Вкл. / Выкл.
* Программирование низкого напряжения Вкл. / Выкл.
* Вкл. / Выкл. Аварийного контроля часов
* Внутреннее / внешнее переключение Вкл. / Выкл.

В микроконтроллере PIC есть даже биты конфигурации для защиты программного кода и защиты кода данных.Эти биты предотвращают чтение программы или пространств данных внешним программным оборудованием, чтобы другие не могли украсть ваш код. На микросхеме Atmel AT89S (производной от 8051) это устанавливается так называемыми «битами блокировки».

Некоторые называют биты конфигурации «битами предохранителя». Это происходит из-за старых времен микропроцессоров, у которых были настоящие «плавкие предохранители» на микросхеме, которые перегорали, если бы определенные функции, управляемые плавкими вставками, были отключены. Эти предохранители были «программируемыми один раз»… после того, как они перегорели, их невозможно было «отключить».Однако с появлением флэш-памяти, доступной на современных микроконтроллерах, на микросхеме больше нет буквальных «предохранителей». Но сам термин перенесен из-за того, что биты конфигурации по существу обеспечивают тот же контроль, что и биты предохранителя.

ALU (Арифметико-логический блок)
Этот аппаратный компонент по существу отвечает за все математические и логические операции, выполняемые микроконтроллером. На большинстве микроконтроллеров с ALU будет связано 3 битовых флага —

* Бит нуля — Этот бит флага устанавливается в 1 аппаратным обеспечением, когда математическая операция приводит к нулевому результату.Аппаратно сбрасывает его на 0 всякий раз, когда математическая операция дает ненулевой результат.

* Бит переноса / заимствования — этот бит флага работает как бит переноса для операций сложения, а также как флаг заимствования для операций вычитания. «Перенос» происходит, когда результат операции сложения приводит к значению, превышающему то, что регистр может хранить. 8-битный регистр может содержать максимальное значение 255 (FF в шестнадцатеричном формате или 11111111 в двоичном).

Если операция сложения приводит к результату больше 255, флаг переноса устанавливается в 1.Если в результате операции сложения результат меньше 255, перенос не происходит, поэтому флаг переноса сбрасывается до 0.

Для операций вычитания вместо этого флаг переноса работает как флаг заимствования. Флаг заимствования работает наоборот, чем флаг переноса. Если операция вычитания приводит к отрицательному результату, флаг заимствования сбрасывается до 0. Если операция вычитания дает положительный результат, флаг заимствования устанавливается на 1.

* Бит переноса / заимствования цифр — Этот бит флага выполняет то же действие, что и флаг переноса / заимствования, но работает только для указания того, происходит ли перенос / заимствование только между битами 3 и 4.

Биты флага ALU можно прочитать в любое время, чтобы узнать, были ли результаты математических операций нулевыми, положительными / отрицательными, больше / меньше и т. Д.

Нулевой бит — это удобный флаговый бит, который позволяет нам сравнивать два значения, чтобы увидеть, равны ли они / не равны. Если мы возьмем два числа и вычтем их, результат будет равен нулю, если они равны, и ненулевым, если не равны. Итак, чтобы сравнить два значения, чтобы увидеть, равны ли они / не равны, мы вычитаем их, затем читаем / проверяем нулевой бит, чтобы узнать, равен ли бит 1 или 0.Если нулевой бит = 1, результат вычитания равен нулю, что означает, что два значения равны. Если нулевой бит = 0, результат вычитания не равен нулю, что означает, что два значения не равны.

Бит переноса / заимствования — удобный флаг, который позволяет нам сравнивать два значения, чтобы увидеть, больше или меньше одно значение другого. Пример… у нас есть два значения: VALUE1 и VALUE2. В коде выполняем эту операцию —

VALUE1 — VALUE2 = VALUE3

После выполнения операции вычитания мы читаем / проверяем высокое / низкое состояние бита переноса / заимствования.

Если VALUE2 больше VALUE1, результат вычитания будет отрицательным, что сбросит бит переноса / заимствования в 0. Если VALUE2 меньше VALUE1, результат вычитания будет положительным, что установит перенос / одолжить бит до 1.

Обратитесь к таблице данных, чтобы узнать, какой SFR содержит эти биты. На микроконтроллерах PIC биты флага ALU находятся в STATUS SFR. В MCS-51 они находятся в PSW SFR (слове состояния программы).

Программный счетчик
Программный счетчик — это «адресный указатель», который сообщает ЦП, где найти следующую инструкцию для выполнения в программном ПЗУ.ЦП получит инструкцию, которая находится по адресу ПЗУ программы, загруженному в текущий момент в счетчик программ.

Когда микроконтроллер перезагружается, счетчик программы устанавливается на 0x0000. ЦП получит инструкцию, которая находится по адресу ПЗУ программы 0x0000. После получения этой инструкции счетчик программ автоматически увеличивается до значения 0x0001. Счетчик программ непрерывно автоматически увеличивается на значение 1, что заставляет ЦП последовательно обращаться к содержимому каждой ячейки регистра в программном ПЗУ.Это продолжается до тех пор, пока ЦП не выберет и не выполнит инструкцию, которая изменяет значение счетчика программ. Такими инструкциями, которые делают это, являются инструкции перехода (ajmp и ljmp на MCS-51, goto на PIC), вызовы подпрограмм (acall и lcall на MCS-51, вызов на PIC) и любые инструкции, которые добавляют или вычитают значение к или от счетчик программ.

Стек
Стек на микроконтроллере в основном используется во время вызовов подпрограмм и переходов к обработчику прерывания.Это буфер «Последний вошел — первым ушел», который используется для хранения адресов возврата. Во время вызова подпрограммы адрес текущего программного счетчика «помещается» в стек с добавлением к нему +1 смещения, затем программный счетчик изменяется на значение адреса, в котором находится вызываемая подпрограмма. Это заставляет счетчик программы переходить к коду подпрограммы для выполнения подпрограммы.

В конце подпрограммы будет инструкция «возврата» (возврат на MCS-51, возврат на PIC). После выполнения инструкции возврата стек «выталкивается», и последнее значение адреса ПЗУ, которое было помещено в стек, выталкивается из стека и возвращается в счетчик программ.Это заставляет счетчик программ вернуться к инструкции, которая находится после инструкции, которая вызвала подпрограмму (отсюда необходимость смещения +1 в то время, когда адрес ПК помещается в стек), и выполнение программы продолжается с того места, где оно было остановлено. перед вызовом подпрограммы.

Некоторые микроконтроллеры имеют «программный стек» (MCS-51). Программный стек использует часть внутренней памяти микроконтроллера в качестве пространства стека. Другие микроконтроллеры имеют аппаратный стек (PIC).В аппаратном стеке стек представляет собой собственное выделенное пространство, отдельное от всех остальных пространств памяти кристалла.

На некоторых микроконтроллерах стек доступен для записи. Это позволяет нам использовать стек для временного резервного копирования критических регистров во время вызовов подпрограмм и выполнения обработчика прерываний. Перед выполнением подпрограммы или обработчика прерывания содержимое регистров для резервного копирования помещается в стек. Затем, непосредственно перед возвратом из подпрограммы или обработчика прерывания, содержимое, которое мы поместили в стек в начале подпрограммы, извлекается из стека по одному, а затем восстанавливается в исходное положение в обратном порядке по сравнению с тем, как они были помещены в стек (помните… Последним пришел — первым ушел).

Хорошим примером этого может быть резервное копирование аккумулятора и регистров PSW на MCS-51 во время выполнения подпрограммы обработчика прерывания —

Код (текст):

push ACC; резервное копирование аккумулятора в стек
push PSW; резервное копирование слова состояния программы в стек

; здесь выполнить код обработчика прерывания

pop PSW; восстановить слово состояния программы
pop ACC; восстановить аккумулятор
reti; вернуться к основному коду из прерывания

Как видите, сначала мы помещаем содержимое аккумулятора в стек, а затем помещаем содержимое PSW в стек после него.Затем выполняется код обработчика прерывания.

После выполнения кода обработчика прерывания PSW сначала извлекается из стека, затем аккумулятор извлекается из стека после него… в порядке, обратном тому, как они были вытолкнуты.

Типичный SFR
Типичный SFR настроен, как показано ниже.

Код (текст):

| ПОРТ 1 SFR |
———————————————————
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| P1.7 | P1.6 | P1.5 | P1.4 | P1.3 | P1.2 | P1.1 | P1.0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |

Это SFR защелки порта на микроконтроллере MCS-51 для параллельного порта 1. Каждый порт MCS-51 является 8-битным параллельным портом, и каждый бит в SFR порта назначается каждому контакту порта. P1.0 будет контактом 0 порта 1, P1.1 будет контактом 1 порта 1, P1.2 будет контактом 2 порта 1 и т. Д. И т. Д.

Как показано, у нас есть все нули, записанные в каждый бит в SFR защелки порта 1.Это переведет все контакты порта 1 в состояние низкого уровня (0 вольт). Если бы мы записали единицы в любой из битов SFR порта, это установит контакт, связанный с позицией бита, в которую мы записываем «1», в состояние высокого уровня (+ 5В).

Пример, давайте запишем значение 01010101 в SFR порта 1 —

Код (текст):

| ПОРТ 1 SFR |
———————————————————
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| P1.7 | P1.6 | P1.5 | P1.4 | P1.3 | P1.2 | P1.1 | P1.0 |
| 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 |

Как показано, это переведет контакты P1.0, P1.2, P1.4 и P1.6 в состояние высокого уровня, а контакты P1.1, P1.3, P1.5 и P1.7 — в состояние низкого уровня.

Несколько слов о таблицах данных … и почему они так важны
Не все микроконтроллеры созданы равными. Каждый из них разработан с использованием определенного оборудования на кристалле. Все микроконтроллеры разных производителей имеют разную архитектуру.Вы обнаружите, что микроконтроллеры PIC сильно отличаются от микроконтроллеров MCS-51, так же как MCS-51 сильно отличается от, скажем, Motorola 65xx в отношении того, как реализованы SFR, как организована RAM данных, набор команд, конфигурационное слово, как параллельные порты работают и т.д. и т.п.

ЕДИНСТВЕННЫЙ способ точно узнать, как работать с вашим микроконтроллером и его оборудованием, — это просмотреть его техническое описание. В таблице данных объясняется каждый SFR, каждая часть встроенного оборудования, абсолютные максимальные электрические характеристики, организация памяти программ / данных, как подключены параллельные порты и как они работают, сводка набора инструкций (для тех из вас, кто кодирует на ассемблере). язык) и т. д.Практически все, что вам, как программисту, необходимо знать о своем микроконтроллере, находится в его техническом описании.

Большинство из них находятся в свободном доступе в Интернете с помощью простого поиска в Google (я еще не нашел ни одного, которого нет). Заявление о том, что вы не смогли найти таблицу, не является приемлемым оправданием, когда дело доходит до этого. ЕДИНСТВЕННАЯ причина, по которой кто-либо отказывается просматривать таблицу, — это либо то, что он слишком ленив, либо он их не понимает, но не хочет, чтобы другие знали, что они этого не делают.Я скажу прямо сейчас … на большинство вопросов форума, касающихся микроконтроллеров, можно было бы ответить самостоятельно, если бы человек нашел время, чтобы найти ответ в таблице данных.

Даташиты являются обязательными. Без них вы не сможете написать собственный код.

Об авторе
Джон Уайлдер — внештатный инженер-электронщик и энтузиаст электроники более 20 лет. Он четыре года проработал в ВМС США в качестве специалиста по авиационной электронике.Джон также играет на гитаре с 13 лет и начал объединять электронику и музыку с 15 лет. Джон построил свой первый ламповый усилитель в 17 лет. «Музыкальная электроника», — говорит Джон, — его любовь и страсть.

Джон также является частым участником и страстным членом инженерного сообщества Electro-Tech-Online. В Electro-Tech-Online вы можете задавать вопросы и получать ответы от своих коллег-инженеров по всему, от микроконтроллеров, возобновляемых источников энергии и автомобильной электроники до моделирования схем и проектирования.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *