Orodha ya maudhui:

Jinsi ya Kutafsiri Mwelekeo wa Mzunguko Kutoka kwa Kubadilisha Rotary ya dijiti na PIC: Hatua 5
Jinsi ya Kutafsiri Mwelekeo wa Mzunguko Kutoka kwa Kubadilisha Rotary ya dijiti na PIC: Hatua 5

Video: Jinsi ya Kutafsiri Mwelekeo wa Mzunguko Kutoka kwa Kubadilisha Rotary ya dijiti na PIC: Hatua 5

Video: Jinsi ya Kutafsiri Mwelekeo wa Mzunguko Kutoka kwa Kubadilisha Rotary ya dijiti na PIC: Hatua 5
Video: ОЖИДАНИЕ или РЕАЛЬНОСТЬ! ИГРЫ в РЕАЛЬНОЙ ЖИЗНИ! Маленькие кошмары 2 в реальной жизни! 2024, Novemba
Anonim
Jinsi ya Kutafsiri Mwelekeo wa Mzunguko Kutoka kwa Kubadilisha Rotary ya dijiti na PIC
Jinsi ya Kutafsiri Mwelekeo wa Mzunguko Kutoka kwa Kubadilisha Rotary ya dijiti na PIC

Lengo la Agizo hili ni kuonyesha jinsi ya kugeuza swichi ya rotary ya (kificho cha nambari nne) na mdhibiti mdogo. Usijali, nitaelezea nini maana ya nambari za nambari nne kwetu. Muunganisho huu na programu inayoambatana na hiyo itaruhusu mdhibiti mdogo kutambua mwelekeo wa kuzunguka kwa kila hoja kutoka kwa kujificha moja hadi nyingine. detents badala ya vifungo vya juu / chini. Wazo lilikuwa kumruhusu mtumiaji "kupiga" shinikizo linalotaka. Kama matokeo, ilibidi tutengeneze utaratibu wa programu kupata habari za msimamo kutoka kwa swichi na tuchunguze mwelekeo wa kuzungusha ili kuongeza au kupunguza kiwango cha shinikizo kwa mfumo kuu. kwa mdhibiti mdogo, nadharia ya operesheni kwa swichi ya rotary, nadharia ya operesheni ya programu na pia utaratibu wa upunguzaji. Mwishowe, nitakuonyesha matumizi yangu ya utaratibu wa upunguzaji. Tunapoendelea, nitajaribu kuweka vitu kwa kawaida ili wazo litumike kwenye majukwaa mengi iwezekanavyo lakini pia nitashiriki kile nilichofanya ili uweze kuona programu maalum.

Hatua ya 1: Sehemu

Sehemu
Sehemu

Ili kutekeleza hii, utahitaji: Kitufe cha kuzunguka (kificho cha quadrature) Vuta vipikizi Jukwaa linalofaa la kudhibiti microcontact Kwa mradi wangu, nilitumia kijificha macho cha Grayhill 61C22-01-04-02. Karatasi ya data ya ubadilishaji wa rotary inahitaji 8.2k ohm kuvuta vipinga kwenye laini mbili za data zinazokuja kutoka kwa swichi. Utahitaji kuangalia karatasi ya data kwa kisimbuzi unachochagua kutumia. Kubadilisha rotary niliyotumia pia kunaweza kuamriwa na kitufe cha kushinikiza axial. Ni huduma muhimu kwa kufanya chaguzi ambazo zimepigiwa simu, n.k lakini sitajadili kiolesura chake hapa. Nina "jukwaa linalofaa la kudhibiti watawala" zilizoorodheshwa kwa sababu (nadhani) hii inaweza kutekelezwa kwenye jukwaa zaidi ya moja. Nimeona watu wengi wakitumia wadhibiti wengine wadogo wa umeme kwa Maagizo kwa hivyo ninataka kuonyesha njia ya jumla pia. Niliandika nambari yote katika PIC Basic Pro kwa matumizi ya Microchip PIC16F877A. Kwa kweli, jambo muhimu ambalo unahitaji kwenye microcontroller ni uwezo wa kukatiza wakati kuna mabadiliko ya mantiki kwenye moja ya pini mbili. Kwenye PIC16F877A, hii inaitwa mabadiliko ya PORTB. Kunaweza kuwa na majina mengine kwa watawala wengine. Kipengele hiki cha kukatiza mdhibiti mdogo ni sehemu ya kinachofanya utekelezaji huu uwe wa kifahari sana.

Hatua ya 2: Maingiliano ya vifaa

Maingiliano ya vifaa
Maingiliano ya vifaa

Suluhisho "rahisi" itakuwa kuwa na "single pole-16 kutupa" switch na viunganisho 16 kwa microcontroller. Kila pato la kubadili basi lingefungwa kwenye pini kwenye mdhibiti mdogo ili kila nafasi ya kupiga simu inaweza kukaguliwa na mdhibiti mdogo. Huu ni utumiaji mkubwa wa pini za I / O. Mambo yanazidi kuwa mabaya ikiwa tunataka nafasi zaidi ya 16 (detents) zinazopatikana kwetu kwenye swichi. Kila nafasi ya ziada kwenye swichi itahitaji ingizo la ziada kwa mdhibiti mdogo. Hii haraka inakuwa matumizi yasiyofaa sana ya pembejeo kwenye microcontroller. Weka uzuri wa swichi ya rotary. Zungusha ya rotary ina matokeo mawili tu kwa mdhibiti mdogo aliyeorodheshwa kama A na B kwenye karatasi ya data. Kuna viwango vinne tu vya mantiki ambavyo mistari hii inaweza kuchukua: AB = 00, 01, 10 na 11. Hii inapunguza sana idadi ya laini za kuingiza ambazo lazima utumie katika kuunganisha swichi kwa microcontroller. Kwa hivyo, tumekata idadi ya laini za kuingiza hadi mbili tu. Sasa nini? Inaonekana kama tunahitaji majimbo 16 tofauti lakini swichi hii mpya ina nne tu. Tumejipiga risasi kwa mguu? Hapana. Soma zaidi. Tutashughulikia nadharia kidogo nyuma ya operesheni ya kubadili rotary kuelezea.

Hatua ya 3: Nadharia ya vifaa vya Uendeshaji

Nadharia ya Vifaa vya Uendeshaji
Nadharia ya Vifaa vya Uendeshaji
Nadharia ya Vifaa vya Uendeshaji
Nadharia ya Vifaa vya Uendeshaji
Nadharia ya Vifaa vya Uendeshaji
Nadharia ya Vifaa vya Uendeshaji

Kuhisi mwelekeo wa kuzunguka kunawezekana kwa kutumia swichi iliyotajwa hapo juu ya "pole-16-kutupa" lakini hutumia pembejeo nyingi kwenye mdhibiti mdogo. Kutumia swichi ya rotary kunapunguza idadi ya pembejeo kwa mdhibiti mdogo lakini sasa tunahitaji kutafsiri ishara zinazotoka kwenye swichi na kuzitafsiri kwa mwelekeo wa kuzungusha. Hii pia ni moja wapo ya uzuri katika suluhisho hili. Hii inamaanisha kuwa kuna nambari ya 2-bit ambayo swichi inatoa ambayo inalingana na msimamo wa swichi. Labda unafikiria: "Ikiwa kuna pembejeo mbili kidogo kwa mdhibiti mdogo, tunawezaje kuwakilisha nafasi zote 16?" Hilo ni swali zuri. Hatuwawakilishi wote. Tunahitaji tu kujua nafasi za jamaa za kitovu ili tuweze kujua mwelekeo wa mzunguko. Msimamo kamili wa kitovu hauna maana. Kwa kuzunguka kwa saa, msimbo ambao swichi hupeana hurudia kila jicho nne na ina alama ya kijivu. Nambari ya kijivu ina maana kwamba kuna mabadiliko moja tu kwa kila mabadiliko ya nafasi. Badala ya uingizaji wa AB kuhesabu kwa kuzunguka kwa saa katika binary kama hii: 00, 01, 10, 11, inabadilika kama hii: 00, 10, 11, 01. Ona kwamba kwa muundo wa mwisho, kuna pembejeo moja tu inabadilika kati ya huweka. Thamani zinazopingana na saa kwa kuingiza AB kwa mdhibiti mdogo zitaonekana kama hii: 00, 01, 11, 10. Hii ni nyuma tu ya muundo wa saa na AB = 00 iliyoorodheshwa kwanza. Angalia michoro kwa ufafanuzi zaidi wa kuona..

Hatua ya 4: Nadharia ya Programu ya Uendeshaji

Nadharia ya Programu ya Uendeshaji
Nadharia ya Programu ya Uendeshaji

