Tartalomjegyzék:

3. rész: GPIO: ARM Összeszerelés: Vonalkövető: TI-RSLK: 6 lépés
3. rész: GPIO: ARM Összeszerelés: Vonalkövető: TI-RSLK: 6 lépés

Videó: 3. rész: GPIO: ARM Összeszerelés: Vonalkövető: TI-RSLK: 6 lépés

Videó: 3. rész: GPIO: ARM Összeszerelés: Vonalkövető: TI-RSLK: 6 lépés
Videó: The Twilight Saga: Breaking Dawn Part 1 (2011) - Childbirth Scene | Movieclips 2024, Július
Anonim
Image
Image
A hardver
A hardver

Helló. Ez a következő rész, ahol továbbra is az ARM összeállítást használjuk (magasabb szintű nyelv helyett). Az Instructable inspirációja a Texas Instruments Robotics System Learning Kit 6. laboratóriuma, vagy a TI-RSLK.

A készletből származó mikrokontrollert, az MSP432 LaunchPad fejlesztőpanelt fogjuk használni, de talán talál valami hasznosat az utasításból, még akkor is, ha nem használja a LaunchPad -ot, vagy követi a T. I. tanterv.

Kezdtünk egy Instructable -nal, amely bemutatta az ARM Assembly -t, a fejlesztési környezetet és a projekt elkészítésének módját.

A következő Instructable on ARM Assembly bemutatta a bemenet/kimenet (GPIO) használatának módját.

Ezt követően bővítettük ismereteinket, és bemutattuk a LED -eket és a kapcsolókat vezérlő funkciókat.

Ezzel az Instructable programmal a tanultakat valami szórakoztatóbb, hasznosabb dologra használhatjuk: vonal észlelésére.

Ez segíthet nekünk később, amikor vonalkövető robotot építünk.

A tantervben a programozás nagy része C vagy C ++ nyelven történik, de hasznos megismerkedni az összeszereléssel, mielőtt elkezdenénk a magasabb szintű nyelvektől és a könyvtáraktól függően.

1. lépés: A hardver

A hardver
A hardver
A hardver
A hardver
A hardver
A hardver

Nem akarom részletezni a hardvert, mivel vannak források, de szükség esetén magyarázatokat adunk hozzá.

Ehhez az utasításhoz a Pololu reflexiós érzékelő tömbjét fogjuk használni, mivel a TI-RSLK (robotkészlet) része. Ezt használják a tanfolyamon és a tanterv 6. laborjában.

Ha nincs ilyen, akkor bármely IR érzékelőt (vagy azok sorozatát) használhat, amelyek digitális jelet adnak ki, HIGH vagy LOW, jelenlétre és távollétre.

A tömbérzékelő a legjobb, mert segít felismerni, hogy a vonal közepén vagyunk, vagy az egyik oldalon. Ráadásul, mint később látni fogjuk, segíthet a robotnak a vonalhoz viszonyított szögének észlelésében.

A fényvisszaverő tömb érzékelői nagyon közel vannak egymáshoz. Ez azt jelenti, hogy több érzékelési jelet kell kapnunk, természetesen a vonal vastagságától függően.

Ha igen, akkor ha a robot nincs egyenes vonalban a vonallal, akkor olyan kimenetet kell visszaadnia, amely a vonalnál szélesebb, mint kellene (mert szögben vagyunk).

A fentiek jobb magyarázata érdekében nézze meg a Lab 6 dokumentumot.

Ha segítségre van szüksége az érzékelő bekötésében / csatlakoztatásában az MSP432 LaunchPad fejlesztőpanelhez, itt van néhány hasznos utasítás.

Ugyanazokat a (hasonló?) Pdf utasításokat is hozzáadtam ehhez a lépéshez.

Ha figyelmesen elolvassa a Pololu dokumentumokat, elmagyarázza a "3.3V bypass" okát, hogy ugrálni szeretne, ha 5V helyett 3.3V -ot használ.

Mivel még nem építjük a robotot, hanem csak az ARM összeszerelését és a robot egyes részeivel (alrendszereivel) való interakciót ismerjük meg, nem kell betartanunk a fenti utasításokat.

Egyelőre a vonalérzékelő tömb csatlakoztatása csak a következőre forr/csökken:

  • csatlakoztassa a 3.3V -ot és a GND -t az MSP432 kártyáról az érzékelő tömbhöz.
  • csatlakoztasson egy portcsapot (javaslom a P5.3 -at) az MSP432 -ből a LED -engedélyező csaphoz a vonalérzékelő tömbön. Ez a csap az érzékelőn 3.3V és GND között van.
  • csatlakoztassa egyetlen port mind a nyolc érintkezőjét/bitjét (javaslom a P7.0 -tól P7.7 -ig) az érzékelő tömb "1" - "8" feliratú nyolc érintkezőjéhez. Ezek azok a sorok, amelyek MAGAS vagy ALACSONYak lesznek, attól függően, hogy mit érzékelnek.

Amint ez a lépés képein, és a videón is látható, nem rögzítettem az érzékelőt a robot alvázához, mert könnyű programozást, hibakeresést, tesztelést, tanulást szerettem volna.

Tehát, ha minden csatlakoztatva van, készen állunk a szoftverbe való belépésre.

2. lépés: Sor követése

Sor követése
Sor követése
Sor követése
Sor követése

A fényvisszaverő tömb érzékelő elég ügyes, mert legalább kétféleképpen segíthet.

  • Határozza meg, hogy a robot vonal közepén van -e, vagy egyik oldalra sodródik.
  • A robot a vonal irányába van beállítva, vagy szögben van.

A tömb minden érzékelője lényegében egy bit információt szolgáltat, akár HIGH, akár LOW.

Az ötlet az, hogy ezeket a biteket egyetlen számba vagy egyetlen bitmintába egyesítse, és ezt a mintát használja a döntések meghozatalához (a helyes mozgás érdekében).

3. lépés: Mielőtt igazán elkezdenénk…

.. valami újat kell tanulnunk az ARM összeállítási programozásról. És nem csak egy másik utasításra gondolok. Ezek általában kisebbek.

Eddig nem használtuk a "verem" programjainkat.

Bíztunk a legtöbb központi CPU -regiszter globális használatában, különböző alprogramokban.

Az egyetlen dolog, amit megtettünk, az volt, hogy elmentettük és visszaállítottuk az LR (linkregiszter) címet egy funkcióhoz - amelyhez több más függvényt hívtak meg. (Itt a "függvényt" és az "alprogramot" felcserélhetően használom).

Amit csináltunk, az nem jó. Mi van, ha más funkciókat szeretnénk beágyazni? Mi van, ha több fészkelési szintünk van?

A korábbi példákban úgy döntöttünk, hogy az R6 regisztert használjuk LR vagy visszatérési cím tárolójaként. De ha tovább/mélyebben szeretnénk fészkelni, nem folytathatjuk az R6 értékének megváltoztatását. Még egy nyilvántartást kell választanunk. És egy másik. És akkor megterhelő lesz nyomon követni, hogy melyik központi CPU -regiszter melyik LR -t melyik funkcióra állítja vissza.

Tehát most vessünk egy pillantást a "veremre".

4. lépés: A verem

Íme néhány olvasnivaló a verem magyarázatára.

Pár gondolat nagyobb támogatója vagyok:

  • csak amennyi elmélet szükséges, gyorsan menjen a gyakorlatba
  • szükség szerint tanuljon, koncentráljon a tényleges cselekvésre, és ne csak a céltalan gyakorlatokra vagy példákra.

Rengeteg ARM és MSP432 dokumentáció található az interneten, amelyek a veremről beszélnek, így nem fogjuk újra felidézni mindezt. A verem használatát is a lehető legkevesebbre fogom csökkenteni - a visszaküldési cím (a linkregiszter) mentése.

Lényegében csak utasításokat kell tennünk:

PUSH {regisztrációs lista}

POP {regisztrációs lista}

Vagy a mi esetünkben konkrétan:

PUSH {LR}

POP {LR}

Tehát egy összeszerelési függvény/alprogram így nézne ki:

funcLabel:.asmfunc

PUSH {LR}; valószínűleg ez lesz az egyik első belépési utasítás.; csinálj itt több kódot..; bla bla bla…; rendben, befejeztük a funkciót, készen állunk visszatérni a POP {LR} hívófunkcióhoz; ez visszaállítja a helyes visszatérési címet a híváshoz; funkció. BX LR; return.endasmfunc

A videó több beágyazott funkció élő példáján megy keresztül.

5. lépés: A szoftver

A mellékelt "MSP432_Chapter…" feliratú fájl sok jó információt tartalmaz az MSP432 portjairól, és ebből a dokumentumból a következő portokat, regisztereket, címeket stb. Kapjuk. Ez azonban kissé elavult. Azonban nem láttam az 5 -ös és újabb portokhoz tartozó részletes címeket. (csak "alternatív funkciók"). De még mindig hasznos.

Két portot fogunk használni. P5, P7, P1 és P2.

A P5.3 (egyetlen bit) kimenet az IR LED engedélyezését vezérli az érzékelőn. Azért használjuk a P5.3 -at, mert ez egy kitűzött tű ugyanazon a fejlécen, mint a többi MSP432 csatlakozó, amelyek az érzékelő tömbhöz mennek.

P7.0 - P7.7 lesz a nyolc bemenet, amelyek az érzékelőtől gyűjtik az adatokat; amit "lát".

A P1.0 az egyetlen piros LED, és ezt használhatjuk arra, hogy néhány jelzést adjunk az adatokról.

A P2.0, P2.1, P2.2 az RGB LED, és ezt is használhatjuk a különböző színlehetőségekkel, hogy jelezzük az érzékelő adatait.

Ha végigment a mindezekkel kapcsolatos korábbi utasításokon, akkor már tudja, hogyan kell beállítani a programot.

Csak legyen deklarációs rész a portokhoz és bitekhez, stb.

Lesz egy "fő" rész.

Létre kell hozni egy hurkot, ahol folyamatosan olvassuk a P7 -ből származó adatokat, döntünk ezekről az adatokról, és ennek megfelelően világítunk a két LED -en.

Ismét itt vannak a portregiszter címei:

  • GPIO P1: 0x4000 4C00 + 0 (páros cím)
  • GPIO P2: 0x4000 4C00 + 1 (páratlan címek)
  • GPIO P3: 0x4000 4C00 + 20 (páros cím)
  • GPIO P4: 0x4000 4C00 + 21 (páratlan címek)
  • GPIO P5: 0x4000 4C00 + 40 (páros cím)
  • GPIO P6: 0x4000 4C00 + 41 (páratlan címek)
  • GPIO P7: 0x4000 4C00 + 60 (páros cím)
  • GPIO P8: 0x4000 4C00 + 61 (páratlan címek)
  • GPIO P9: 0x4000 4C00 + 80 (páros cím)
  • GPIO P10: 0x4000 4C00 + 81 (páratlan címek)

Félkövér betűtípust használunk ehhez az utasításhoz.

Programlépések az IR -érzékelők olvasásához

Az alábbi psuedo-kód a program C-beli írásához, de még mindig hasznos, és a program összeszerelő változatában eléggé követjük.

Főprogram (10); 4) Végezze el a P7.0 bemenetet 5) Futtassa le ezt a ciklust 10 000 -szer) 6) Állítsa a P5.3 alacsony értéket (kapcsolja ki az IR LED -et, energiatakarékos) 7) Várjon 10 ms -ot, Clock_Delay1ms (10); } // ismétlés (vissza a (z) () időpontig)

6. lépés: Javítsuk a kódot

A Pololu IR LED tömb célja vagy használata egy vonal észlelése, és annak ismerete, hogy a robot (jövő) közvetlenül a vonal közepén vagy az egyik oldalon van -e. Továbbá, mivel a vonalnak bizonyos vastagsága van, ha az érzékelő tömb közvetlenül merőleges a vonalra, N számú érzékelőnek más lesz a leolvasása, mint a többinek, míg ha az IR LED tömb valamilyen szögben van (nem merőleges), akkor Az N+1 vagy N+2 IR LED/érzékelő pároknak most más értéket kell adniuk.

Így attól függően, hogy hány érzékelő jelzi a vonal jelenlétét, tudnunk kell, hogy középre állunk -e, és hogy szögben állunk -e vagy sem.

Ehhez a végső kísérlethez nézzük csak meg, hogy megkaphatjuk -e a piros LED -et és az RGB LED -et, hogy több információt kapjunk arról, amit az érzékelő tömb mond nekünk.

A videó minden részletre kiterjed. A végső kód is csatolva van.

Ezzel befejeződik a GPIO -hoz kapcsolódó ARM Assembly sorozat. Reméljük, hogy később visszatérünk több ARM közgyűléssel.

Köszönöm.

Ajánlott: