Автор: erde 04062010 11:54

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

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

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

Спочатку обговоримо таблицю істинності, а потім розглянемо «осцилограми»

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

Кожен з компонентів (програми моделювання) S і R працює як генератор (їх можна змусити працювати в протифазі), встановлюючи на входах елементів І-НЕ поперемінно рівні логічної одиниці та логічного нуля

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

Щоб уникнути сумнівів, повернемося до початку обговорення, розглянувши, як працює базовий елемент 2І

Логічну операцію І можна запамятати як аналог арифметичної операції множення Одиниця на виході зявляється тільки тоді, коли на обох входах рівень логічної одиниці (одиниця при множенні 1 * 1)

Для елемента 2І-НЕ на виході в цьому випадку зявляється рівень логічного нуля

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

Повернемося до RS триггеру Припустимо, що на вході S нуль, на вході R одиниця Для елемента 2І будь-який варіант присутності нуля хоча б на одному з входів (це видно на таблиці істинності) означає нуль на виході При інверсії (2І-НЕ) це означає на виході одиницю Тобто наявність нуля на вході S буде відповідати тому, що на виході A_out буде одиниця, яка, завдяки перехресного звязку, потрапить на вхід іншого елемента 2І-НЕ, де є одиниця по входу R А дві одиниці на вході приведуть до того, що на виході B-out зявиться нуль Це стійкий стан тригера

Оскільки ми позначили вихід A_out як прямий, то установка його в одиницю визначає вхід S як вхід установки (Set), а вхід R як вхід скидання (Reset)

А тепер звернемося до схеми кодового замка Початково на всіх входах присутні рівні логічної одиниці, що встановлюються «підтягуванням» входів за допомогою резисторів до плюса харчування Натискаючи на кнопку S1, ми подаємо нуль на вхід першого тригера На виході 3 мікросхеми DD1 зявиться одиниця, а на виході 4 нуль Кнопкою S2 ми цей нуль подаємо на вхід другого тригера, а на його виході 11 зявляється нуль, який «Обслуговує» кнопку S3 Завершується цей процес після натискання на кнопку S4 появою логічного нуля на виході 11 мікросхеми DD2 Активний низький рівень на виході пристрою пояснює, чому рекомендовано використання транзистора структури pnp, включення якого і відбудеться після підключення його входу через резистор до загального проводу

Я не вважаю, що заміна мікросхем серії К561 мікроконтролером – це вдале рішення Тому ми просто постараємося на папері (вірніше, за компютером) створити пристрій з тими ж властивостями, що і вищеописане

В якості мікроконтролера я використовую PIC16F628A І схема в цьому випадку може виглядати так:

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

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

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

Додаємо в програму перевірку натискання хоча б однієї кнопки Якщо кнопка натиснута правильно, тобто, кнопка S1, то ми почнемо формування коду у змінній code, Яку створюємо

Рис 326 Початок роботи над програмою

Хтось віддасть перевагу зібрати всю програму відразу, а потім почати її налагоджувати Я віддаю перевагу налагодження невеликих фрагментів, оскільки легше виявити всі помилки і неприємності, які можуть виникати з різних причин Одна з цих причин в значенні змінної push Якби входи були підтягнуті до землі, а кнопки подавали високий рівень при натисканні, то початкове значення змінної було б нульовим, а правильна послідовність натиснутих кнопок в десятковому вигляді виглядала б як 1, 2, 4, 8 Можна, звичайно, внести зміни в схему, але ..

Мікроконтролер зручний тим, що не обовязково міняти схему, досить змінити своє ставлення до отримуваних результатів Як людина ледачий, що не дуже схильний займатися обчисленнями на папері без особливої необхідності, я скористаюся калькулятором операційний системи компютера для визначення потрібних значень: FE, FD, FB, F7

Для налагодження програми в покроковому режимі я додам пять кнопок, які в розширених властивостях позначу, як кнопки з фіксацією, так зручніше працювати в покроковому режимі У властивостях підключення я підключу їх до входів RB0-RB4 І перевірю, створивши розгалуження програми, що у мене виходить Для спостереження за змінними я додам їх у вікно спостереження, клацнувши правою кнопкою мишки у вікні після запуску налагодження в покроковому режимі

Рис 327 Налагодження першого фрагмента програми

Ось і перша неприємність приспіла Замість початкового значення змінної push, Яке я очікував, це значення дорівнює 1F Можна відкласти вирішення проблеми, а можна спробувати зараз зрозуміти, в чому причина розбіжностей

Я підозрюю, що ті входи порту, до яких я не підєднав кнопки, не позначив активний стан кнопок, виявилися підтягнуті до землі Щоб перевірити це, я додам ще три кнопки (у програму) і позначу їх активний рівень як низький І це допомагає, початкове значення змінної стає одно FF (0xFF, звичайно) або десяткове значення 255

У розділі визначення коду, програмний елемент Обчислення, Я додаю запис: code = code AND push Натискаючи кнопки в потрібній послідовності, я повинен сформувати правильний код, записаний у зміннійcode Але за умовчанням ця змінна буде

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

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

У цьому місці є можливість вибрати, чи буде правильним будь-який порядок натискання

«Правильних» кнопок, як це зараз в програмі – я можу натиснути кнопки в будь-якій послідовності – або зберегти єдиний порядок натискання кнопок, як це зроблено у вихідній схемі

Я залишу відповідність вихідної схемою Для цього я додам ще одну перевірку

Якщо натиснута кнопка S1, то значення порту B стає одно 0xFE Це значення я і перевіряю

У умови розгалуження я скористався можливістю змінити порядок переходу, помінявши місцями результати Так і Ні

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

Все було б добре, якби не було погано Цей порядок заданий тільки для першої кнопки Якщо після цього натиснути другу кнопку, то програма повернеться до первісного вигляду

Значить, рішення не те, що нам потрібно Слід змінити рішення, додати якісь нові елементи програми

Рис 328 Продовження збірки програми

Разом з тим, програма починає розростатися Можна скористатися механізмом підпрограм (макросів), щоб частини програми були осяжного виду Створимо макрос, наприклад, code_1 У цьому макросе почнемо формувати код І я поки не знаю, не буде потрібно чи ще один або кілька макросів для формування коду

У створений макрос я перенесу свої задумки з визначення першої «правильної» кнопки

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

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

Отже, створивши макрос, ми не вирішили проблеми Одним з рішень було б змінити, скажімо, в основній програмі умова переходу до підпрограми Спочатку це була перевірка, чи натиснута хоча б одна кнопка Ми знаємо, як змінюється вид змінноїpush, Коли натиснуті

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

Тепер виклик макросу обумовлений натисканням тільки правильних кнопок З правильним натисканням першої кнопки ми теж, так-сяк, але визначилися – код не зміниться, якщо натиснута не перша кнопка Прийшов час подбати про другий «правильної» кнопці І я пропоную додати в макрос code_1 ще один компонент розгалуження

Відрізняється новий елемент тільки умовою перевірки: If push = 0xFD AND code = 0xFE

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

Рис 3210 Визначення другої кнопки в макросе code_1

Не мудруючи лукаво, я повторю все це для решти «правильних» кнопок Умови розгалуження для них будуть такими:

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

Залишилося додати в макрос спрацьовування замка при правильному наборі Я додам виклик макросу code_2, Який створю, і в якому «відкрию двері»

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

Оскільки ми управляємо низьким рівнем сигналу на виході, на початку програми слід встановити це вихід у високий рівень Додавши до отладочной панелі світлодіод, підключений до виходу А2, можна перевірити роботу схеми І ще одне, що слід зробити, це обслужити всі інші кнопки Для цього додамо до довгого умові в основній програмі перевірку ще одного входу:

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

І в макросе code_1 додамо реакцію на цю кнопку

Рис 3212 Обслуговування останніх кнопок

Можна перевірити роботу, запустивши інтерактивну налагодження Можна перевірити роботу в програмі ISIS І ця перевірка показує, що входи порту B НЕ підтягуються до плюса харчування

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

Щоб напевно підтягти резисторами входи, додамо в програму невелику вставку на мові Сі до входу програми в цикл

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

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

Тепер входи в стані високого логічного рівня, і програма працює

Рис 3215 Працююча програма в ISIS

Я вже говорив, що не вважаю заміну двох цифрових мікросхем мікроконтролером вдалим рішенням Але це рішення можна зробити вдалим

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

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

Додайте на панель налагодження ще один світлодіод, зєднайте його з виходом RA0 і змініть його колір, і ви побачите:

Рис 3217 Відображення натиснутою кнопки індикатором Коли кнопка відпущена, будь-яка кнопка, індикатор гасне

Ще одне покращення, яке виправдано назвою «кодовий замок», це блокування роботи замку при неправильно натиснутій кнопці

Щоб змінити логіку роботи замку, додамо в макрос code_1 нове розгалуження програми, розраховане на правильно натиснуту першу кнопку Якщо цього не відбувається, створивши новий макрос block, Ми в цьому макросе заблокуємо подальшу роботу замку

Умова перевірки натиснутою кнопки виглядає так:

push <> 0xFE AND code = 0xFF

Тобто, якщо код ще не змінився, а натиснута не перша

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

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

При вході в макрос ми запалимо індикатор на виведенні RA1, який покаже, що введення коду зроблений невірно Потім встановимо прапор (створивши нову змінну типу byte) І поки не буде виконаний скидання, програма залишиться в циклі опитування кнопок За це відповідає умова виконання циклу, while block = 1

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

Оскільки умова роботи циклу підійшло до кінця, програма залишає макрос block, І замок готовий приймати правильне введення коду

Умова виходу з блокування замка можна змінити, якщо це потрібно Зокрема можна вибрати будь-яку комбінацію натиснутих кнопок, яка розблоковує замок

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

Залишається перевірити роботу пристрою за компютером, впорядкувати записи в робочому зошиті, додати коментарі в програму і зберегти всі варіанти

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

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

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

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

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

Якщо вам не потрібен кодовий замок, як мені, то не вважайте, що ви даремно витратили час Використовуючи ту ж схему, можна придумати зовсім інший пристрій Таке придумування дуже корисне заняття Наприклад, використовуючи не кнопки, а контакти, розташовуючи контакти в певному порядку, можна зібрати дитячу іграшку – «зєднай крапки в картинку» Якщо натискати точки-контакти в правильному порядку, то точки (зі світлодіодами поруч з контактами) в завершенні висвітять малюнок будиночка або машини, інакше буде блимати вогник – «ти помилився»

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

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

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

Джерело: Гололобов ВН, – Самовчитель гри на паяльнику (Про електроніці для школярів і не тільки), – Москва 2012