Utaratibu ambao hupunguza mwelekeo wa mzunguko unasumbuliwa. Mdhibiti mdogo ambaye unachagua anahitaji kukatiza wakati wowote kuna mabadiliko kwenye (angalau) pini mbili wakati usumbufu umewezeshwa. Hii inaitwa mabadiliko ya PORTB kwenye PIC16F877A. Wakati wowote swichi inapozungushwa, mdhibiti mdogo atasimamishwa na utekelezaji wa programu utatumwa kwa Utaratibu wa Kukatiza Huduma (ISR). ISR itaamua haraka ni njia gani swichi ilizungushwa, kuweka bendera ipasavyo na haraka kurudi kwenye programu kuu. Tunahitaji hii kutokea haraka ikiwa mtumiaji atazungusha swichi haraka sana. Tunajua muundo wa kijivu uliowekwa na AB unarudia kila nafasi nne kwa hivyo ikiwa tutafanya kazi ya kawaida kwa mabadiliko kati ya nafasi hizo nne itafanya kazi kwa wengine wote. Kumbuka kuwa katika mzunguko mmoja wa nafasi nne, kuna kingo nne. Makali yanayoinuka na makali ya kushuka kwa pembejeo A na vile vile pembejeo B Microprocessor itaingiliwa kila wakati kuna ukingo ambayo inamaanisha kuwa mdhibiti mdogo atasumbuliwa wakati wowote kitovu kinapogeuzwa. Kama matokeo, ISR inahitaji kujua ni njia ipi iliyogeuzwa. Ili kutusaidia kujua jinsi ya kufanya hivyo, tunageuka kwa muundo wa wimbi kwa kuzunguka kwa saa. Kumbuka kuwa wakati wowote A ina ukingo, thamani yake mpya kila wakati ni tofauti na ile ya B. Wakati kitovu kinatoka nafasi ya 1 hadi 2, Mabadiliko kutoka kwa mantiki-0 hadi mantiki-1. B bado ni 0 kwa mabadiliko haya na hailingani na thamani mpya ya A. Wakati kitovu kinatoka nafasi ya 3 hadi 4, A ina ukingo wa kuanguka wakati B inabaki kuwa mantiki-1. Angalia tena, kwamba B na thamani mpya ya A ni tofauti. Hivi sasa, tunaweza kuona kwamba wakati wowote A inasababisha usumbufu wakati wa kuzunguka kwa saa, thamani yake mpya ni tofauti na ile ya B. Wacha tuangalie B ili kuona kile kinachotokea. B ina kuongezeka kwa kasi wakati ubadilishaji unabadilika kutoka nafasi ya 2 hadi 3. Hapa, thamani mpya ya B ni sawa na A. Ukiangalia makali ya mwisho iliyobaki kwa kuzunguka kwa saa, B ina kingo inayoanguka ikihama kutoka nafasi ya 4 hadi 5. (Nafasi ya 5 ni sawa na msimamo 1.) Thamani mpya ya B ni sawa na A hapa pia! Sasa tunaweza kufanya punguzo! Ikiwa A inasababisha usumbufu na thamani mpya ya A ni tofauti na ile ya B, mzunguko ulikuwa sawa na saa. Kwa kuongezea, ikiwa B inasababisha usumbufu na thamani mpya ya B ni sawa na A, basi mzunguko ulikuwa sawa na saa. Wacha tuchunguze haraka kesi ya kuzunguka kwa saa. Kama mzunguko wa saa moja kwa moja, mzunguko unaopingana na saa moja utasababisha kukatizwa kwa nne katika mzunguko mmoja: mbili kwa pembejeo A na mbili kwa pembejeo B. Pembejeo A ina kingo kinachoinuka wakati kitovu kinatoka kutoka nafasi ya 4 hadi 3 na ukingo unaoanguka ukisonga kutoka nafasi ya 2 hadi 1 Wakati kitovu kinapohama kutoka nafasi ya 4 hadi 3, thamani mpya ya A ni sawa na dhamana ya B. Ona kwamba wakati A inapohama kutoka nafasi ya 2 hadi 1 thamani yake mpya ni sawa na ile ya B pia. Sasa, tunaweza kuona kwamba wakati A inasababisha kukatiza na thamani yake mpya inafanana na ile ya B mzunguko ulikuwa kinyume cha saa. Haraka, tutaangalia pembejeo B ili kudhibitisha kila kitu. B itasababisha usumbufu wakati kitovu kinatoka kutoka nafasi ya 5 (ambayo ni sawa na 1) hadi 4 na wakati kitovu kinatoka kutoka nafasi ya 3 hadi 2. Katika visa vyote hivi, thamani mpya ya B hailingani na thamani iliyopo ya A ambayo ni kinyume cha kesi wakati B husababisha kukatiza kwa kuzunguka kwa saa. Hii ni habari njema. Kwa muhtasari, ikiwa A inasababisha kukatiza na thamani yake mpya hailingani na thamani ya B au ikiwa B inasababisha usumbufu na thamani mpya ya B inalingana na thamani ya A tunajua kulikuwa na mzunguko wa saa moja kwa moja. Tunaweza kuangalia kesi zingine kwa kuzunguka kinyume cha saa katika programu au tunaweza kudhani kuwa kwa sababu haikuwa mzunguko wa saa moja kwa moja ilikuwa kinyume cha saa. Kawaida yangu ilifanya tu mawazo.

Hatua ya 5: Programu

Programu
Programu
Programu
Programu

Sikutumia vipingamizi vilivyojengwa katika PIC Basic Pro. Nilitumia faili kadhaa ambazo nilijumuisha kwenye nambari yangu kutoka kwa Darrel Taylor kuendesha utaratibu. Hapa ndipo sifa kubwa kwa Darrel ni! Faili ni bure. Tembelea tu wavuti yake kwa habari zaidi, programu zingine na kupakua faili. Unaweza kuruka sehemu hii ikiwa hutumii PIC na usumbufu wa Darrel Taylor. Weka tu usumbufu kama inavyofaa kwenye jukwaa unalotumia. Ili kupata vipingamizi vya Darrel Taylor (DT) kuna mambo mawili ya kufanya: 1. Jumuisha faili za DT_INTS-14. na faili za ReEnterPBP. code.2.) Nakili na ubandike hii kwenye nambari yako. ASMINT_LIST jumla, IntSource, Lebo, Aina, RudishaFlag? INT_Handler RBC_INT, _ISR, PBP, ndio endm INT_CREATEENDASMIWeka vichupo na nafasi kama picha ya mwisho wa Inayoweza kufundishwa ili uweze kuona vitu rahisi kwenye nambari yako. Utahitaji kuibadilisha kidogo ili kukidhi mahitaji yako. Chini ya Lebo, badilisha ISR na jina la subroutine ambayo ni ISR yako. Usisahau maelezo ya chini! Unahitaji! Ili kufanya usumbufu ufanye kazi, kuna mambo mengine mawili ya kufanya: 1.) Andika ISR. Utaandika hii kama vile ungeandika subroutine ya PBP isipokuwa kwamba utahitaji kuingiza @ INT_RETURN mwishoni mwa eneo ndogo badala ya RUDI. Hii itakubali kukatiza na kurudisha utekelezaji wa programu mahali ilipoishia kwenye kitanzi kuu. Katika ndani ya ISR, unahitaji kufuta bendera ya kusumbua ili programu yako isiingie katika usumbufu unaorudiwa. Kusoma tu PORTB ndio yote ambayo inahitaji kufanywa ili kuondoa bendera ya kukatiza kwenye PIC16F877A. Kila mdhibiti mdogo ana njia tofauti ya kusafisha bendera za usumbufu. Angalia karatasi ya data kwa mdhibiti wako mdogo. 2.) Unapofikia hatua katika nambari yako ambayo unataka kuwezesha usumbufu, tumia laini hii ya nambari: @ INT_ENABLE RBC_INTWakati unataka kuzuia usumbufu tumia tu: ya vitu vilivyojaa ndani ya kile nilichofunika tu kwa hivyo nitafupisha haraka. Hadi sasa, mpango wako unapaswa kuangalia kitu kama hiki:; Usanidi wowote unaohitajika au nambariINCLUDE "DT_INTS-14.bas" Jumuisha "ReEnterPBP.bas" ASMINT_LIST jumla; IntSource, Lebo, Aina, ResetFlag? INT_Handler RBC_INT, _myISR, PBP, ndio endm INT_CREATEENDASM; Usanidi mwingine wowote unaohitajika au nambari @ INT_ENABLE RBC_INT; Nambari ambayo inahitaji kujua ni njia ipi inayozunguka @ INT_DISABLE RBC_INT; Nambari zingineEND; Mwisho wa programmyISR:; Nambari ya ISR hapa @ INT_RETURN (Jaribu Kushughulikia Jedwali la Kushughulikia) Nadhani hapa ndipo mtu yeyote ambaye hatumii PIC au DT anaingiliana anaweza kujiunga tena. Sasa, tunahitaji kuandika ISR kwa hivyo mdhibiti mdogo anajua ni njia ipi inayozunguka. Kumbuka kutoka kwa sehemu ya nadharia ya programu ambayo tunaweza kugundua mwelekeo wa mzunguko ikiwa tunajua pembejeo ambayo imesababisha usumbufu, thamani yake mpya na thamani ya ingizo lingine. Hapa kuna pseudocode: Soma PORTB katika ubadilishaji wa mwanzo ili kuondoa bendera ya kukatiza Angalia ikiwa A imesababisha usumbufu. Ikiwa ni kweli, Linganisha A na B. Angalia ikiwa ni tofauti, ikiwa ni tofauti, Ilikuwa ni kuzunguka saa nyingine, Ilikuwa EndifCheck kinyume na saa ikiwa B ilisababisha kukatiza. Ikiwa ni kweli, Linganisha A na B Angalia ikiwa ni tofauti, ikiwa ni sawa, Ilikuwa ni kuzunguka kwa saa nyingine, Ilikuwa kinyume Endif Kurudi kutoka kwa kukatiza Je! Tunajuaje ikiwa mabadiliko kwenye A au B yalisababisha usumbufu? Kugundua thamani mpya ya pembejeo iliyobadilishwa na ingizo zingine (zisizobadilishwa) ni rahisi kwa sababu tunaweza kuzisoma ndani ya ISR. Tunahitaji kujua hali ya kila mmoja ilikuwa kabla ya kunyongwa kutumwa kwa ISR. Hii hufanyika katika kawaida kuu. Utaratibu kuu unakaa na kusubiri mabadiliko ya baiti ambayo tuliita CWflag kuwekwa 1 au kusafishwa kwa 0 na ISR. Baada ya kila mabadiliko yaliyokubaliwa ya kitovu au ikiwa hakuna shughuli ya kitasa, ubadilishaji umewekwa hadi 5 kuonyesha hali ya uvivu. Ikiwa bendera itawekwa au imesafishwa, utaratibu kuu huongeza mara moja au hupunguza shinikizo iliyowekwa sawa ipasavyo kulingana na kuzunguka na kisha kugeuza kutofautisha kwa CWflag kurudi kwa 5 kwa sababu kitasa sasa kiko wavivu tena. Kama kawaida kuu inakagua CWflag, pia inaandika hali ya mabadiliko ya A na B ya rotary. Hii ni rahisi sana na inaonekana kama hii: oldA = AoldB = B Kwa kweli hakuna kitu cha kupendeza sana hapa. Jumuisha tu mistari hiyo miwili mwanzoni mwa kitanzi ambacho huangalia CWflag kwa kuzunguka. Tunasasisha tu maadili ya mantiki ya pembejeo kutoka kwenye kitovu cha kuzunguka ndani ya kitanzi cha nyongeza / cha kupungua katika utaratibu kuu ili tuweze kuona ni nini pembejeo iliyosababisha usumbufu wakati ISR inatekelezwa. Hapa kuna nambari ya ISR: ABchange: scratch = PORTB 'Soma PORTB ili kukatiza bendera' Ikiwa A inasababisha kukatiza, angalia B kwa mwelekeo wa mzunguko IF oldA! = A THEN 'Ikiwa A na B ni tofauti, ilikuwa mzunguko wa saa moja kwa moja IF A! = B KISHA GOTO CW 'Vinginevyo, ilikuwa ni mzunguko wa saa-saa NYINGINE POTE CCW ENDIF ENDIF' Ikiwa B inasababisha usumbufu, angalia A kwa mwelekeo wa mzunguko IF oldB! = B KISHA 'Ikiwa A na B ni sawa, ni ilikuwa zungusha saa moja kwa moja IF A == B KISHA GOTO CW 'Vinginevyo, ilikuwa kinyume na mzunguko wa saa Nyingine GOTO CCW ENDIF ENDIFCW: CWflag = 1 @ INT_RETURNCCW: CWflag = 0 @ INT_RETURNNimejumuisha nambari ya ISR katika faili ya AB_ISR.bas kwa sababu tabo kwenye nambari hazionyeshi jinsi inavyopaswa. Sasa, kwa sababu ISR ina maadili ya zamani ya pembejeo A na B inaweza kuamua ni pembejeo gani iliyosababisha kukatiza, kulinganisha na ingizo lingine (halijabadilika) na kuamua mwelekeo ya mzunguko. Kawaida yote kuu inapaswa kufanya ni kuangalia CWflag ili uone ni mwelekeo upi knob imegeuka (ikiwa ina) na nyongeza au upunguzaji wa kaunta, mahali pa kuweka au chochote unachopenda au unahitaji. Natumai hii inasaidia na haijawahi utata. Aina hii ya kiolesura ni muhimu sana ikiwa mfumo wako tayari unatumia usumbufu kwani hii ni moja tu ya usumbufu kuongeza. Furahiya!

Ilipendekeza: