INHOUDSOPGAWE:

Deel 3: GPIO: ARM-samestelling: lynvolgers: TI-RSLK: 6 stappe
Deel 3: GPIO: ARM-samestelling: lynvolgers: TI-RSLK: 6 stappe

Video: Deel 3: GPIO: ARM-samestelling: lynvolgers: TI-RSLK: 6 stappe

Video: Deel 3: GPIO: ARM-samestelling: lynvolgers: TI-RSLK: 6 stappe
Video: Master GPIO with Raspberry Pi Pico & MicroPython - Uncover the Secrets! 2024, Julie
Anonim
Image
Image
Die hardeware
Die hardeware

Hallo. Dit is die volgende aflewering waar ons voortgaan met die gebruik van ARM (in plaas van 'n hoër vlak). Die inspirasie vir hierdie Instructable is Lab 6 van die Texas Instruments Robotics System Learning Kit, oftewel TI-RSLK.

Ons gebruik die mikrobeheerder uit die stel, die MSP432 LaunchPad -ontwikkelbord, maar miskien vind u iets nuttig om uit hierdie instruksies te onttrek, selfs as u nie die LaunchPad gebruik nie, of die T. I. kurrikulum.

Ons het begin met 'n Instructable -bekendstelling van ARM Assembly, die ontwikkelingsomgewing en hoe om 'n projek te maak.

Die volgende Instructable on ARM Assembly het bekendgestel hoe u met input/output (GPIO) kan omgaan.

Daarna het ons ons kennis uitgebrei en funksies bekendgestel, wat LED's en skakelaars beheer.

Met hierdie Instructable kan ons dit wat ons geleer het, gebruik om iets leuks en nuttigs te doen: om 'n lyn op te spoor.

Dit kan ons later help as ons 'n lynvolgrobot bou.

In die kurrikulum word die meeste programme in C of C ++ gedoen, maar dit is handig om vertroud te raak met die samestelling voordat ons begin afhang van tale en biblioteke op hoër vlak.

Stap 1: Die hardeware

Die hardeware
Die hardeware
Die hardeware
Die hardeware
Die hardeware
Die hardeware

Ek wil nie die hardeware in detail herhaal nie, aangesien daar reeds bronne is, maar ons sal waar nodig verduidelikings byvoeg.

Vir hierdie instruksies gebruik ons die Reflectance Sensor Arrray van Pololu, aangesien dit deel uitmaak van die TI-RSLK (die robotstel). Dit is die een wat in die kursus gebruik word, en in Lab 6 van die kurrikulum.

As u dit nie het nie, kan u 'n IR -detektor (of 'n reeks daarvan) gebruik wat 'n digitale sein, HOOG of LAAG, afgee vir afwesigheid en afwesigheid.

Die array -sensor is die beste omdat dit kan help om vas te stel of ons in die middel van die lyn is of aan die een kant is. Boonop, soos ons later sal sien, kan dit ons help om die hoek van die robot met betrekking tot die lyn op te spoor.

Die reflektansierangskikking het detektors wat baie naby mekaar is. Dit beteken dat ons veelvoudige opsporingseine moet kry, natuurlik, afhangend van die dikte van die lyn.

As dit so is, dan moet die robot, as die robot nie direk in lyn met die lyn is nie, 'n uitset lewer wat die lyn wyer is as wat dit behoort te wees (omdat ons skuins is).

Kyk na die Lab 6 -dokument vir 'n beter verduideliking van bogenoemde.

Hier is 'n paar nuttige instruksies vir hulp met die bedrading / aansluiting van die sensor op die MSP432 LaunchPad -ontwikkelbord.

Ek het ook dieselfde (soortgelyke?) Pdf -instruksies by hierdie stap gevoeg.

As u die Pololu -dokumente noukeurig lees, verduidelik hulle die rede vir die "3.3V bypass", wat u wil spring as u 3.3V in plaas van 5V gebruik.

Aangesien ons nog nie die robot bou nie, maar ons leer eerder oor ARM -samestelling en ook hoe ons met stukke (subsisteme) van die robot kan omgaan, hoef ons nie die bogenoemde instruksies tot op die letter te volg nie.

Op die oomblik kook/verminder die verbinding van die reeksensorskikking tot die volgende:

  • koppel 3.3V en GND van die MSP432 -bord aan die sensorreeks.
  • koppel 'n poortpen (ek stel voor P5.3) van die MSP432 aan die LED -insetspeld op die reëlsensorreeks. Die pen op die sensor is tussen 3.3V en GND.
  • verbind al agt penne/stukkies van 'n enkele poort (ek stel voor P7.0 tot P7.7) met die agt penne van die sensorreeks gemerk "1" tot "8". Dit is die lyne wat hoog of laag gaan, afhangende van wat hulle voel.

Soos u kan sien op die afbeeldings van hierdie stap en in die video, het ek nie die sensor aan die robotonderstel geheg nie, want ek wou maklik programmeer, ontfout, toets, leer.

Met alles verbonde, is ons gereed om die sagteware te gebruik.

Stap 2: Lyn volg

Lyn volg
Lyn volg
Lyn volg
Lyn volg

Die reflektansie skakelsensor is redelik slim omdat dit op ten minste twee maniere kan help.

  • Bepaal of die robot op die lyn gesentreer is of aan die een kant dryf.
  • Is die robot in die rigting van die lyn in lyn, of is dit skuins.

Elkeen van die detektors van die skikking verskaf in wese een bietjie inligting, hetsy HOOG of LAAG.

Die idee is om al die stukkies in 'n enkele getal of enkele bispatroon te kombineer en die patroon te gebruik om besluite te neem (om korrek te beweeg).

Stap 3: Voordat ons regtig kan begin …

.. ons moet iets nuuts leer oor ARM -samestelling. En ek bedoel nie net nog 'n instruksie nie. Diegene is geneig om klein te wees.

Tot dusver het ons nie die 'stapel' in ons programme gebruik nie.

Ons het staatgemaak op die gebruik van die meeste kern -cpu -registers wêreldwyd in verskillende subroetines.

Die enigste ding wat ons gedoen het, was om die LR (skakelregister) adres vir een funksie op te slaan en te herstel - die een wat verskeie ander funksies genoem het. (Ek gebruik 'funksie' en 'subroutine' hier omruilbaar).

Wat ons gedoen het, is nie goed nie. Wat as ons ander funksies wil maak? Wat as ons meer as een vlak van nes het?

In vorige voorbeelde het ons gekies om register R6 te gebruik as die stoorplek vir die LR- of retouradres. Maar as ons verder/dieper nes wil doen, kan ons nie die waarde van R6 aanhou verander nie. Ons sal nog 'n register moet kies. En nog een. En dan word dit lastig om by te hou watter kern -cpu -register watter LR in watter funksie moet herstel.

So nou kyk ons na die "stapel".

Stap 4: Die stapel

Hier is 'n paar leesstof wat die stapel verduidelik.

Ek is 'n groter voorstander van 'n paar idees:

  • slegs soveel teorie as wat nodig is, gaan vinnig na die praktiese
  • leer soos nodig, fokus daarop om iets te doen en nie net doellose oefeninge of voorbeelde nie.

Daar is baie ARM- en MSP432 -dokumentasie aanlyn wat oor die stapel praat, so ek sal dit nie weer herhaal nie. Ek sal ook die gebruik van die stapel hier tot die minimum beperk - om die retouradres (die skakelregister) te stoor.

In wese hoef ons slegs instruksies:

STUKKE {register list}

POP {register list}

Of, in ons geval, spesifiek:

STUKKE {LR}

POP {LR}

'N Vergaderingsfunksie/subroetine sal dus so lyk:

funcLabel:.asmfunc

Druk {LR}; dit behoort waarskynlik een van die eerste instruksies vir inskrywing te wees.; doen meer kode hier..; blah blah blah…; ok, ons is klaar met die funksie, gereed om terug te keer na die oproepfunksie POP {LR}; dit herstel die korrekte terugkeeradres na die oproep; funksie. BX LR; terugkeer.endasmfunc

Die video gaan deur 'n lewendige voorbeeld van verskeie geneste funksies.

Stap 5: Die sagteware

Die aangehegte lêer met die naam "MSP432_Chapter …" bevat baie goeie inligting oor die poorte van die MSP432, en uit die dokument kry ons die volgende hawens, registers, adresse, ens. Dit is egter 'n bietjie gedateer. Ek het egter nie die gedetailleerde adresse vir Port 5 en hoër gesien nie. (slegs "alternatiewe funksies"). Maar dit is nog steeds nuttig.

Ons gaan twee hawens gebruik. P5, P7, P1 en P2.

P5.3 ('n enkele bis) uitset sal wees om die IR LED-aktiveer op die sensor te beheer. Ons gebruik P5.3 omdat dit 'n blootgestelde pen op dieselfde kop is as die ander MSP432 -verbindings wat na die sensorreeks gaan.

P7.0 tot P7.7 sal die agt insette wees wat die data van die sensor versamel; wat dit "sien".

P1.0 is die enkele rooi LED en ons kan dit gebruik om 'n paar aanduidings van die data te gee.

P2.0, P2.1, P2.2 is die RGB LED en ons kan dit ook met sy verskillende kleurmoontlikhede gebruik om ons 'n aanduiding te gee van die sensordata.

As u die vorige instruksies oor al hierdie dinge deurgegaan het, weet u reeds hoe u die program moet instel.

Het net 'n deklarasie -afdeling vir die poorte en stukkies, ens.

U het 'n 'hoof' afdeling.

Daar moet 'n lus wees, waar ons voortdurend die data van P7 lees, besluit oor die data en die twee LED's dienooreenkomstig verlig.

Hier is weer die Port Register -adresse:

  • GPIO P1: 0x4000 4C00 + 0 (ewe adresse)
  • GPIO P2: 0x4000 4C00 + 1 (onewe adresse)
  • GPIO P3: 0x4000 4C00 + 20 (ewe adresse)
  • GPIO P4: 0x4000 4C00 + 21 (onewe adresse)
  • GPIO P5: 0x4000 4C00 + 40 (ewe adresse)
  • GPIO P6: 0x4000 4C00 + 41 (onewe adresse)
  • GPIO P7: 0x4000 4C00 + 60 (ewe adresse)
  • GPIO P8: 0x4000 4C00 + 61 (onewe adresse)
  • GPIO P9: 0x4000 4C00 + 80 (ewe adresse)
  • GPIO P10: 0x4000 4C00 + 81 (onewe adresse)

Wat vetgedruk is, is wat ons vir hierdie instruksies sal gebruik.

Programstappe om IR -detektore te lees

Die volgende is psuedo-kode vir die skryf van die program in C, maar dit is nog steeds nuttig, en ons sal dit redelik noukeurig volg in die samestellingsweergawe van die program.

hoofprogram0) Initialiseer // poorte terwyl (1) {1) P5.3 hoog stel (IR -LED aanskakel) 2) Maak P7.0 'n uitset en stel dit hoog (laai die kapasitor) 3) Wag 10 uur, Clock_Delay1us (10); 4) Maak P7.0 'n inset 5) Begin hierdie lus 10 000 keer a) Lees P7.0 (skakel spanning op P7.0 om in binêre) b) Uitset binêre na P1.0 (waarmee u real -time binêre kan sien) 6) Stel P5.3 laag (skakel IR -LED af, spaar krag) 7) Wag 10 ms, Clock_Delay1ms (10); } // herhaal (terug na terwyl ())

Stap 6: Kom ons verbeter die kode

Die doel of gebruik van die Pololu IR LED -skikking is om 'n lyn op te spoor en om te weet of die robot (toekoms) direk op die lyn gesentreer is, of aan die een kant. Aangesien die lyn 'n sekere dikte het, as die sensorreeks regstreeks loodreg op die lyn is, sal die N -aantal sensors egter 'n ander lesing hê as die res, terwyl die IR -LED -skikking in 'n hoek (nie loodreg nie) is, dan N+1 of N+2 IR LED/detektorpare moet nou 'n ander lesing gee.

Afhangende van hoeveel sensors die teenwoordigheid van die lyn aandui, moet ons dus weet of ons gesentreer is en of ons skuins is of nie.

Vir hierdie laaste eksperiment, kyk net of ons die rooi LED en die RGB LED kan kry om ons meer inligting te gee oor wat die sensorreeks ons vertel.

Die video bevat alle besonderhede. Die finale kode is ook aangeheg.

Dit voltooi die reeks ARM Assembly wat verband hou met GPIO. Ons hoop om later weer met meer ARM -vergadering terug te keer.

Dankie.

Aanbeveel: