Turinys:

3 dalis: GPIO: ARM Surinkimas: linijos sekėjas: TI-RSLK: 6 žingsniai
3 dalis: GPIO: ARM Surinkimas: linijos sekėjas: TI-RSLK: 6 žingsniai

Video: 3 dalis: GPIO: ARM Surinkimas: linijos sekėjas: TI-RSLK: 6 žingsniai

Video: 3 dalis: GPIO: ARM Surinkimas: linijos sekėjas: TI-RSLK: 6 žingsniai
Video: Подключение к Raspberry Pi устройств для домашней автоматизации. Удобно, легко и просто! 2024, Liepa
Anonim
Image
Image
Aparatūra
Aparatūra

Sveiki. Tai yra kita dalis, kurioje mes ir toliau naudojame ARM surinkimą (vietoj aukštesnio lygio kalbos). Šios instrukcijos įkvėpėjas yra „Texas Instruments Robotics System Learning Kit“6 laboratorija arba TI-RSLK.

Mes naudosime komplekte esantį mikrovaldiklį, MSP432 „LaunchPad“kūrimo plokštę, bet galbūt rasite ką nors naudingo iš šios „Instructable“programos, net jei nenaudojate „LaunchPad“arba nesilaikote T. I. mokymo planas.

Mes pradėjome nuo „Instructable“, pristatydami „ARM Assembly“, kūrimo aplinką ir tai, kaip sukurti projektą.

Kitas „Instructable on ARM Assembly“pristatė, kaip sąveikauti su įvestimi/išvestimi (GPIO).

Tada išplėtėme savo žinias ir pristatėme funkcijas, valdančias šviesos diodus ir jungiklius.

Dabar, naudodamiesi šia instrukcija, galime panaudoti tai, ką išmokome, padaryti kažką linksmesnio ir naudingesnio: aptikti liniją.

Tai gali mums padėti vėliau, kai kursime linijos sekimo robotą.

Mokymo programoje didžioji dalis programavimo atliekama C arba C ++ kalbomis, tačiau pravartu susipažinti su surinkimu, prieš pradedant, priklausomai nuo aukštesnio lygio kalbų ir bibliotekų.

1 žingsnis: Aparatūra

Aparatūra
Aparatūra
Aparatūra
Aparatūra
Aparatūra
Aparatūra

Nenoriu išsamiai išnagrinėti aparatūros, nes šaltinių jau yra, tačiau prireikus pridėsime paaiškinimų.

Šiai instrukcijai mes naudosime „Pololu“atspindžio jutiklio masyvą, nes jis yra „TI-RSLK“(robotų rinkinio) dalis. Jis naudojamas kurso metu ir mokymo programos 6 laboratorijoje.

Jei to neturite, buvimui ir nebuvimui galite naudoti bet kurį IR detektorių (arba jų seriją), kuris perduoda HIGH arba LOW skaitmeninį signalą.

Masyvo jutiklis yra geriausias, nes jis gali padėti nustatyti, ar mes esame ties linijos centru, ar iš vienos pusės. Be to, kaip pamatysime vėliau, tai gali padėti mums aptikti roboto kampą linijos atžvilgiu.

Atspindžio matricoje detektoriai yra labai arti vienas kito. Tai reiškia, kad turėtume gauti kelis aptikimo signalus, žinoma, priklausomai nuo linijos storio.

Jei taip, tada jei robotas nėra tiesiogiai linijoje su linija, jis turėtų grąžinti išvestį, kad linija būtų platesnė nei turėtų būti (nes mes esame kampu).

Norėdami geriau paaiškinti tai, kas išdėstyta aukščiau, pažvelkite į „Lab 6“dokumentą.

Jei reikia pagalbos prijungiant jutiklį prie MSP432 „LaunchPad“kūrimo plokštės, čia pateikiamos naudingos instrukcijos.

Aš taip pat pridėjau tas pačias (panašias?) Pdf instrukcijas prie šio veiksmo.

Jei atidžiai perskaitysite „Pololu“dokumentus, jie paaiškins „3.3V apėjimo“priežastį, kad norėsite pereiti, jei naudojate ne 5V, o 3,3 V.

Kadangi mes dar nesukuriame roboto, o tik mokomės apie ARM surinkimą ir sąveiką su roboto dalimis (posistemėmis), mums nereikia vadovautis aukščiau pateiktomis instrukcijomis.

Kol kas linijinių jutiklių masyvo prijungimas tiesiog verda/sumažėja iki:

  • prijunkite 3.3V ir GND iš MSP432 plokštės prie jutiklių masyvo.
  • prijunkite prievado kaištį (siūlau P5.3) iš MSP432 prie šviesos diodų įjungimo kaiščio linijos jutiklio masyve. Šis jutiklio kaištis yra tarp 3.3V ir GND.
  • prijunkite visus aštuonis vieno prievado kaiščius/bitus (siūlau nuo P7.0 iki P7.7) prie aštuonių jutiklių masyvo kaiščių, pažymėtų nuo 1 iki 8. Tai yra linijos, kurios bus AUKŠTOS arba ŽEMOS, priklausomai nuo to, ką jos jaučia.

Kaip matote šio žingsnio vaizduose ir vaizdo įraše, aš neprijungiau jutiklio prie roboto važiuoklės, nes norėjau lengvai programuoti, derinti, išbandyti, išmokti.

Taigi, kai viskas prijungta, esame pasirengę įsitraukti į programinę įrangą.

2 žingsnis: sekite eilutę

Sekama eilutė
Sekama eilutė
Sekama eilutė
Sekama eilutė

Atspindžio matricos jutiklis yra gana puikus, nes jis gali padėti bent dviem būdais.

  • Nustatykite, ar robotas yra tiesia linija arba nuslysta į vieną pusę.
  • Ar robotas yra linijuotas linijos kryptimi, ar jis yra kampu.

Kiekvienas masyvo detektorius iš esmės pateikia vieną bitą informacijos, HIGH arba LOW.

Idėja yra sujungti visus tuos bitus į vieną skaičių arba vieną bitų modelį ir naudoti šį modelį sprendimams priimti (norint teisingai judėti).

3 žingsnis: kol mes tikrai negalime pradėti…

.. turime išmokti kažko naujo apie ARM surinkimo programavimą. Ir aš neturiu omenyje tik kito nurodymo. Jie linkę būti smulkūs.

Iki šiol savo programose nenaudojome „kamino“.

Mes pasikliovėme daugeliu pagrindinių procesorių registrų naudojimu visame pasaulyje skirtingose paprogramėse.

Vienintelis dalykas, kurį mes padarėme, buvo išsaugoti ir atkurti vienos funkcijos - nuorodos registro - adresą, kuris iškvietė kelias kitas funkcijas. (Čia naudoju „funkciją“ir „paprogramę“pakaitomis).

Tai, ką darėme, nėra gerai. Ką daryti, jei norime įdėti kitas funkcijas? Ką daryti, jei turime daugiau nei vieną lizdavimo lygį?

Ankstesniuose pavyzdžiuose mes pasirinkome naudoti registrą R6 kaip LR arba grąžinimo adreso saugyklą. Bet jei norime atlikti tolesnį/gilesnį lizdavimą, negalime toliau keisti R6 vertės. Turime pasirinkti dar vieną registrą. Ir kitas. Ir tada tampa sudėtinga sekti, kuriame pagrindiniame procesoriaus registre yra kuris LR, kurią funkciją atkurti.

Taigi dabar pažvelkime į „krūvą“.

4 žingsnis: krūva

Čia yra skaitymo medžiaga, paaiškinanti krūvą.

Aš esu daugiau poros idėjų šalininkas:

  • tik tiek teorijos, kiek reikia, greitai pereikite prie praktikos
  • mokytis pagal poreikį, sutelkti dėmesį į tai, kad iš tikrųjų kažką darai, o ne tik be tikslo atlikti pratimus ar pavyzdžius.

Internete yra daug ARM ir MSP432 dokumentų, kuriuose kalbama apie krūvą, todėl nesiruošiame viso to pakartoti. Aš taip pat ketinu kuo mažiau naudoti krūvos - išsaugoti grąžinimo adresą (nuorodų registrą).

Iš esmės mums reikia tik instrukcijų:

PUSH {registro sąrašas}

POP {registrų sąrašas}

Arba mūsų atveju konkrečiai:

PUSH {LR}

POP {LR}

Taigi surinkimo funkcija/paprogramė atrodytų taip:

funcLabel:.asmfunc

PUSH {LR}; tai tikriausiai turėtų būti viena iš pirmųjų įėjimo instrukcijų.; daryk daugiau kodo cia..; bla bla bla…; Gerai, mes baigėme funkciją, pasiruošę grįžti prie skambinimo funkcijos POP {LR}; tai atkuria teisingą grįžimo adresą atgal; funkcija. BX LR; grįžti.endasmfunc

Vaizdo įraše pateikiamas tiesioginis kelių įdėtų funkcijų pavyzdys.

5 žingsnis: programinė įranga

