- Необходим материал
- Разбиране на модула на джойстика:
- Електрическа схема:
- Програмиране за свързване на джойстика:
- Изглед на симулация:
- Хардуер и работа:
Устройствата за въвеждане играят жизненоважна роля във всеки електронен проект. Тези устройства за въвеждане помагат на потребителя да взаимодейства с цифровия свят. Устройството за въвеждане може да бъде просто като бутон или сложно като сензорен екран; тя варира в зависимост от изискванията на проекта. В този урок ще научим как да свързваме джойстик с нашия микроконтролер PIC, джойстикът е страхотен начин за взаимодействие с цифровия свят и почти всеки би използвал такъв за игра на видео игри в юношеската си възраст.
Джойстик може да изглежда сложно устройство, но всъщност е просто комбинация от два потенциометра и бутон. Следователно е много лесно да се свързва с който и да е MCU, при условие че знаем как да използваме функцията ADC на този MCU. Вече научихме как да използваме ADC с PIC, следователно това би било просто работа за свързване на джойстика. За хора, които са нови за избор, се препоръчва да научат горния проект ADC, както и проекта за мигаща LED последователност, за да улеснят разбирането на проекта.
Необходим материал
- PicKit 3 за програмиране
- Модул Joy Stick
- PIC16F877A IC
- 40 - ПИН държач
- Перфектна дъска
- 20 MHz Crystal OSC
- Щипки Bergstik
- 220ohm резистор
- 5-светодиода от всякакъв цвят
- 1 комплект за запояване
- IC 7805
- 12V адаптер
- Свързващи проводници
- Макет
Разбиране на модула на джойстика:
Джойстиците се предлагат в различни форми и размери. Типичен модул Джойстик е показан на фигурата по-долу. Джойстик не е нищо повече от няколко потенциометри и бутон, монтирани върху интелигентна механична подредба. Потенциометърът се използва за проследяване на движението на X и Y на джойстика, а бутонът се използва за засичане на натискането на джойстика. И двата потенциометра извеждат аналогово напрежение, което зависи от позицията на джойстика. И можем да получим посоката на движение, като интерпретираме тези промени на напрежението с помощта на някакъв микроконтролер. Преди това сме свързвали Джойстик с AVR, Джойстик с Arduino и Raspberry Pi.
Преди да свържете даден сензор или модул с микроконтролер, е важно да знаете как той функционира. Тук нашият джойстик има 5 изходни щифта, от които два за захранване и три за данни. Модулът трябва да се захранва с + 5V. Пинковете за данни се наричат VRX, VRY и SW.
Терминът „VRX“ означава променливо напрежение по оста X, а терминът „VRY“ означава променливо напрежение по оста Y, а „SW“ означава превключвател.
Така че, когато преместваме джойстика наляво или надясно, стойността на напрежението на VRX ще варира, а когато го променяме нагоре или надолу, VRY ще варира. По същия начин, когато го преместваме диагонално, и VRX, и VRY ще варираме. Когато натиснем превключвателя, SW щифтът ще бъде свързан към земята. Фигурата по-долу ще ви помогне да разберете много по-добре изходните стойности
Електрическа схема:
След като вече знаем как работи Joy stick, можем да стигнем до заключението, че ще са ни необходими два ADC щифта и един цифров входен щифт, за да прочетем всичките три пина за данни на модула Joystick. Пълната електрическа схема е показана на снимката по-долу
Както можете да видите на схемата, вместо джойстика сме използвали два потенциометъра RV1 и RV3 като аналогови входове за напрежение и логически вход за превключвателя. Можете да следвате етикетите, написани в виолетов цвят, за да съвпадат имената на щифтовете и да направите връзките си съответно.
Имайте предвид, че аналоговите щифтове са свързани към канали A0 и A1, а цифровият превключвател е свързан към RB0. Също така ще имаме 5 LED светлини, свързани като изход, така че да можем да светим една в зависимост от посоката на движение на джойстика. Така че тези изходни щифтове са свързани към PORT C от RC0 до RC4. След като сме панорамирали нашата схема, можем да продължим с програмирането, след това да симулираме програмата на тази схема, след това да изградим веригата на макет и след това да качим програмата на хардуера. За да ви дам представа, моят хардуер след извършване на горните връзки е показан по-долу
Програмиране за свързване на джойстика:
В програмата за действие на интерфейсите с джойстик PIC е проста и право напред. Вече знаем, към кои щифтове е свързан Джойстикът и каква е тяхната функция, така че просто трябва да прочетем аналоговото напрежение от щифтовете и да контролираме съответно светодиодите на изхода.
Пълната програма за това е дадена в края на този документ, но за обяснение на нещата разбивам кода на малки смислени фрагменти по-долу.
Както винаги програмата се стартира чрез задаване на конфигурационни битове, няма да обсъждаме много за задаване на конфигурационни битове, защото вече сме го научили в проекта LED Blinking и той е същият и за този проект. След като битовете за конфигурация са зададени, трябва да дефинираме функциите ADC за използване на модула ADC в нашия PIC. Тези функции бяха научени и в начина на използване на ADC с PIC урок. След това трябва да декларираме кои изводи са входове и кои изводи. Тук светодиодът е свързан към PORTC, така че те са изходни щифтове, а превключващият щифт на джойстика е цифров входен щифт. Затова използваме следните редове, за да декларираме същото:
// ***** I / O конфигурация **** // TRISC = 0X00; // PORT C се използва като изходни портове PORTC = 0X00; // Направете всички пинове ниски TRISB0 = 1; // RB0 се използва като вход // *** Край на I / O конфигурацията ** ///
На щифтове ADC не е необходимо да бъдат определени като входни пина, защото при използване на функцията за ADC ще бъде назначен като вход щифт. След като са определени щифтовете, ние можем да се обадите на ADC_initialize функция, която ние определено по-рано. Тази функция ще зададе необходимите ADC регистри и ще подготви ADC модула.
ADC_Initialize (); // Конфигуриране на модула ADC
Сега стъпваме в нашия безкраен цикъл докато . Вътре в този цикъл трябва да наблюдаваме стойностите на VRX, VRY и SW и въз основа на стойностите трябва да контролираме изхода на led. Можем да започнем процеса на наблюдение, като прочетем аналоговото напрежение на 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 контур и да направим LED пиновете високи или ниски, както е показано по-долу. Редовете за коментари ще ви помогнат да разберете по-добре
if (joy_X <200) // Радостта се премести нагоре {RC0 = 0; RC1 = 1;} // Свети горният светодиод иначе, ако (joy_X> 800) // Радостта е преместена надолу {RC0 = 1; RC1 = 0;} // Свети долния светодиод else // Ако не е преместен {RC0 = 0; RC1 = 0;} // Изключете и двата светодиода
По същия начин можем да направим същото и за стойността на оста Y. Просто трябва да заменим променливата joy_X с joy_Y и също така да контролираме следващите два LED щифта, както е показано по-долу. Имайте предвид, че когато джойстикът не е преместен, ние изключваме и двете LED светлини.
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. След като напишете програмата, компилирайте кода и свържете шестнадесетичния код на симулацията с веригата. След това трябва да забележите, че LED светлините светят според позицията на потенциометрите. Симулацията е показана по-долу:
Хардуер и работа:
След като проверим кода с помощта на симулацията, можем да изградим веригата на дъска за хляб. Ако сте следвали уроците за PIC, бихте забелязали, че използваме същата перфектна платка, към която има спойка PIC и 7805. Ако също се интересувате да направите такъв, така че да го използвате с всичките си PIC проекти, тогава запойте веригата на перфектна дъска. Или можете също така да изградите пълната схема на макет. След като хардуерът е свършен, ще бъде нещо подобно по-долу.
Сега качете кода в микроконтролера PIC с помощта на PICkit3. Можете да се обърнете към проекта LED Blink за насоки. Трябва да забележите, че жълтата светлина изгасва веднага щом програмата бъде качена. Сега използвайте джойстика и променяйте копчето, за всяка посока на джойстика ще забележите, че съответният светодиод се издига високо. Когато ключът в средата бъде натиснат, той ще изключи светодиода в средата.
Тази работа е само пример, можете да изградите много интересни проекти върху нея. Пълната работа на проекта може да бъде намерена и във видеото, дадено в края на тази страница.
Надявам се, че сте разбрали проекта и ви е било приятно да го изградите, ако имате някакъв проблем при това, не се колебайте да го публикувате в раздела за коментари по-долу или да го напишете във форумите за получаване на помощ.