- Необхідний матеріал
- Розуміння модуля джойстика:
- Кругова діаграма:
- Програмування для взаємодії джойстика:
- Вид моделювання:
- Апаратне і робоче:
Пристрої введення відіграють важливу роль у будь-яких проектах з електроніки. Ці пристрої введення допомагають користувачеві взаємодіяти з цифровим світом. Пристрій введення може бути простим, як кнопка, або складним, як сенсорний екран; вона варіюється залежно від вимог проекту. У цьому підручнику ми дізнаємось, як взаємодіяти джойстик з нашим мікроконтролером PIC, джойстик - це класний спосіб взаємодії з цифровим світом, і майже кожен би використовував його для гри у відеоігри в підлітковому віці.
Джойстик може здатися витонченим пристроєм, але насправді це лише комбінація двох потенціометрів та кнопки. Отже, також дуже легко взаємодіяти з будь-яким MCU за умови, що ми знаємо, як використовувати функцію ADC цього MCU. Ми вже навчилися використовувати ADC з PIC, отже, це буде просто роботою навколо взаємодії джойстика. Людям, які вперше пікітують, рекомендується вивчити вищезазначений проект АЦП, а також проект, що блимає світлодіодами, щоб полегшити розуміння проекту.
Необхідний матеріал
- PicKit 3 для програмування
- Модуль Joy Stick
- PIC16F877A IC
- 40 - тримач мікросхеми штифта
- Перф дошка
- 20 МГц Crystal OSC
- Шпильки Бергстика
- Резистор 220 Ом
- 5-світлодіоди будь-якого кольору
- 1 Паяльний комплект
- IC 7805
- Адаптер 12 В
- Підключення проводів
- Макет
Розуміння модуля джойстика:
Джойстики доступні різних форм і розмірів. Типовий модуль джойстика показаний на малюнку нижче. Джойстик - це не що інше, як пара потенціометрів і кнопка, встановлена на розумному механічному пристрої. Потенціометр використовується для відстеження руху X та Y джойстика, а кнопка визначає, чи натиснуто джойстик. Обидва потенціометри виводять аналогову напругу, яка залежить від положення джойстика. І ми можемо отримати напрямок руху, інтерпретуючи ці зміни напруги за допомогою якогось мікроконтролера. Раніше ми поєднували джойстик з AVR, джойстик з Arduino та Raspberry Pi.
Перш ніж взаємодіяти будь-який датчик або модуль з мікроконтролером, важливо знати, як він функціонує. Тут наш джойстик має 5 вихідних штифтів, з яких два призначені для живлення, а три - для передачі даних. Модуль повинен живити від + 5В. Виводи даних називаються VRX, VRY та SW.
Термін "VRX" означає змінну напругу на осі X, а термін "VRY" означає змінну напругу на осі Y, а "SW" означає комутатор.
Отже, коли ми рухаємо джойстик вліво або вправо, значення напруги на VRX буде змінюватися, а коли ми змінюємо його вгору або вниз, VRY буде змінюватися. Подібним чином, коли ми рухаємо його по діагоналі, ми і VRX, і VRY будемо змінюватися. Коли ми натискаємо перемикач, штифт SW підключається до землі. Наведена нижче фігура допоможе вам набагато краще зрозуміти вихідні значення
Кругова діаграма:
Тепер, коли ми знаємо, як працює Joy stick, ми можемо дійти висновку, що нам будуть потрібні два висновки АЦП і один цифровий вхідний штифт, щоб прочитати всі три висновки даних модуля Джойстика. Повна електрична схема показана на малюнку нижче
Як ви можете бачити на схемі, замість джойстика ми використали два потенціометра RV1 і RV3 як аналогові входи напруги та логічний вхід для комутатора. Ви можете слідувати ярликам, написаним фіолетовим кольором, щоб відповідати іменам шпильок і відповідно встановити з’єднання.
Зверніть увагу, що аналогові виводи підключені до каналів A0 та A1, а цифровий перемикач - до RB0. На виході ми також підключимо 5 світлодіодних ліхтарів, щоб ми могли світити один залежно від напрямку переміщення джойстика. Отже, ці вихідні штифти підключені до порту C від RC0 до RC4. Після того, як ми прокрутили нашу схему, ми можемо приступити до програмування, потім змоделювати програму на цій схемі, потім побудувати схему на макеті, а потім завантажити програму на апаратне забезпечення. Щоб дати вам уявлення, моє обладнання після встановлення вищевказаних з’єднань показано нижче
Програмування для взаємодії джойстика:
Програма для взаємодії джойстика з PIC є простим і прямим. Ми вже знаємо, до яких контактів підключений джойстик і яка їх функція, тому нам просто потрібно зчитувати аналогову напругу з контактів і відповідно керувати вихідними світлодіодами.
Повна програма для цього наведена в кінці цього документа, але для пояснення речей я розбиваю код на невеликі значущі фрагменти нижче.
Як завжди програма запускається із встановлення бітів конфігурації, ми не будемо багато обговорювати питання встановлення бітів конфігурації, оскільки ми це вже дізналися в проекті LED Blinking, і це те саме для цього проекту. Після встановлення бітів конфігурації ми повинні визначити функції ADC для використання модуля ADC у нашому PIC. Ці функції також були вивчені в тому, як використовувати ADC з підручником PIC. Після цього ми повинні оголосити, які висновки є вхідними, а які вихідними. Тут світлодіод підключений до PORTC, таким чином вони є вихідними штифтами, а штифт перемикача джойстика - цифровий вхідний штифт. Отже, ми використовуємо такі рядки, щоб оголосити те саме:
// ***** Конфігурація введення / виводу **** // TRISC = 0X00; // PORT C використовується як вихідні порти PORTC = 0X00; // Зробити всі шпильки низькими TRISB0 = 1; // RB0 використовується як вхід // *** Кінець конфігурації вводу-виводу ** ///
У АЦП висновки не повинні бути визначені в якості вхідних штирьків, так як вони при використанні функції АЦП він буде призначений в якості вхідного контакту. Після того, як контакти визначені, ми можемо назвати ADC_initialize функції, яку ми визначили раніше. Ця функція встановить необхідні регістри АЦП та підготує модуль АЦП.
ADC_Initialize (); // Налаштування модуля ADC
Тепер ми робимо крок в нашу нескінченність в той час як цикл. Усередині цього циклу ми повинні контролювати значення VRX, VRY і SW, а на основі значень ми повинні контролювати вихідний сигнал світлодіода. Ми можемо розпочати процес моніторингу, зчитуючи аналогову напругу VRX і VRY, використовуючи наведені нижче рядки
int joy_X = (ADC_Read (0)); // Зчитуємо вісь X джойстика int joy_Y = (ADC_Read (1)); // Прочитайте вісь Y джойстика
Цей рядок збереже значення VRX та VRY у змінних joy_X та joy_Y відповідно. Функція ADC_Read (0) означає, що ми зчитуємо значення ADC з каналу 0, який є контактом A0. Ми підключили VRX і VRY до контактів A0 і A1, тому читаємо з 0 і 1.
Якщо ви можете згадати з нашого підручника ADC, ми знаємо, що ми читаємо аналогову напругу, а PIC, який є цифровим пристроєм, буде читати його від 0 до 1023. Це значення залежить від положення модуля джойстика. Ви можете скористатися наведеною вище діаграмою етикеток, щоб знати, яке значення можна очікувати для кожного положення джойстика.
Тут я використав граничне значення 200 як нижню межу та значення 800 як верхню межу. Ви можете використовувати все, що завгодно. Тож давайте використаємо ці значення і почнемо відповідно світити світлодіоди. Для цього ми повинні порівняти значення joy_X із заздалегідь визначеними значеннями, використовуючи петлю ПЧ, і зробити висновки світлодіодів високими або низькими, як показано нижче. Рядки коментарів допоможуть вам краще зрозуміти
if (joy_X <200) // Радість переміщена вгору {RC0 = 0; RC1 = 1;} // Світиться верхній світлодіод інакше, якщо (joy_X> 800) // Радість переміщена вниз {RC0 = 1; RC1 = 0;} // Світиться нижній світлодіод інакше // Якщо не переміщено {RC0 = 0; RC1 = 0;} // Вимкніть обидва світлодіода
Подібним чином можна зробити те ж саме для значення осі Y. Нам просто потрібно замінити змінну joy_X на joy_Y, а також керувати двома наступними світлодіодними контактами, як показано нижче. Зверніть увагу, що коли джойстик не рухається, ми вимикаємо обидва світлодіодні індикатори.
if (joy_Y <200) // Радість переміщена вліво {RC2 = 0; RC3 = 1;} // Світиться лівий світлодіод інакше, якщо (joy_Y> 800) // Радість переміщена вправо {RC2 = 1; RC3 = 0;} // Світлодіод світиться вправо else // Якщо не переміщений {RC2 = 0; RC3 = 0;} // Вимкніть обидва світлодіоди
Тепер у нас є ще одна остання справа, ми повинні перевірити перемикач, якщо натиснуто. Штифт перемикача підключений до RB0, тому ми можемо знову використовувати if loop і перевірити, чи він включений. Якщо його натиснути, ми повернемо світлодіод, щоб вказати, що перемикач натиснутий.
if (RB0 == 1) // Якщо натиснута Joy RC4 = 1; // Світиться середній світлодіод ще RC4 = 0; // ВИМКНЕНО середній світлодіод
Вид моделювання:
Повний проект можна змоделювати за допомогою програмного забезпечення Proteus. Після того, як ви написали програму, скомпілюйте код і зв’яжіть шістнадцятковий код імітації зі схемою. Тоді ви повинні помітити, що світлодіодні індикатори світяться відповідно до положення потенціометрів. Моделювання показано нижче:
Апаратне і робоче:
Перевіривши код за допомогою моделювання, ми можемо побудувати схему на хлібній дошці. Якби ви дотримувались навчальних посібників з PIC, ви б помітили, що ми використовуємо ту саму плату для перфорації, до якої припаяно схему PIC та 7805. Якщо ви також зацікавлені в тому, щоб зробити його таким, щоб використовувати його з усіма своїми проектами PIC, тоді припаяйте схему до плати. Або ви також можете побудувати повну схему на макеті. Як тільки апаратне забезпечення буде виконано, це буде приблизно так, як показано нижче.
Тепер завантажте код на мікроконтролер PIC за допомогою PICkit3. Ви можете звернутися до проекту LED Blink для керівництва. Ви повинні помітити, що жовте світло світиться високо, як тільки програма завантажується. Тепер використовуйте джойстик та змінюйте ручку, для кожного напрямку джойстика ви помітите, що відповідний світлодіод світиться високо. При натисканні вимикача посередині він вимкне світлодіод посередині.
Ця робота є лише прикладом, ви можете побудувати багато цікавих проектів поверх неї. Повну роботу над проектом також можна знайти у відео, поданому в кінці цієї сторінки.
Сподіваємось, ви зрозуміли проект і насолоджувались його побудовою, якщо у вас виникли проблеми при цьому, сміливо публікуйте його в розділі коментарів нижче або пишіть на форумах, щоб отримати допомогу.