Pridėtame faile, pavadintame „MSP432_Chapter…“, yra daug geros informacijos apie MSP432 prievadus, ir iš to dokumento gauname šiuos prievadus, registrus, adresus ir tt Tačiau jis šiek tiek pasenęs. Tačiau nemačiau išsamių 5 ir daugiau prievadų adresų. (tik „alternatyvios funkcijos“). Bet vis tiek naudinga.

Mes naudosime du uostus. P5, P7, P1 ir P2.

P5.3 (vieno bito) išvestis bus skirta valdyti jutiklio infraraudonųjų spindulių šviesos diodą. Mes naudojame P5.3, nes tai yra atviras kaištis toje pačioje antraštėje, kaip ir kitos MSP432 jungtys, einančios į jutiklių masyvą.

P7.0 – P7.7 bus aštuoni įėjimai, kurie renka duomenis iš jutiklio; ką „mato“.

P1.0 yra vienas raudonas šviesos diodas, ir mes galėtume tai naudoti norėdami pateikti tam tikrų duomenų nuorodų.

P2.0, P2.1, P2.2 yra RGB šviesos diodas, ir mes taip pat galime jį naudoti su skirtingomis spalvų galimybėmis, kad galėtume parodyti jutiklio duomenis.

Jei perėjote ankstesnes su visa tai susijusias instrukcijas, tuomet jau žinote, kaip nustatyti programą.

Tiesiog turėkite deklaracijų skyrių uostams ir bitams ir kt.

Turėsite „pagrindinį“skyrių.

Turėtų būti ciklas, kuriame mes nuolat skaitome duomenis iš P7, priimame sprendimą dėl šių duomenų ir atitinkamai užsidega du šviesos diodai.

Čia vėl yra uostų registro adresai:

  • GPIO P1: 0x4000 4C00 + 0 (lygūs adresai)
  • GPIO P2: 0x4000 4C00 + 1 (nelyginiai adresai)
  • GPIO P3: 0x4000 4C00 + 20 (lygūs adresai)
  • GPIO P4: 0x4000 4C00 + 21 (nelyginiai adresai)
  • GPIO P5: 0x4000 4C00 + 40 (lygūs adresai)
  • GPIO P6: 0x4000 4C00 + 41 (nelyginiai adresai)
  • GPIO P7: 0x4000 4C00 + 60 (lygūs adresai)
  • GPIO P8: 0x4000 4C00 + 61 (nelyginiai adresai)
  • GPIO P9: 0x4000 4C00 + 80 (lygūs adresai)
  • GPIO P10: 0x4000 4C00 + 81 (nelyginiai adresai)

Šriftu paryškinta tai, ką naudosime šiai instrukcijai.

Programos veiksmai, skirti skaityti IR detektorius

Toliau pateikiamas psuedo kodas, skirtas programai rašyti C, tačiau ji vis tiek yra naudinga, ir mes ją labai atidžiai stebėsime surinkimo programos versijoje.

Pagrindinė programa (10); 4) Padarykite P7.0 kaip įvestį) 6) Nustatykite P5.3 žemą (išjunkite IR šviesos diodą, taupykite energiją) 7) Palaukite 10 ms, Clock_Delay1ms (10); } // pakartoti (atgal į laiką ())

6 žingsnis: patobulinkime kodą

„Pololu IR“šviesos diodų masyvo paskirtis arba naudojimas yra aptikti liniją ir sužinoti, ar robotas (būsimasis) yra tiesiai linijos centre, ar iš vienos pusės. Be to, kadangi linija yra tam tikro storio, jei jutiklių matrica yra tiesiogiai statmena linijai, N skaičius jutiklių turės kitokį rodmenį nei kiti, tuo tarpu jei IR šviesos diodų matrica yra tam tikru kampu (ne statmena), tada N+1 arba N+2 IR šviesos diodų/detektorių poros dabar turėtų rodyti skirtingai.

Taigi, priklausomai nuo to, kiek jutiklių nurodo linijos buvimą, turėtume žinoti, ar esame centre, ir ar esame pasvirę, ar ne.

Šiam paskutiniam eksperimentui pažiūrėkime, ar galime gauti raudoną šviesos diodą ir RGB šviesos diodą, kad suteiktume daugiau informacijos apie tai, ką mums sako jutiklių masyvas.

Vaizdo įrašas apima visas detales. Galutinis kodas taip pat pridedamas.

Tai užbaigia ARM surinkimo seriją, susijusią su GPIO. Tikimės sugrįžti su daugiau ARM asamblėjos vėliau.

Ačiū.

Rekomenduojamas: