Материал: 1

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

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

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

2.2. Алгоритм роботи схеми Прискладанніданогоалгоритмунамнеобійтисябезтакогопоняття,як«код

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

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

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

- 11 -

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

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

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

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

- 12 -

Все одно буде якесь розбіжність в моменті замикання контактів. Причому порядок замикання контактів буде залежати від багатьох факторів і практично є випадковим.

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

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

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

Для формування цього проміжку застосовується таймер. Таймер повинен працювати в режиміNormal. Вцьомурежимівін просто рахує тактові імпульси.

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

- 13 -

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

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

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

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

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

Електрична принципова схема містить мікроконтролер ATiny2313 D1, тактова частота якого визначається кварцовим резонатором Q1, до якого приєднані фазозсувні конденсатори С1 та С2. До виводів 2,3,6-9, 11-14, 19 приєднана клавіатура вводу коду і підтвердження, до виводу 16 через резистор R1 приєднаний транзистор, за допомогою якого, здійснюється комутація

- 14 -

електромагніту замка. Для захисту переходу колектор-емітер транзистора від зворотної ЕРС, що виникає під час вимкнення транзистора в результаті розмагнічування осердя електромагніту, паралельно катушці електромагніту приєднаний діод, атод якого приєднується до колектора транзистора, а катод - дод додатного виводу джерела живлення. На схемі не відображено живлення мікроконтролера, яке здійснюється від стабілізованого джерела живлення +5V. Живлення електромагніта здійснюється від окремого нестабілізованого джерела живлення +12V.

2.3. Розробка програмного коду Можливий варіант програми кодового замка на мові СІ приведений в

лістингу 1.20. Програма реалізує той же самий алгоритм, що і наведена вище програма на Асемблері. У тексті цієї програми були використані кілька нових для нас елементів мови СІ. Розглянемо їх по порядку.

#define

Директива присвоєння символьного імені будь-якої константи. Це класичний елемент мови СІ, який підтримується будь версією мови. Директива має два параметри. перший параметр - ім'я константи. Другий параметр - її значення. У рядку 2 програми (лістинг 1.20) числовий константі 0x77F присвоюється ім'я klfree. Після цього в будь-якому місці програми, де потрібно використовувати число 0x77F, його можна замінити ім'ям klfree.

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

- 15 -

Источник: https://studfile.net/preview/14570694/