- Reikalinga medžiaga
- Suprasti vairasvirtės modulį:
- Grandinės schema:
- Valdymo svirties sąsajos programavimas:
- Modeliavimo rodinys:
- Aparatūra ir darbas:
Įvesties įrenginiai vaidina svarbų vaidmenį įgyvendinant bet kokius elektronikos projektus. Šie įvesties įrenginiai padeda vartotojui bendrauti su skaitmeniniu pasauliu. Įvesties įrenginys gali būti paprastas kaip mygtukas arba sudėtingas kaip jutiklinis ekranas; jis skiriasi atsižvelgiant į projekto reikalavimus. Šioje pamokoje mes mokysimės, kaip susieti vairasvirtę su mūsų PIC mikrovaldikliu, vairasvirtė yra puikus būdas bendrauti su skaitmeniniu pasauliu ir beveik visi ją būtų naudoję žaisdami vaizdo žaidimus savo paauglystėje.
Vairasvirtė gali būti sudėtingas įrenginys, tačiau iš tikrųjų tai tik dviejų potenciometrų ir mygtuko derinys. Taigi, taip pat labai lengva sąsaja su bet kuriuo MCU, jei žinome, kaip naudoti to MCU ADC funkciją. Mes jau sužinojome, kaip naudoti ADC su PIC, taigi tai būtų tik darbas, norint susieti vairasvirtę. Žmonėms, kurie yra nauji „pickit“, rekomenduojama išmokti pirmiau pateiktą ADC projektą ir LED mirksiojo sekos projektą, kad būtų lengviau suprasti projektą.
Reikalinga medžiaga
- „PicKit 3“ programavimui
- „Joy Stick“ modulis
- PIC16F877A IC
- 40 - kaiščių IC laikiklis
- Puiki lenta
- 20 MHz kristalinis OSC
- „Bergstik“ smeigtukai
- 220ohm rezistorius
- 5 bet kurios spalvos šviesos diodai
- 1 litavimo rinkinys
- IC 7805
- 12 V adapteris
- Jungiamieji laidai
- Bandomoji Lenta
Suprasti vairasvirtės modulį:
Vairas yra įvairių formų ir dydžių. Tipinis „ Joystick“ modulis parodytas paveikslėlyje žemiau. Vairasvirtė yra ne kas kita, kaip pora potenciometrų ir mygtukas, sumontuotas virš sumanaus mechaninio išdėstymo. Potenciometras naudojamas vairasvirtės judėjimui X ir Y sekti, o mygtukas naudojamas suvokti, ar paspaudžiamas vairasvirtė. Abu potenciometrai išleidžia analoginę įtampą, kuri priklauso nuo vairasvirtės padėties. Ir mes galime gauti judėjimo kryptį interpretuodami šiuos įtampos pokyčius naudodami kokį nors mikrovaldiklį. Anksčiau mes susiejome vairasvirtę su AVR, vairasvirtę su „Arduino“ ir „Raspberry Pi“.
Prieš sujungiant bet kurį jutiklį ar modulį su mikrovaldikliu, svarbu žinoti, kaip jis veikia. Čia mūsų vairasvirtėje yra 5 išvesties kaiščiai, iš kurių du skirti energijai, o trys - duomenims. Modulis turėtų būti maitinamas + 5 V įtampa. Duomenų smeigtukai pavadinti VRX, VRY ir SW.
Terminas „VRX“ reiškia kintamą įtampą X ašyje, o terminas „VRY“ reiškia kintamą įtampą Y ašyje, o „SW“ - jungiklį.
Taigi, kai vairasvirtę perkeliame į kairę arba į dešinę, VRX įtampa skiriasi, o kai ją keičiame aukštyn arba žemyn, VRY skirsis. Panašiai, kai mes judėsime įstrižai, ir VRX, ir VRY skirsis. Kai paspausime jungiklį, SW kaištis bus prijungtas prie žemės. Žemiau pateiktas paveikslėlis padės daug geriau suprasti išvesties vertes
Grandinės schema:
Dabar, kai žinome, kaip veikia „Joy stick“, galime padaryti išvadą, kad mums reikės dviejų ADC kaiščių ir vieno skaitmeninio įvesties kaiščio, kad galėtume perskaityti visus tris „Joystick“ modulio duomenų kaiščius. Visa grandinės schema parodyta paveikslėlyje žemiau
Kaip matote grandinės schemoje, vietoj vairasvirtės mes naudojome du potenciometrus RV1 ir RV3 kaip analoginės įtampos įėjimus ir jungiklio loginę įvestį. Galėtumėte sekti violetinės spalvos etiketes, kad atitiktų smeigtukų pavadinimus, ir atitinkamai užmegzti ryšius.
Atkreipkite dėmesį, kad analoginiai kaiščiai yra prijungti prie A0 ir A1 kanalų, o skaitmeninis jungiklis - prie RB0. Mes taip pat turėsime 5 LED žibintus, prijungtus kaip išvestį, kad galėtume švytėti pagal vairasvirtės judėjimo kryptį. Taigi šie išvesties kaiščiai yra prijungti prie PORT C nuo RC0 iki RC4. Kai apversime savo grandinės schemą, galime tęsti programavimą, tada imituoti šios grandinės programą, tada pastatyti grandinę ant duonos lentos ir tada įkelti programą į aparatinę įrangą. Norėdami pateikti jums idėją, mano aparatinė įranga, atlikus aukščiau pateiktus ryšius, parodyta žemiau
Valdymo svirties sąsajos programavimas:
Programa sąsajos manipuliatorių su PIC yra paprasta ir važiuoti tiesiai į priekį. Mes jau žinome, prie kokių kaiščių yra prijungtas vairasvirtė ir kokia yra jų funkcija, todėl mes tiesiog turime nuskaityti analoginę įtampą iš kaiščių ir atitinkamai valdyti išvesties šviesos diodus.
Visa programa, kaip tai padaryti, pateikiama šio dokumento pabaigoje, tačiau norint paaiškinti dalykus, aš sulaužau kodą į mažus reikšmingus fragmentus žemiau.
Kaip visada programa pradedama nustatant konfigūracijos bitus, mes neketiname daug diskutuoti apie konfigūracijos bitų nustatymą, nes mes jau išmokome tai „LED Mirksintis“ projekte, ir tai yra tas pats šiam projektui. Nustačius konfigūracijos bitus, turime apibrėžti ADC funkcijas, skirtas naudoti ADC modulį mūsų PIC. Šios funkcijos taip pat buvo išmoktos, kaip naudoti ADC su PIC pamoka. Po to turime deklaruoti, kurie kaiščiai yra įėjimai, o kurie - išvesties kaiščiai. Čia LED yra prijungtas prie PORTC, todėl jie yra išvesties kaiščiai, o vairasvirtės jungiklio kaištis yra skaitmeninis įvesties kaištis. Taigi mes naudojame šias eilutes, kad deklaruotume tą patį:
***** Įvesties / išvesties konfigūracija **** // TRISC = 0X00; // PORT C naudojamas kaip išvesties prievadai PORTC = 0X00; // MAke all pins low TRISB0 = 1; // RB0 naudojamas kaip įvestis // *** I / O konfigūracijos pabaiga ** ///
Kad ADC kaiščiai nereikia būti apibrėžiamas kaip įvesties kaiščių, nes jie, kai, naudojant ADC funkciją ji bus priskirta kaip įvesties kaiščiu. Kai smeigtukai bus apibrėžti, mes galime iškviesti ADC_initialize funkciją, kurią mes apibrėžėme anksčiau. Ši funkcija nustatys reikiamus ADC registrus ir parengs ADC modulį.
ADC_Initialize (); // Konfigūruokite ADC modulį
Dabar žengiame į savo begalinį, o kilpą. Šios kilpos viduje turime stebėti VRX, VRY ir SW reikšmes ir, remdamiesi vertėmis, turime valdyti šviesos diodų išvestį. Stebėjimo procesą galime pradėti nuskaitydami analoginę VRX ir VRY įtampą, naudodami žemiau pateiktas eilutes
int džiaugsmas_X = (ADC_Read (0)); // Perskaitykite vairasvirtės X ašį int joy_Y = (ADC_Read (1)); // Perskaitykite vairasvirtės Y ašį
Ši eilutė sutaupys VRX ir VRY reikšmę atitinkamai kintamuose džiaugsmo_X ir džiaugsmo_Y . Funkcija ADC_Read (0) reiškia, kad mes skaitome ADC vertę iš 0 kanalo, kuris yra kaištis A0. Mes prijungėme VRX ir VRY prie A0 ir A1 kaiščių, todėl skaitėme nuo 0 ir 1.
Jei galite atsiminti iš mūsų ADC mokymo programos, žinome, kad mes perskaitėme analoginę įtampą, kai PIC yra skaitmeninis įrenginys, jis ją perskaitys nuo 0 iki 1023. Ši vertė priklauso nuo vairasvirtės modulio padėties. Norėdami sužinoti, kokios vertės galite tikėtis kiekvienoje vairasvirtės padėtyje, galite naudoti aukščiau pateiktą etikečių schemą.
Čia aš naudoju ribinę vertę 200 kaip apatinę ribą ir 800 vertę kaip viršutinę ribą. Galite naudoti viską, ko norite. Taigi panaudokime šias reikšmes ir pradėkime atitinkamai švytėti šviesos diodais. Norėdami tai padaryti, turime palyginti džiaugsmo_X reikšmę su iš anksto nustatytomis reikšmėmis, naudojant IF kilpą, ir padaryti LED kaiščius aukštus arba žemus, kaip parodyta žemiau. Komentarų eilutės padės geriau suprasti
if (džiaugsmas_X <200) // Džiaugsmas pakilo aukštyn {RC0 = 0; RC1 = 1;} // Šviečia viršutinis šviesos diodas, jei (džiaugsmas_X> 800) // Džiaugsmas pasislinko žemyn {RC0 = 1; RC1 = 0;} // Šviečia apatinis šviesos diodas kitas // Jei nejudinamas {RC0 = 0; RC1 = 0;} // Išjunkite abi lemputes
Panašiai tą patį galime padaryti ir Y ašies vertei. Mes tiesiog turime pakeisti kintamąjį joy_X į joy_Y ir taip pat valdyti kitus du LED kaiščius, kaip parodyta žemiau. Atkreipkite dėmesį, kad kai vairasvirtė nejudinama, mes išjungiame abu LED žibintus.
if (džiaugsmas_Y <200) // Džiaugsmas pasislinko kairėn {RC2 = 0; RC3 = 1;} // Šviečia kairysis šviesos diodas, jei (džiaugsmas_Y> 800) // Džiaugsmas pasislenka į dešinę {RC2 = 1; RC3 = 0;} // Šviečia dešinysis šviesos diodas kitas // Jei nejudinamas {RC2 = 0; RC3 = 0;} // Išjunkite abu šviesos diodus
Dabar turime padaryti dar vieną paskutinį dalyką, jei turime paspausti, turime patikrinti jungiklį. Jungiklio kaištis yra prijungtas prie RB0, kad vėl galėtume naudoti „if loop“ ir patikrinti, ar jis įjungtas. Jei jis bus paspaustas, pasuksime šviesos diodą, kuris parodys, kad jungiklis paspaustas.
if (RB0 == 1) // Jei paspaudžiamas džiaugsmas RC4 = 1; // Švyti vidurinis šviesos diodas dar RC4 = 0; // Išjungtas vidurinis šviesos diodas
Modeliavimo rodinys:
Visą projektą galima imituoti naudojant „Proteus“ programinę įrangą. Parašę programą, sudarykite kodą ir susiekite modelio šešioliktainį kodą su grandine. Tada turėtumėte pastebėti, kad šviesos diodų lemputės šviečia pagal potenciometrų padėtį. Modeliavimas parodytas žemiau:
Aparatūra ir darbas:
Patikrinę kodą naudodami modeliavimą, grandinę galime pastatyti ant duonos lentos. Jei stebėtumėte PIC mokymo programas, būtumėte pastebėję, kad mes naudojame tą pačią perf plokštę, prie kurios prilituota PIC ir 7805 grandinė. Jei jus taip pat domina sukurti tokį, kad galėtumėte jį naudoti su visais savo PIC projektais, lituokite grandinę ant tobulos lentos. Arba taip pat galite sukurti visą grandinę ant duonos lentos. Kai aparatūra bus padaryta, tai bus kažkas panašaus žemiau.
Dabar įkelkite kodą į PIC mikrovaldiklį naudodami PICkit3. Galite nurodyti „LED Blink“ projektą. Turėtumėte pastebėti, kad geltona lemputė užgęsta vos įkėlus programą. Dabar naudokite vairasvirtę ir keiskite rankenėlę, kiekvienai vairasvirtės krypčiai pastebėsite atitinkamą šviesos diodą. Paspaudus jungiklį viduryje, jis išjungs viduryje esantį šviesos diodą.
Šis darbas yra tik pavyzdys, ant jo galite pastatyti daug įdomių projektų. Visą projekto darbą taip pat galite rasti vaizdo įraše, pateiktame šio puslapio pabaigoje.
Tikiuosi, kad supratote projektą ir jums patiko jį kurti, jei turite kokių nors problemų tai darydami, nedvejodami paskelbkite jį žemiau esančiame komentarų skyriuje arba parašykite forumuose, kur norite gauti pagalbos.