Përmbajtje:

Pjesa 3: GPIO: Kuvendi i ARM-së: Ndjekësi i linjës: TI-RSLK: 6 hapa
Pjesa 3: GPIO: Kuvendi i ARM-së: Ndjekësi i linjës: TI-RSLK: 6 hapa

Video: Pjesa 3: GPIO: Kuvendi i ARM-së: Ndjekësi i linjës: TI-RSLK: 6 hapa

Video: Pjesa 3: GPIO: Kuvendi i ARM-së: Ndjekësi i linjës: TI-RSLK: 6 hapa
Video: #3 Мультиметр, потенциометр, фоторезистор, транзистор - Курс основ электроники для начинающих 2024, Korrik
Anonim
Image
Image
Hardueri
Hardueri

Përshëndetje. Ky është kësti tjetër ku ne vazhdojmë të përdorim asamblenë ARM (në vend të një gjuhe të nivelit më të lartë). Frymëzimi për këtë Instructable është Lab 6 i Sistemit të Mësimit të Sistemit Robotik të Texas Instruments, ose TI-RSLK.

Ne do të përdorim mikrokontrolluesin nga kompleti, bordi i zhvillimit MSP432 LaunchPad, por ndoshta do të gjeni diçka të dobishme për të nxjerrë nga ky Instructable edhe nëse nuk jeni duke përdorur LaunchPad, ose duke ndjekur T. I. kurrikula.

Filluam me prezantimin e Asamblesë së ARM -së me udhëzime, mjedisin e zhvillimit dhe mënyrën e krijimit të një projekti.

Instruksioni tjetër i Asamblesë ARM prezantoi mënyrën e bashkëveprimit me hyrjen/daljen (GPIO).

Pastaj ne zgjeruam njohuritë tona dhe prezantuam funksione, duke kontrolluar LED dhe çelsin.

Tani me këtë Instructable, ne mund të përdorim atë që kemi mësuar për të bërë diçka më argëtuese, më të dobishme: të zbulojmë një linjë.

Kjo mund të na ndihmojë më vonë kur të ndërtojmë një robot ndjekës të linjës.

Në kurrikulë, shumica e programimit bëhet në C ose C ++, por është e dobishme të njiheni me asamblenë, para se të fillojmë të varemi nga gjuhët e nivelit më të lartë dhe bibliotekat.

Hapi 1: Hardueri

Hardueri
Hardueri
Hardueri
Hardueri
Hardueri
Hardueri

Unë nuk dua të rishikoj pajisjen në detaje, pasi tashmë ka burime, por ne do të shtojmë shpjegime aty ku është e nevojshme.

Për këtë Instructable, ne do të përdorim Rrjetin e Reflektimit Sensor nga Pololu, pasi vjen si pjesë e TI-RSLK (kompleti i robotit). Shtë ai që përdoret në kurs, dhe në Lab 6 të kurrikulës.

Nëse nuk e keni atë, mund të përdorni çdo detektor IR (ose seri të tyre) që nxjerr një sinjal dixhital, LART HIGH ose I ULT, për praninë dhe mungesën.

Sensori i grupit është më i miri sepse mund të ndihmojë në zbulimin nëse jemi pikërisht në qendër të linjës, apo jashtë në njërën anë. Plus, siç do ta shohim më vonë, mund të na ndihmojë të zbulojmë këndin e robotit në lidhje me vijën.

Grupi i reflektimit ka detektorë shumë pranë njëri -tjetrit. Kjo do të thotë që ne duhet të marrim sinjale të shumta zbulimi, në varësi natyrisht nga trashësia e linjës.

Nëse është kështu, atëherë nëse roboti nuk është drejtpërdrejt i lidhur me linjën, atëherë ai duhet të kthejë një dalje që linja është më e gjerë seç duhet (sepse jemi në një kënd).

Për një shpjegim më të mirë të sa më sipër, hidhini një sy dokumentit Lab 6.

Për ndihmë në lidhjen / lidhjen e sensorit me bordin e zhvillimit MSP432 LaunchPad, këtu janë disa udhëzime të dobishme.

Unë gjithashtu kam shtuar të njëjtat udhëzime (të ngjashme?) Pdf në këtë hap.

Nëse lexoni me kujdes dokumentet e Pololu, ato shpjegojnë arsyen e "anashkalimit 3.3V", që do të dëshironi të kërceni nëse përdorni 3.3V në vend të 5V.

Meqenëse ne ende nuk po ndërtojmë robotin, por në vend të kësaj ne po mësojmë vetëm për montimin e ARM dhe gjithashtu se si të bashkëveprojmë me pjesët (nënsistemet) e robotit, nuk kemi pse t'i ndjekim me shkrim udhëzimet e mësipërme.

Tani për tani, lidhja e grupit të sensorëve të linjës thjesht vlon/zvogëlohet në sa vijon:

  • lidhni 3.3V dhe GND nga bordi MSP432 në grupin e sensorëve.
  • lidhni një pin port (sugjeroj P5.3) nga MSP432 në kunjin e aktivizimit LED në grupin e sensorit të linjës. Ajo kunj në sensor është midis 3.3V dhe GND.
  • lidhni të tetë kunjat/bitët e një porti të vetëm (sugjeroj P7.0 deri P7.7) me tetë kunjat e grupit të sensorëve të etiketuar "1" deri në "8". Këto janë linjat që do të shkojnë LART HIGH ose TOW ulta në varësi të asaj që ata ndjejnë.

Siç mund ta shihni në imazhet e këtij hapi, dhe në video, unë nuk e bashkova sensorin në shasinë e robotit, sepse doja lehtësi programimi, korrigjimi, testimi, mësimi.

Pra, me gjithçka të lidhur, ne jemi gati të futemi në softuer.

Hapi 2: Vijimi në vijim

Linja në vijim
Linja në vijim
Linja në vijim
Linja në vijim

Sensori i grupit të reflektimit është mjaft i mrekullueshëm sepse mund të ndihmojë në të paktën dy mënyra.

  • Përcaktoni është roboti i përqendruar në linjë ose po largohet nga njëra anë.
  • A është roboti i rreshtuar në drejtim të vijës, apo është në një kënd.

Secili nga detektorët e grupit në thelb siguron një grimë informacioni, të Lartë ose të ULT.

Ideja është që të kombinohen të gjitha ato pjesë në një numër të vetëm ose një model të vetëm bit, dhe ta përdorin atë model për të marrë vendime (në mënyrë që të lëvizin në mënyrë korrekte).

Hapi 3: Para se të Fillojmë Vërtet…

.. ne duhet të mësojmë diçka të re në lidhje me programimin e asamblesë ARM. Dhe nuk dua të them vetëm një udhëzim tjetër. Ata priren të jenë të vegjël.

Deri tani ne nuk e kemi përdorur "pirgun" në programet tona.

Ne jemi mbështetur në përdorimin e shumicës së regjistrave kryesorë të CPU -së në nivel global nëpër nënrutina të ndryshme.

E vetmja gjë që bëmë ishte të ruanim dhe rivendosnim adresën LR (lidhja e regjistrit) për një funksion - atë që thërriste disa funksione të tjera. (Unë përdor "funksion" dhe "nënrutinë" në mënyrë të ndërsjellë këtu).

Ajo që kemi bërë nuk është e mirë. Po sikur të duam të fusim funksione të tjera? Po sikur të kemi më shumë se një nivel folezimi?

Në shembujt e mëparshëm, ne zgjodhëm të përdorim regjistrin R6 si ruajtje për LR ose adresën e kthimit. Por nëse duam të bëjmë fole më tej/më thellë, nuk mund të vazhdojmë të ndryshojmë vlerën e R6. Duhet të zgjedhim një regjistër tjetër. Dhe nje tjeter. Dhe pastaj bëhet e rëndë të mbash gjurmët se cili regjistër thelbësor i CPU mban cilin LR për të rikthyer në cilin funksion.

Pra, tani i hedhim një sy "pirgut".

Hapi 4: pirg

Këtu është një material leximi që shpjegon pirgun.

Unë jam një përkrahës më i madh i disa ideve:

  • vetëm sa më shumë teori që kërkohet, shkoni për praktikën shpejt
  • mësoni sipas nevojës, përqendrohuni në bërjen e diçkaje dhe jo vetëm ushtrime ose shembuj pa qëllim.

Ekziston shumë dokumentacion ARM dhe MSP432 në internet që flet për pirgun, kështu që nuk do të rishikoni të gjitha ato. Unë gjithashtu do ta mbaj përdorimin e pirgut këtu në një minimum - duke kursyer adresën e kthimit (Regjistri i lidhjeve).

Në thelb, ne kemi nevojë vetëm për udhëzime:

PUSH {lista e regjistrimit}

POP {lista e regjistrimit}

Ose, në rastin tonë, konkretisht:

PUSH {LR}

POP {LR}

Pra, një funksion/nëngrup i montimit do të duket kështu:

funcLabel:.asmfunc

PUSH {LR}; ky ndoshta duhet të jetë një nga udhëzimet e para në hyrje.; bëni më shumë kod këtu..; blah blah blah…; ok, ne kemi mbaruar me funksionin, gati për t'u kthyer përsëri në funksionin e thirrjes POP {LR}; kjo rikthen adresën e saktë të kthimit përsëri në thirrje; funksionin. BX LR; kthehem.endasmfunc

Videoja kalon përmes një shembulli të drejtpërdrejtë të disa funksioneve të futura.

Hapi 5: Softueri

Skedari i bashkangjitur i etiketuar "MSP432_Chapter …" ka shumë informacion të mirë në lidhje me portet e MSP432, dhe nga ai dokument marrim portet, regjistrat, adresat, etj. Megjithatë, është pak e datuar. Sidoqoftë, nuk pashë adresat e hollësishme të listuara për Portin 5 e lart. (vetëm "funksione alternative"). Por është akoma e dobishme.

Ne do të përdorim dy Porte. P5, P7, P1 dhe P2.

P5.3 (një bit i vetëm) dalja do të jetë për të kontrolluar aktivizimin e LED LED në sensor. Ne po përdorim P5.3 sepse është një kunj i ekspozuar në të njëjtën kokë si lidhjet e tjera MSP432 që shkojnë në grupin e sensorëve.

P7.0 deri P7.7 do të jenë tetë hyrjet që mbledhin të dhënat nga sensori; atë që "sheh".

P1.0 është LED i vetëm i kuq dhe ne mund ta përdorim atë për të na dhënë disa tregues të të dhënave.

P2.0, P2.1, P2.2 është LED RGB dhe ne gjithashtu mund ta përdorim atë, me mundësitë e tij të ndryshme të ngjyrave, për të na dhënë tregues të të dhënave të sensorit.

Nëse keni kaluar nëpër Instructables të mëparshëm në lidhje me të gjitha këto, atëherë tashmë e dini se si ta konfiguroni programin.

Thjesht keni seksionin e deklarimit për portet dhe copat, etj.

Do të keni një seksion "kryesor".

Duhet të ketë një lak, ku ne lexojmë vazhdimisht të dhënat nga P7, marrim vendimin për ato të dhëna dhe ndriçojmë dy LED në përputhje me rrethanat.

Këtu janë përsëri adresat e Regjistrit të Portit:

  • GPIO P1: 0x4000 4C00 + 0 (madje edhe adresat)
  • GPIO P2: 0x4000 4C00 + 1 (adresa tek)
  • GPIO P3: 0x4000 4C00 + 20 (madje edhe adresat)
  • GPIO P4: 0x4000 4C00 + 21 (adresa tek)
  • GPIO P5: 0x4000 4C00 + 40 (madje edhe adresat)
  • GPIO P6: 0x4000 4C00 + 41 (adresa tek)
  • GPIO P7: 0x4000 4C00 + 60 (madje edhe adresat)
  • GPIO P8: 0x4000 4C00 + 61 (adresa tek)
  • GPIO P9: 0x4000 4C00 + 80 (madje edhe adresat)
  • GPIO P10: 0x4000 4C00 + 81 (adresa tek)

Ajo që është e theksuar është ajo që ne do të përdorim për këtë Instructable.

Hapat e Programit për Leximin e Detektorëve IR

Më poshtë është psuedo-kodi për shkrimin e programit në C, por është akoma i dobishëm, dhe ne do ta ndjekim atë nga afër në versionin e montimit të programit.

programi kryesor0) Filloni // portat ndërsa (1) {1) Vendoseni P5.3 të lartë (ndizni IR LED) 2) Bëni P7.0 një dalje dhe vendoseni lart (ngarkimi i kondensatorit) 3) Prisni 10 ne, Clock_Delay1us (10); 4) Bëni P7.0 një hyrje 5) Drejtoni këtë lak 10, 000 herë a) Lexoni P7.0 (konverton tensionin në P7.0 në binar) b) Dalja binare në P1.0 (ju lejon të shihni binarin në kohë reale) 6) Vendos P5.3 të ulët (fik IR LED, kursim energjie) 7) Prisni 10 ms, Clock_Delay1ms (10); } // përsëris (përsëri në ndërsa ())

Hapi 6: Le të Përmirësojmë Kodin

Qëllimi ose përdorimi i grupit Pololu IR LED është të zbulojë një linjë dhe të dijë nëse roboti (e ardhmja) është i përqendruar drejtpërdrejt në linjë, ose jashtë në njërën anë. Gjithashtu, meqenëse linja ka një trashësi të caktuar, nëse grupi i sensorëve është drejtpërdrejt pingul me vijën, numri N i sensorëve do të ketë një lexim të ndryshëm nga pjesa tjetër, ndërsa nëse grupi IR LED është në një kënd (jo pingul), atëherë Çiftet N+1 ose N+2 IR LED/detektorë tani duhet të japin një lexim të ndryshëm.

Kështu, varësisht nga sa sensorë tregojnë praninë e linjës, ne duhet të dimë nëse jemi të përqendruar dhe nëse jemi të vendosur në kënd apo jo.

Për këtë eksperiment përfundimtar, le të shohim nëse mund të marrim LED të kuq dhe LED RGB për të na dhënë më shumë informacion në lidhje me atë që po na thotë grupi i sensorëve.

Video futet në të gjitha detajet. Kodi përfundimtar është bashkangjitur gjithashtu.

Kjo përfundon serinë e Asamblesë së ARM -së në lidhje me GPIO. Shpresojmë të kthehemi me më shumë Kuvend të ARM -së në një kohë të mëvonshme.

Faleminderit.

Recommended: