Технічні вимоги до проектованого виробу
Переклад даташіта AVR245: Code Lock with 4x4 Keypad and I2C LCD on a tinyAVR [1], присвяченого практичної реалізації кодового замка на мікроконтролері AVR.
Особливості кодового замка:
• Приклад програми ідеально демонструє ефективне використання портів мікроконтролера, так що кодовий замок можна зробити на мікроконтролері з невеликою кількістю виводів (14-вивідних ATtiny24).
• Клавіатурна матриця 4x4 опитується через порти введення / виводу (I / O).
• Для генерації звуків через п'єзоелектричний випромінювач використовується таймер / лічильник.
• Для обміну з екраном LCD (інтерфейс I2C ™) використовується USI (універсальний послідовний інтерфейс) в двухпроводном режимі (TWI).
• Програма firmware мікроконтролера повністю написана на C.
[1 Введення]
Кодові замки роблять завдання управління доступу в приміщення більш гнучкою і простий для конфігурації. Механічні замки потребують виготовлення нових ключів, коли потрібно дати привілей доступу новим користувачам. Традиційний замок може бути переконфігурувати або замінений для зміни привілеїв доступу одного користувача, і якщо ключі втрачені, то потрібна заміна всього замку або його кодової вставки. Подібні ситуації можуть відбутися, коли люди переїжджають з одного місця на інше, або коли компанія приймає на роботу нових співробітників (або звільняє старих). Кодові замки мають перевагу, так як їх можна просто перепрограмувати і воно можуть тримати в пам'яті унікальні коди для кожного користувача.
Цей апноут описує, як створити кодовий замок на мікроконтролері AVR та інших відповідних компонентах. Кодовий замок використовує клавіатурну матрицю 4x4 для введення користувача, п'єзоелектричний динамік для звукових сповіщень і екран LCD для виведення інформації, див. Рис. 1-1. Розробка заснована на пристроях ATtiny24 / 44/84, але її можна просто перенести на інші мікроконтролери AVR.
AVR245-Block-Schematic-Code-Lock
Рис. 1-1. Блок-схема кодового замка.
[2 Теоретичні основи роботи кодового замка]
Описуваний кодовий замок містить tinyAVR, клавіатуру, LCD, пьезоізлучатель і електромеханічний (дверний) замок. AVR постійно сканує клавіатуру в очікуванні введення користувача, і відкриє замок, коли буде введена правильна комбінація цифр коду. LCD використовується для зворотного зв'язку і відображення інформації про стан замку. Маленька пьезопіщалка використовується для видачі звукових підтверджень про натисканнях клавіш і стані замку (оповіщення про те, що двері відкриті).
2.1 Клавіатура
Пристроєм введення є стандартна матриця кнопок 4x4. Поле клавіатури містить 16 клавіш, розташованих симетрично в 4 рядках по 4 клавіші в кожній. Кожен стовпець і рядок підключений до порту I / O мікроконтролера.
3x4-Keypad-A 3x4-Keypad-B 4x4-Keypad-A 4x4-Keypad-B 4x4-Keypad-C
Мікроконтролер постійно сканує клавіатуру, встановлюючи всі висновки рядків (це виходи) в лог. 1, крім одного, і при цьому зчитує стан всіх портів стовпців (це входи). Всі входи стовпців мають дозволені верхні внутрішні навантажувальні резистори (pull-up), так що коли кнопка натиснута, то на одному з входів стовпців буде прочитаний низький логічний рівень.
2.2 П'єзоелектричний випромінювач
П'єзоелектричні звукові компоненти дають чистий, добре помітний звук, вільний від гармонік. При цьому пристрої можуть генерувати гучний звук при малому енергоспоживанні, що ідеально підходить для застосування разом з мікроконтролерами.
piezo buzzer-A piezo buzzer-B piezo buzzer-C
Випромінювачем звуку в пьезодінаміке служить діафрагма. Прикладена постійна напруга (DC) до обкладкам діафрагми змушує її деформуватися, а якщо підключити змінну напругу (AC), то через що виникають механічних коливань виходить звук. Висота звуку, який виробляє пьезоізлучатель, прямо пропорційна частоті приходить змінного сигналу.
Таймер / лічильник AVR добре підходить для генерації сигналу керування для пьезоізлучателя.
2.3 LCD
Дисплей, використовуваний у цій розробці, має 2 рядки по 16 символів (2x16 LCD), який має вбудований контроллер. Спеціальна особливість дисплея - наявність інтерфейсу I2C ™ з контролером. Інтерфейс I2C повністю сумісний з двухпроводним інтерфейсом (Two-Wire Interface, TWI) який є в мікроконтролерах AVR, і оскільки ATtiny24 обладнаний універсальним послідовним інтерфейсом (Universal Serial Interface, USI), який може працювати в режимі TWI, то це означає, що LCD може управлятися через тільки 2 виводу порту.
lcd162b-ggn
[3 Реалізація]
Апаратно замок реалізований досить просто. Прототип (макет) досить просто виготовити за допомогою STK500, STK505, якщо підключити клавіатуру і LCD до роз'ємів через сполучні кабелі.
Прим. перекладача: можна також взяти будь-яку з макетних плат AVR-USB-MEGA16, AVR-USB162, AVR-USB162MU, AVR-USB32U4. На кожній з них є макетне поле, на якому зручно зібрати схему замку.
3.1 Апаратна начинка замку
Схема показана на малюнку нижче.
AVR245-Schematic-Code-Lock
Рис. 2-1. Принципова електрична схема кодового замка.
Електричний замок є специфічним компонентом, і може бути електромеханічної засувкою, магнітним замком, або будь-яким іншим замком, керованим через реле. Такі замки роблять багато виробників, включаючи наприклад ASSA, ABLOY, Headen і ESMI.
electric-lock-A electric-lock-B electric-lock-Headen
3.2 Програмна частина (firmware)
Код firmware мікроконтролера написаний цілком на мові C. Це робить розробку простий для розуміння, і робить майбутні доопрацювання і розробки на основі цього проекту максимально наочними.
Програмне забезпечення має повну документацію на основі doxygen, яка бере інформацію з вихідного коду (див. Readme.html). У документації також наведені вимоги до компілятору.
3.2.1 Огляд алгоритму firmware
Алгоритм роботи програми мікроконтролера показаний на малюнку нижче.
AVR245-Flow-Chart-Code-Lock
Рис. 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. Функція управління пищалкой використовує вхідний параметр для прямої установки вихідної частоти звуку. Це означає, що відповідь по частоті випромінювання буде обернено пропорційний параметру функції. Іншими словами, збільшення значення параметра при виклику функції буде зменшувати частоту звуку.
Більш дружній інтерфейс мав би брати зворотну величину від параметра в якості значення для програмування таймера лічильника. Але це не було зроблено з двох причин: по-перше, що генеруються звуки досить прості, щоб їх заздалегідь задати константами, а по-друге, застосування зворотної величини потребують операцій ділення і значно збільшить розмір коду.