Підключення матричної клавіатури до STM32F4Discovery
Лінійка мікроконтролерів STM32 є досить цікавим об'єктом для вивчення. Часто можна почути думку, що робота з ним складна для початківця, і краще братися за щось більш просте. У цій статті ми спробуємо показати, що мікроконтролери STM32 не такі страшні.
Кожен, хто займається розробкою пристроїв мікропроцесорної техніки, повинен мати у своєму арсеналі набір готових рішень, який є хорошою базою для майбутніх проектів. До таких рішень, на нашу думку, можна віднести застосування дисплея, клавіатури, роботу з транзисторними ключами, обробку зовнішніх переривань від кнопки/датчика тощо.
При роботі, описаній у цій статті, використовувалася налагоджувальна плата STM32F4Discovery та матрична клавіатура, у нашому випадку, що має 7 виводів. Середа розробки CoIDE 1.7.6.
Для того, щоб розібратися в програмі, що реалізує цю операцію, необхідно мати мінімальні знання та навички роботи з портами вводу/виводу та системними таймерами. З існуючими методами підключення клавіатури можна ознайомитися за посиланням [1].
Перед тим, як приступати до написання програми, визначимося з умовними позначеннями:
- Виводи, до яких підключається клавіатура, розділені на дві групи: скануючі та живильні (малюнок 1). Скануючі виводи працюють на вхід. Усі живильні виводи за замовчуванням встановлені в нульове стан, але після першого скидання таймера TIM2 на виводі PA3 буде встановлено напруга логічної «1», тому з певним наближенням можна сказати, що на живильних виводах у момент часу, близький до початкового, виставлена комбінація «1-0-0-0».
- По тексту програми позначення виводів відповідатимуть малюнку 1, тобто значення виводів PA0, PA1, PA2 при їх опитуванні записуються в змінні a, b, c відповідно, для подальших операцій з ними.
- Живильні виводи PA3 – PA4 мають позначення від 1 до 4, саме під такими номерами вони згадуються в тексті програми.
Малюнок 1 – Підключення клавіатури
Перейдемо до опису алгоритму дії програми. Після увімкнення живлення запускаються два таймери (TIM2 і TIM3), які працюють циклічно, тобто при завершенні рахунку виконуються певні дії (ці дії прописані в функціях обробників переривань від таймерів TIM2 і TIM3) і відлік починається заново. По закінченню першого відліку таймера TIM2 на виводі PA3 з'являється рівень логічної «1», який кожного разу, при завершенні рахунку цього таймера, зміщується на одну позицію вниз. При цьому мікроконтролер завжди «знає», на якому виводі в даний момент знаходиться рівень напруги логічної «1», ця інформація зберігається в змінній out_state. Операцію по «зсуву» логічної «1» виконує функція TIM2_IRQHandler (обробник переривання від таймера 2).
Таймер TIM3 при завершенні кожного циклу сканує стан виводів PA0-PA2, записуючи отримані результати у змінні a, b і c. Потім мікроконтролер порівнює, на якому з живильних виводів знаходиться напруга логічної «1» (змінна out_state) і який з виводів PA0 – PA2 має високий логічний рівень (змінні a, b, c). Ці дії виконує функція TIM3_IRQHandler (обробник переривання від таймера 3).
При натисканні, наприклад, кнопки «3», високий логічний рівень має бути встановлено на виводі PA3 та зареєстровано на виводі PA0. При виконанні цього логічного виразу мікроконтролер «зрозуміє», що була натиснута клавіша «3» і, при натисканні цієї кнопки, виконає попереднє йому дію, у нашому випадку, вимкне всі світлодіоди, а потім увімкне зелений світлодіод.
Використовувана процедура порівняння дозволяє розрізняти між собою одночасне натискання однієї, двох, трьох і більше клавіш (при доопрацюванні функції TIM3_IRQHandler) та присвоєння такій події певної дії.
У цьому прикладі, для того щоб зрозуміти, правильно чи ні написана програма, використано різні комбінації світлодіодів, розташованих на платі, клавіша 5 – вимикає всі світлодіоди.
Дуже важливо розібратися, які виводи на клавіатурі відповідають натиснутим клавішам. Необхідно виділити рядки та стовпці (ділення на рядки та стовпці в даному випадку є досить умовним, оскільки це залежить від форми та положення клавіатури. Приймемо за замовчуванням, що стовпці – це лінія «3-6-9-#» тощо, а рядки – «3-2-1» тощо), оскільки стовпці з'єднуються зі скануючими виводами, рядки – з виводами живлення. Для правильного визначення виводів на матричній клавіатурі необхідно підключити один з щупів мультиметра, що знаходиться в режимі прозвонки, до будь-якого крайній контакту, а другий щуп підключати до решти контактів, одночасно натискаючи на клавіші, розташовані в одному стовпці. Якщо при натисканні на будь-яку клавішу два виводи не прозванюються – це означає, що вони обидва належать до однієї групи (рядкових або стовпчикових виводів). Після того, як всі виводи будуть розбиті на дві групи, можна переходити до визначення порядку їх розміщення всередині груп. При цьому, при фіксованому підключенні до одного стовпчикового виводу, необхідно змінювати контакти з другої групи, натискаючи одночасно з цим тільки клавіші, що належать до одного стовпця.
Пояснимо вище сказане на прикладі. Підключаємо щуп мультиметра до крайнього стовпчикового виводу, а другий до будь-якого рядкового і перевіряємо послідовно кожну клавішу з стовпця, що відповідає вибраному стовпчиковому виводу, на прозвонку. При появі контакту дивимося на номер натиснутої клавіші та яким виводам з малюнка 1 відповідає це подія. Далі ми переносимо відповідно значення для стовпчикового контакту та рядкового.
Тепер поговоримо про ініціалізацію використовуваної периферії. У цьому проекті використовуються порти A та D, як порти вводу-виводу, а також таймери TIM2 та TIM3. Лістинг програми забезпечений детальними коментарями по пунктах налаштування периферії.
Використання системних таймерів дозволяє уникнути «реєстрації» дрібного контакту, а також звільняє досить велику кількість машинного часу, оскільки в програмі повністю виключені функції затримок.
На жаль, ця програма позбавлена простої можливості налаштування коду під себе, але, якщо розібрати код по рядках, ви зможете реалізувати підключення клавіатур різного розміру та функціоналу, як цифрових, так і символьних. Крім цього, змінюючи код обробника таймера TIM2, можна прив'язувати до клавіш певні функції або вивід символів на екран (цей проект знаходиться в розробці).
Стаття підготовлена з використанням методичних вказівок [2].
Бібліографічний список
- http://easyelectronics.ru/matrichnaya-klaviatura.html
- Лабораторний практикум по вивченню мікроконтролерів STM32 на базі налагоджувального модуля STM32F3 Discovery та STM32F4 Discovery / Бугаєв В.І., Мусієнко М.П., Крайник Я.М. – Москва-Николаїв: МФТИ-ЧГУ, 2014. – 26 с.
Прикреплені файли:
- keyboard_with_TIMs.rar (181 Кб)