![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](https://i.howwhatproduce.com/images/011/image-30696-j.webp)
Tartalomjegyzék:
2025 Szerző: John Day | [email protected]. Utoljára módosítva: 2025-01-23 14:47
![Image Image](https://i.howwhatproduce.com/images/011/image-30696-2-j.webp)
![](https://i.ytimg.com/vi/Q1EuUWpgbic/hqdefault.jpg)
![A hardver A hardver](https://i.howwhatproduce.com/images/011/image-30696-3-j.webp)
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](https://i.howwhatproduce.com/images/011/image-30696-4-j.webp)
![A hardver A hardver](https://i.howwhatproduce.com/images/011/image-30696-5-j.webp)
![A hardver A hardver](https://i.howwhatproduce.com/images/011/image-30696-6-j.webp)
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](https://i.howwhatproduce.com/images/011/image-30696-7-j.webp)
![Sor követése Sor követése](https://i.howwhatproduce.com/images/011/image-30696-8-j.webp)
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…
![](https://i.ytimg.com/vi/AABZ9Rv_H9I/hqdefault.jpg)
.. 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
![](https://i.ytimg.com/vi/RULY05L7ZwY/hqdefault.jpg)
Í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
![](https://i.ytimg.com/vi/VIY0G_zfNdo/hqdefault.jpg)
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:
Arduino -Teensy4 a Teensy 4.0 számára - Teljes összeszerelés: 10 lépés
![Arduino -Teensy4 a Teensy 4.0 számára - Teljes összeszerelés: 10 lépés Arduino -Teensy4 a Teensy 4.0 számára - Teljes összeszerelés: 10 lépés](https://i.howwhatproduce.com/images/002/image-3412-28-j.webp)
Arduino-Teensy4 a Teensy 4.0 számára-Teljes összeszerelés: Ez az utasítás végigvezeti Önt a Teensy 4.0 Arduino-Teensy4 bővítőlapjának összeszerelésén. Vásárolhat egyet a Tindie üzletemből itt: https: //www.tindie.com/products/ cburgess129/arduin … A Teensy 4 -et megrendelheti a mellkasával együtt
Rainbow Glow Citrus összeszerelés: 4 lépés
![Rainbow Glow Citrus összeszerelés: 4 lépés Rainbow Glow Citrus összeszerelés: 4 lépés](https://i.howwhatproduce.com/images/006/image-16195-j.webp)
Rainbow Glow Citrus Gyűjtemény: Láttál már olyan fényt, amely különböző színeket villog, nem pedig egyet? Hiszem, hogy nem. Ez a legjobb éjszakai lámpa, amelyet valaha is beszerezhet vagy vásárolhat partnere, barátai vagy fiataljai számára.? Ezt az alkatrészt a "Tinkercad.com" webhelyen készítettem
Arduino robot farokkal, farok összeszerelés: 11 lépés
![Arduino robot farokkal, farok összeszerelés: 11 lépés Arduino robot farokkal, farok összeszerelés: 11 lépés](https://i.howwhatproduce.com/images/006/image-17484-3-j.webp)
Arduino robot farokkal, farokszerelés: Ez az oktatóanyag bemutatja, hogyan kell kinyomtatni és összeszerelni a farkát
IOT123 - D1M BLOCK - 2xAMUX összeszerelés: 7 lépés (képekkel)
![IOT123 - D1M BLOCK - 2xAMUX összeszerelés: 7 lépés (képekkel) IOT123 - D1M BLOCK - 2xAMUX összeszerelés: 7 lépés (képekkel)](https://i.howwhatproduce.com/images/001/image-564-51-j.webp)
IOT123 - D1M BLOCK - 2xAMUX összeszerelés: A D1M BLOCKS tapintható tokokat, címkéket, polaritási útmutatókat és kitöréseket ad a népszerű Wemos D1 Mini SOC/Shields/Clones -hoz. Az ESP8266 chip egyik problémája az, hogy csak egy analóg IO tű áll rendelkezésre. Ez az útmutató bemutatja, hogyan kell összeszerelni a 2xA
2. RÉSZ - GPIO KARSZERELÉS - RGB - FUNKCIÓHÍVÁSOK - Kapcsolók: 6 lépés
![2. RÉSZ - GPIO KARSZERELÉS - RGB - FUNKCIÓHÍVÁSOK - Kapcsolók: 6 lépés 2. RÉSZ - GPIO KARSZERELÉS - RGB - FUNKCIÓHÍVÁSOK - Kapcsolók: 6 lépés](https://i.howwhatproduce.com/images/002/image-3456-49-j.webp)
2. RÉSZ - GPIO ARM ASSEMBLY - RGB - FUNKCIÓHÍVÁSOK - Kapcsolók: Az 1. részben megtanultuk, hogyan lehet egyetlen piros LED -et váltani a Texas Instruments MSP432 LaunchPad fejlesztőlapján, a C / C ++ helyett az összeszerelést használva. valami hasonlót fog tenni - vezéreljen egy RGB LED -et, amely szintén rajta van