Sisukord:

Osa 3: GPIO: ARM Assamblee: Liini jälgija: TI-RSLK: 6 sammu
Osa 3: GPIO: ARM Assamblee: Liini jälgija: TI-RSLK: 6 sammu

Video: Osa 3: GPIO: ARM Assamblee: Liini jälgija: TI-RSLK: 6 sammu

Video: Osa 3: GPIO: ARM Assamblee: Liini jälgija: TI-RSLK: 6 sammu
Video: BTT Manta M8P v2 - Basics with CB1 v2.2 2024, Juuli
Anonim
Image
Image
Riistvara
Riistvara

Tere. See on järgmine osamakse, kus jätkame ARM-i koostamist (kõrgema taseme keele asemel). Selle juhendi inspiratsiooniks on Texas Instrumentsi robootikasüsteemi õppekomplekti 6. labor või TI-RSLK.

Me kasutame komplekti mikrokontrollerit, MSP432 LaunchPadi arendusplaati, kuid võib -olla leiate sellest juhendist midagi kasulikku, isegi kui te LaunchPadi ei kasuta või järgite T. I. õppekava.

Alustasime Instructable'iga, mis tutvustas ARM Assembly, arenduskeskkonda ja projekti koostamist.

Järgmine Instructable on ARM Assembly tutvustas, kuidas suhelda sisend/väljundiga (GPIO).

Seejärel laiendasime oma teadmisi ja tutvustasime funktsioone, LED -de ja lülitite juhtimist.

Nüüd saame selle juhendiga kasutada õpitut, et teha midagi lõbusamat ja kasulikumat: joone tuvastamist.

See võib meid aidata hiljem, kui me ehitame rida järgiva roboti.

Õppekavas on suurem osa programmeerimisest C või C ++, kuid abiks on assambleega tutvumine, enne kui alustame sõltuvalt kõrgema taseme keeltest ja raamatukogudest.

Samm: riistvara

Riistvara
Riistvara
Riistvara
Riistvara
Riistvara
Riistvara

Ma ei taha riistvara üksikasjalikult ümber kujundada, kuna allikad on juba olemas, kuid vajadusel lisame selgitusi.

Selle juhendi jaoks kasutame Pololu peegeldusanduri massiivi, kuna see on osa robotikomplektist TI-RSLK. Seda kasutatakse kursusel ja õppekava 6. laboris.

Kui teil seda pole, saate kohaloleku ja puudumise jaoks kasutada mis tahes IR -detektorit (või nende seeriat), mis väljastab digitaalsignaali, HIGH või LOW.

Massiiviandur on parim, sest see aitab tuvastada, kas oleme otse joone keskel või ühel küljel. Lisaks, nagu hiljem näeme, aitab see meil tuvastada roboti nurka joone suhtes.

Peegeldusmassiivis on detektorid üksteise kõrval väga lähedal. See tähendab, et me peaksime saama mitu tuvastussignaali, olenevalt muidugi joone paksusest.

Kui jah, siis kui robot ei ole joonega otsejoones, peaks see tagastama väljundi, mille joon on laiem kui peaks (kuna oleme nurga all).

Ülaltoodu paremaks selgitamiseks vaadake Lab 6 dokumenti.

Anduri MSP432 LaunchPad arendusplaadiga ühendamisel / ühendamisel abi saamiseks leiate siit mõned kasulikud juhised.

Olen sellele sammule lisanud ka samad (sarnased?) Pdf -juhised.

Kui loete hoolikalt Pololu dokumente, selgitavad nad "3.3V ümbersõidu" põhjust, et kui soovite kasutada 5V asemel 3.3V, soovite hüpata.

Kuna me ei ehita veel robotit, vaid õpime lihtsalt ARM -i kokkupanekust ja ka sellest, kuidas suhelda roboti osadega (alamsüsteemidega), ei pea me ülaltoodud juhiseid tähe järgi järgima.

Praegu keeb/väheneb liinianduri massiivi ühendamine järgmisega:

  • ühendage 3.3V ja GND MSP432 plaadilt andurimassiiviga.
  • ühendage MSP432 -st pordi tihvt (ma soovitan P5.3) liini anduri massiivi LED -lubatava tihvtiga. See anduri tihvt on vahemikus 3,3 V ja GND.
  • ühendage ühe pordi kõik kaheksa tihvti/bitti (soovitan P7.0 kuni P7.7) andurimassiivi kaheksa kontaktiga, millel on tähis "1" kuni "8". Need on read, mis lähevad kõrgele või madalale sõltuvalt sellest, mida nad tunnevad.

Nagu näete selle sammu piltidelt ja videost, ei kinnitanud ma sensorit roboti šassii külge, sest soovisin programmeerimise, silumise, testimise ja õppimise lihtsust.

Seega, kui kõik on ühendatud, oleme valmis tarkvaraga tutvuma.

2. samm: rida järgides

Liini järgimine
Liini järgimine
Liini järgimine
Liini järgimine

Peegeldusmassiivi andur on üsna tore, sest see võib aidata vähemalt kahel viisil.

  • Määrake, kas robot on joone keskel või triivib ühele küljele.
  • Kas robot on joone suunas joondatud või on see nurga all.

Kõik massiivi detektorid annavad sisuliselt ühe bitti teavet, kas HIGH või LOW.

Idee on ühendada kõik need bitid üheks numbriks või bitimustriks ja kasutada seda mustrit otsuste tegemiseks (et õigesti liikuda).

Samm: enne kui me tõesti alustame…

.. peame õppima midagi uut ARM -i koostamise programmeerimise kohta. Ja ma ei pea silmas lihtsalt teist juhist. Need kipuvad olema väikesed.

Siiani pole me oma programmides "virna" kasutanud.

Oleme lootnud enamiku põhiliste protsessoriregistrite kasutamisele kogu maailmas erinevates alamprogrammides.

Üks asi, mida me tegime, oli salvestada ja taastada LR (linkregistri) aadress ühe funktsiooni jaoks - see, mis kutsus mitu muud funktsiooni. (Ma kasutan siin "funktsiooni" ja "alamprogrammi" vaheldumisi).

See, mida oleme teinud, pole hea. Mis siis, kui tahame teisi funktsioone pesastada? Mis siis, kui meil on rohkem kui üks pesitsemistasand?

Eelmistes näidetes valisime registri R6 kasutamiseks LR või tagastusaadressi salvestusruumina. Aga kui me tahame edasi/sügavamalt pesitseda, ei saa me jätkata R6 väärtuse muutmist. Peaksime valima teise registri. Ja teine. Ja siis muutub koormavaks jälgida, milline CPU põhiregister millist LR -i funktsiooni taastada.

Nii et nüüd vaatame "virna".

4. samm: virn

Siin on mõned lugemismaterjalid, mis selgitavad virna.

Olen mõne idee suurem pooldaja:

  • ainult nii palju teooriat kui vaja, minge kiiresti praktilisele
  • õppida vastavalt vajadusele, keskenduda millegi tegelikule tegemisele ja mitte ainult mõttetutele harjutustele või näidetele.

Internetis on palju ARM- ja MSP432 -dokumentatsiooni, mis räägivad virnast, nii et ärge seda kõike uuesti üles tõstke. Samuti kavatsen siin virna kasutamise minimaalseks muuta - salvestades tagastusaadressi (lingiregistri).

Põhimõtteliselt vajame ainult juhiseid:

PUSH {register list}

POP {register list}

Või meie puhul konkreetselt:

Lükka {LR}

POP {LR}

Niisiis, kokkupaneku funktsioon/alamprogramm näeks välja selline:

funcLabel:.asmfunc

PUSH {LR}; see peaks ilmselt olema üks esimesi sisenemisjuhiseid.; tee siit rohkem koodi..; bla.. bla … bla …; ok, oleme funktsiooniga lõpetanud, valmis tagasi pöörduma helistamisfunktsiooni POP {LR} juurde; see taastab helistamiseks õige tagasisaatmisaadressi; funktsiooni. BX LR; tagastama.endasmfunc

Video läbib reaalajas näite mitmest pesastatud funktsioonist.

Samm 5: Tarkvara

Lisatud fail nimega "MSP432_Chapter…" sisaldab palju head teavet MSP432 portide kohta ja sellest dokumendist saame järgmised pordid, registrid, aadressid jne. See on siiski pisut aegunud. Kuid ma ei näinud üksikasjalikke aadresse, mis on loetletud sadama 5 ja uuemate jaoks. (ainult "alternatiivsed funktsioonid"). Kuid see on endiselt kasulik.

Me kasutame kahte porti. P5, P7, P1 ja P2.

P5.3 (ühe bitine) väljund on anduri infrapuna LED-lubamise juhtimiseks. Me kasutame P5.3, kuna see on paljastatud tihvt samas päises kui teised andurimassiivi minevad MSP432 ühendused.

P7.0 kuni P7.7 on kaheksa sisendit, mis koguvad andurilt andmeid; mida see "näeb".

P1.0 on üks punane LED ja me võiksime seda kasutada andmete andmiseks.

P2.0, P2.1, P2.2 on RGB valgusdiood ja me saame seda kasutada ka erinevate värvivalikutega, et anda meile anduri andmed.

Kui olete selle kõigega seotud eelmised juhised läbi käinud, siis teate juba programmi seadistamist.

Lihtsalt omage sadamate ja bittide deklareerimise sektsiooni jne.

Teil on jaotis "peamine".

Peaks olema tsükkel, kus me loeme pidevalt andmeid P7 -st, teeme nende andmete üle otsuse ja süttib vastavalt kaks LED -i.

Siin on jällegi sadamaregistri aadressid:

  • GPIO P1: 0x4000 4C00 + 0 (paaris aadressid)
  • GPIO P2: 0x4000 4C00 + 1 (paaritu aadress)
  • GPIO P3: 0x4000 4C00 + 20 (paaritud aadressid)
  • GPIO P4: 0x4000 4C00 + 21 (paaritu aadress)
  • GPIO P5: 0x4000 4C00 + 40 (paaritud aadressid)
  • GPIO P6: 0x4000 4C00 + 41 (paaritu aadress)
  • GPIO P7: 0x4000 4C00 + 60 (paaritud aadressid)
  • GPIO P8: 0x4000 4C00 + 61 (paaritu aadress)
  • GPIO P9: 0x4000 4C00 + 80 (paaritud aadressid)
  • GPIO P10: 0x4000 4C00 + 81 (paaritu aadress)

Rasvases kirjas kasutame seda juhendit.

Programmi sammud IR -detektorite lugemiseks

Järgnev on psuedo-kood programmi kirjutamiseks C-s, kuid see on siiski kasulik ja järgime seda programmi koostamisversioonis üsna täpselt.

peamine programm (10); 4) Tehke P7.0 sisendiks 5) Käitage seda tsüklit 10 000 korda a) Lugege P7.0 (teisendab P7.0 pinge binaarseks)) 6) Seadke P5.3 madal (lülitage IR LED välja, säästes energiat) 7) Oodake 10 ms, Clock_Delay1ms (10); } // kordamine (tagasi samasse aega ())

6. samm: parandame koodi

Pololu IR LED -massiivi eesmärk või kasutamine on joone tuvastamine ja teada saada, kas robot (tulevik) on otse joone keskel või ühel küljel. Samuti, kuna joonel on teatud paksus, siis kui andurimassiiv on sirgega otse risti, on N arv andureid erineva näidu kui ülejäänud, samas kui IR -LED -massiiv on mõne nurga all (mitte risti), N+1 või N+2 IR LED/detektoripaarid peaksid nüüd andma teistsuguse näidu.

Seega, olenevalt sellest, kui palju andureid näitab joone olemasolu, peaksime teadma, kas oleme tsentreeritud ja kas oleme nurga all või mitte.

Selle viimase katse jaoks vaatame, kas saame punase LED -i ja RGB -LED -i, et anda meile rohkem teavet selle kohta, mida andurimassiiv meile ütleb.

Video hõlmab kõiki üksikasju. Lisatud on ka lõplik kood.

See lõpetab GPIO -ga seotud ARM -assamblee seeria. Loodame, et naaseme hiljem rohkemate ARM -i koosolekutega.

Aitäh.

Soovitan: