Здавалка
Главная | Обратная связь

Кодовий замок. Постановка завдання



Лабораторна робота №6

Программа кодового замка з використанням мікроконтролерів AVR серії АТtiny

1.1. Навчальні питання

1. Розробка принципової схеми кодового замка з використанням мікроконтроллера АТtiny2313.

2. Написання програми для кодового замка та моделювання її роботи в середовищі PROTEUS.

Навчальна мета

1. Практичне ознайомлення з розробкою та програмуванням схем на мікроконтролері АТtiny2313.

Теоретичні відомості

Кодовий замок. Постановка завдання

У якості прикладу підбрано завдання досить складне й цікаве, здатне навчити працювати із ще неохопленими елементами мікроконтролера. Зручним прикладом є кодовий замок. Взагалі, мікроконтролери AVR з їхньою вбудованою енергонезалежною пам'яттю (EEPROM) дають широкий простір для розробника подібних конструкцій. Пам'ять EEPROM ідеально підходить для зберігання коду. Причому такий код завжди легко поміняти.

При розробці замка запропоновано не зовсім звичайний замок. Це кодовий замок, який може сприймати в якості кодової комбінації кнопки, що не тільки окремо натискаються, але й будь-які їхні комбінації. Наприклад кнопки, що попарно натискаються, комбінації типу «Нажати кнопку 6 і, не відпускаючи, набрати код 257». І взагалі, вибрати будь-яку комбінацію будь-яких кнопок у будь-якій комбінації.

Принцип дії замка наступний: у режимі запису коду власник натискає кнопки набору коду в будь-якому порядку й у будь-яких комбінаціях. Мікроконтролер відслідковує всі зміни на клавіатурі й записує їх в ОЗП. Довжина кодової послідовності обмежена тільки розмірами ОЗП. Сигналом до закінчення введення коду служить припинення маніпуляцій із клавіатурою.

Вважається, що маніпуляції закінчилися, якщо стан клавіатури не змінився протягом контрольного проміжку часу. Його вибрано приблизно рівним однієї секунді. Відразу по закінченню процесу введення коду (по закінченню контрольного проміжку часу) мікропроцесор записує прийнятий у такий спосіб код в EEPROM. Код являє собою послідовність байтів, що віддображають усі стани клавіатури під час набору. Після того, як коди будуть записані, замок можна перевести в робочий режим. Для цього передбачений спеціальний тумблер вибору режимів.

У робочому режимі замок чекає введення коду. Для відкривання дверей необхідно повторити ті ж самі маніпуляції із кнопками, які ви робили в режимі запису. Мікроконтролер так само, як і в попередньому випадку, відслідковує ці маніпуляції й записує отриманий у такий спосіб код в ОЗП. По закінченню введення коду (після закінчення контрольного проміжку часу) програма переходить у режим звірення коду, що перебуває в ОЗП, і коду, записаного в EEPROM. Спочатку порівнюється довжина обох кодів. Потім коди звіряються побайтно. Якщо порівняння пройшло успішно, мікроконтролер подає сигнал на механізм відкривання замка.

Отже, сформулюємо завдання в такий спосіб:

«Створити схему й програму електронного кодового замка, що має десять кнопок для введення коду, позначених цифрами від «0» до «9». Замок повинен мати перемикач режимів «Запис/Робота». У випадку правильного набору коду замок повинен включати виконавчий механізм замка (соленоїд або електромагнітну засувку). Введення коду повинно проводитися описаним вище способом».

 

Алгоритм

При складанні даного алгоритму нам не обійтися без такого поняття, як «код стану клавіатури». Що таке код стану?. Усі кнопки клавіатури підключаються до мікроконтролера за допомогою портів вводу-виводу. Для підключення десяти кнопок (кнопки «0» - «9») одного порту недостатньо. Кілька кнопок доведеться підключити до другого.

Контролер читає вміст цих портів і одержує код, що відповідає їхньому стану. Кожній кнопці клавіатури в цьому коді буде відповідати свій окремий біт. Коли кнопка натиснута, відповідний біт буде дорівнює нулю. Коли відпущена – одиниці. Тому при різних комбінаціях натиснутих і відпущених кнопок код стану клавіатури буде мати різні значення.

У момент включення живлення всі кнопки замка повинні бути відпущені. Якщо це не так, то виникає невизначеність у роботі замка. Тому наш алгоритм повинен починатися із процедури очікування відпускання всіх кнопок. Як тільки всі кнопки виявляться відпущеними або у випадку, якщо вони взагалі не були натиснуті, починається інша процедура очікування. Цього разу програма очікує моменту натискання кнопок. Це саме той режим роботи, у якім замок буде перебувати більшу частину часу. У момент натискання кожної із кнопок починається цикл уведення ключової комбінації.

Процедура введення ключової комбінації являє собою багаторазово повторюваний процес, що періодично зчитує код стану клавіатури. Щораз після чергового зчитування коду програма перевіряє, чи не змінився цей код. Як тільки код зміниться, нове його значення записується в чергову комірку ОЗП. У результаті, поки стан клавіатури не змінюється, програма перебуває в режимі очікування.

Як тільки стан змінився, відбувається запис нового значення коду стану в память. Тому ключова комбінація, записана в ОЗП, буде являти собою перерахування всіх значень коду стану клавіатури, який він ухвалював у процесі введення ключової комбінації. Тривалість же втримання кнопок у кожному зі станів у память не записується.

Однак це лише приблизний алгоритм процедури введення ключової комбінації. Так сказати, її кістяк. Насправді алгоритм небагато складніше. Виявивши зміну стану клавіатури, програма не відразу записує новий код в ОЗП. З метою боротьби з брязком контактів, а також для компенсації неточності одночасного натискання декількох кнопок, програма спочатку витримує спеціальну захисну паузу, потім повторно зчитує код стану клавіатури й лише після цього записує новий код в ОЗП.

Тривалість захисної паузи обрана рівної 48 мс. Така пауза особливо корисна у випадку, якщо при наборі ключової комбінації ви прагнете використовувати одночасне натискання кнопок. Як би ви не намагалися нажати кнопки одночасно, вам цього не вдасться. Однаково буде якась розбіжність у моменті замикання контактів. Причому порядок замикання контактів буде залежати від багатьох факторів і практично є випадковим.

Якщо не прийняти спеціальних заходів, то в момент такого натискання програма зафіксує не одне, а кілька послідовних змін коду стану клавіатури. Якщо отримана в такий спосіб кодова комбінація буде записана в EEPROM, то відкрити такий замок буде практично неможливо.

При спробі повторити ті ж натискання, замикання контактів будуть відбуватися в іншому порядку. Програма сприйме його як зовсім інший код. Захисна пауза вирішує цю проблему. У якому б порядку не замикалися контакти при одночаснім натисканні декількох кнопок, після паузи всі ці процеси закінчаться. Повторне зчитування дасть уже усталений код стану клавіатури. Повторити таку комбінацію не важко буде.

Крім захисної паузи, для боротьби із брязком застосовується багаторазове зчитування коду стану. Тобто насправді щораз відбувається не одне, а кілька послідовних операцій по зчитуванню коду стану. Зчитування відбувається доти, поки кілька раз підряд буде отриманий той самий код.

Тепер поговоримо про те, як програма виходить із процедури введення ключової комбінації. Як уже говорилося раніше, для виходу з процедури використовується захисний проміжок часу. Для формування цього проміжку застосовується таймер. Таймер повинен працювати в режимі Normal. У цьому режимі він просто рахує тактові імпульси.

Процедура введення кодової комбінації влаштована таким чином, що при кожному натисканні або відпусканні кожної із кнопок таймер скидається в нуль. У проміжку між натисканнями його показання збільшуються під дією тактового сигналу. Якщо протягом захисного проміжку часу не буде натиснута жодна кнопка, показання таймера збільшаться до контрольної межі. Програма постійно перевіряє цю умову. Як тільки показання лічильника перевищать контрольну межу, процедура введення кодової комбінації завершується. Величина контрольного проміжку часу дорівнює 1 с.

Подальші дії після виходу із процедури введення кодової комбінації визначаються станом перемикача режимів роботи. Якщо контакти перемикача замкнені, програма переходить до процедури запису кодової комбінації в EEPROM.

Спочатку в EEPROM записується довжина кодової комбінації. А потім байт за байтом і сама комбінація. Якщо контакти перемикача режиму роботи розімкнуті, то програма переходить до процедури перевірки коду. Ця процедура спочатку дістає з EEPROM записану раніше довжину кодової комбінації й порівнює її з довжиною тільки що введеної комбінації.

Якщо дві ці величини не рівні, процедура перевірки коду відразу ж завершується з негативним результатом. Якщо довжина обох комбінацій однакова, то програма приступає до побайтному їх порівнянню. Для цього вона по черзі зчитує з EEPROM раніше записані туди байти й порівнює кожний з них з відповідними байтами в ОЗП. При першім же розбіжності процес порівняння також завершується. І завершується негативно.

І тільки в тому випадку, якщо всі байти в ОЗП й в EEPROM виявляться однаковими, порівняння вважається успішним. У випадку успішного порівняння програма переходить до процедури відкривання замка. Процедура відкривання починається з видачі відкриваючого сигналу на виконавчий механізм. Потім програма витримує паузу в 2 с і знімає сигнал. Цього часу досить для того, щоб відкрити двері. Потім замок переходить у вихідний стан.

 

Схема

Можливий варіант схеми замка наведений на рис. 5.1. Кнопки Sl-S10 служать для набору коду. Перемикач S11 призначений для вибору режиму роботи. Якщо контакт перемикача S11 замкнути, замок переходить у режим «Запис». Розімкнуті контакти відповідають режиму «Робота».

Схема керування механізмом замка складається із транзисторного ключа VT1 і електромагнітного реле К1. Резистор R1 обмежує струм бази ключа. Діод VD1 служить для захисту від напруги самоіндукції, що виникає на котушці реле. Живлення реле здійснюється від окремого джерела +12 В (живлення мікроконтроллера +5 В). Якщо в якості VT1 застосовувати транзистор КТ315, то електромагнітне реле може мати робочу напруга +12В и робочий струм не більше 250 мА. Контакти реле повинні бути розраховані на керування виконавчим механізмом (соленоїдом).

 

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

 

Обратите внимание, что в данной схеме одни линии порта РВ будут работать как входы, а другие (в частности линия РВ.4) – как выходы. При распределении выводов порта между периферийными устройствами учитывалась возможность объединения замка с му­зыкальной шкатулкой. В этом случае шкатулка может управляться одной кнопкой и служить дверным звонком.

 







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.